2009年5月6日 星期三

V05 註解的存取(3)──取得註解的內容

為了確認Java程式碼與註解的關聯,實際在workspace裡測試了Eclipse JDT的功能。JDT裡共有兩個系列可以處理Java程式,分別是CompilationUnit與AST。

AST採用DOM的結構方式解析程式碼,從Class、Field、Method甚至是方法裡的Block、Statement都能找到對應的物件,不管是解析的深度(CompilationUnit只能拿到Class、Field與Method)或是API的便利都比CompilationUnit好用。但是AST從Eclipse 2.1起就因為註解的複雜而取消在Block與Statement上附帶Java Comment的功能,只在Type(等同於Class)層級集合該程式的全部註解;無法建立註解對應程式碼的關聯,這對我後續想做到的事是沒有幫助的。CompilationUnit的解析沒有進入Method內,也沒有提供直接取得Java Doc的方法,但是各物件都提供了getSource()的方法可快速拿到包含註解與宣告的程式碼。

程式碼的註解的確會造成判讀的困擾,像是因修改而註解掉的程式碼就很可能被視為下一行程式的註解。為了讓程式明白地知道該註解是資訊還是修改記錄,必須定義不同用途的註解方式:像是註解的程式碼一律在行首使用 // 、設計的記錄與屬性都用多行的 /* */ 包覆該程式碼前一行、修改的簡要資訊則先用單行的 /* */ 放在程式碼後讓處理程式整合到設計記錄。

用程式來處理程式碼是我想做的作法中最關鍵的技術。尋常的程式設計的自由度會令程式區塊內的意義不夠精確,所以要先定義每一個細部單位的意義;再來是解析後儲存的集合與每一個單位彼此之間關聯的建立。根據後面想要達成的功能,將會陸續明白需要在哪些地方建立什麼樣的關聯,這也必須加以明確的記錄。

至於要用哪一種技術來解析程式碼,現在也還不能決定。目前比較偏好CompilatoinUnit加上自己寫程式分析更細部的source,不過解析方法純粹自己撰寫也是能夠接受的選擇。後面的文章會暫時假設所有程式碼與註解的解析都百分之百正確,以此為基本前提來討論可以自動產出些什麼。

沒有留言:

張貼留言