2012-10-12 103 views
9

是否有程序訪問Java documentation的api?類似於Eclipse等編輯器/ IDE所做的類似於IntelliSense的工具。當然,javadoc生成的html可以被解析和編入索引,但是知道某些東西是否已經作爲獨立包存在是非常棒的。編程訪問Java文檔

更新: 爲了清楚起見,我試圖通過編程訪問java語言實現的文檔。但是,並不是一個簡單的方法,但是你必須從Oracle的站點獲取openjdk,然後執行make docs並提供一些doclet以非html形式獲得輸出。這是我從一開始就試圖避免的。所以我正在閱讀所有的Makefiles,現在試圖弄清楚爲什麼$ PLATFORM沒有被解析並且源代碼失敗!

我最後解決了什麼問題:

刮傷html文檔。是的。意識到會完成我的工作。

import urllib2 
import pymongo 

mongo = pymongo.Connection('localhost') 
mongo_db = mongo['api_db'] 
mongo_collection = mongo_db['api_collection'] 

URL='''http://docs.oracle.com/javase/6/docs/api/index-files/index-''' 
URL_range = 27+1 

def getPageElements(url): 
    content=urllib2.urlopen(url).read() 
    from BeautifulSoup import BeautifulSoup 
    soup = BeautifulSoup(content) 
    elements = soup('dl') 
    return elements 


def savePageElements(elements): 
    for i in elements[0]: 
      try: 
        entry={'type_description':str(i.findNext('dt')).split('-')[1].split('<')[0]\ 
            +i.findNext('a').findNext('a').renderContents(),\ 
            'signature':i.findNext('a').findNext('a').renderContents()+i.findNext('b').renderContents(),\ 
            'description': i.findNext('dd').renderContents()\ 
          } 
        print entry 
        insert_id = mongo_collection.save(entry) 
      except: 
        pass 


def retrieve(str): 
    mongo_documents = mongo_collection.find({ 
    'signature': str, 
    #'type_description':"Method of java.io.PrintStream" 
    }) 
    for this_document in mongo_documents: 
     print this_document 


if __name__=="__main__": 
    for i in range(1,URL_range): 
      #url=URL+str(i)+".html" 
      #print "Processing:", url 
      #elements=getPageElements(url) 
      #print elements[0] 
      #savePageElements(elements) 
      retrieve("println(String)") 

但看看dexy。如果我可以設法在Ubuntu上構建OpenJDK而不會造成任何問題 - 它會產生很好的JSON。

+0

爲了什麼目的? – MadProgrammer

+0

爲代碼和文檔之間的「特徵位置」和「可追蹤性」構建研究原型。 – Tathagata

+0

它需要版本特定嗎?即Java 7,Java 6?或者你需要能夠跟蹤 – MadProgrammer

回答

2

在編寫Eclipse的時候,它解析了javadoc並做了很好的工作。它似乎是在3.2M4中引入的。您可能能夠從Eclipse源代碼中提取功能,與Eclipse社區進行檢查可能是一個入門點。

如果這不起作用,我想你的出發點將是一個普通的香草HTML解析器。

0
  • 您可以使用JavaDoc工具的輸出並將其解析爲XML,如in this example
  • 您也可以使用其他文檔提取工具,如Doxygen,並解析其(更好的)XML輸出。
  • 當你有基本的分析知識時,你可以自己編寫一個JavaDoc提取器。有很多免費的Java解析器是一個很好的起點。 (我認爲這將是您研究原型的最佳方式)。
1

Javadoc工具解析到的doclet的信息您的Java文件和代表把這種結構化信息保存到文檔中。標準doclet生成熟悉的HTML輸出,但您可以使用write your own,並告訴javadoc使用它。如果您有原始的源代碼可用,這可能是最可靠的選項。