2012-09-20 136 views
1

我正在編寫一個Eclipse插件來執行一些簡單的代碼生成。我能夠獲取代表我需要修改的方法的IMethod,但我不確定如何在其正文中實際編寫其他代碼。我知道這可以用AST節點完成,那麼有沒有辦法在IMethod和MethodDeclaration之間進行轉換呢?將方法添加到方法

回答

0

IMethod是JDT的Java模型的一個類,而MethodDeclaration是JDT AST的節點類。 Java模型與AST沒有關係。但是,您可以使用該模型創建AST,但通常會使用ICompilationUnit(表示Java源文件),但也可以使用字符串創建AST。

我建議檢查出this article


編輯:

可能 「沒有直接連接」 將是更好的措辭。在JDT FAQ如下:

如何從IBinding,IJavaElement,ASTNode到另一個的一個去了?

[...]

從IJavaElement到IBinding

如果你只需要綁定鍵而不是綁定對象本身,尋找一個 '信息getKey()' 方法IJavaElement的子類型。該方法返回綁定密鑰,這在許多情況下可能是有用的,例如見下一點。請注意,並非IJavaElement的所有子類型都具有相應的綁定,例如, IType和IMethod有一個,但是IPackageFragment和IImportContainer沒有。

如果你真的需要綁定對象,你可以使用'org.eclipse.jdt.core.dom.ASTParser.createBindings(IJavaElement [],IProgressMonitor)'。請注意,與僅獲取綁定密鑰相比,此操作稍微昂貴,因爲必須創建綁定。

從IJavaElement其宣佈ASTNode

org.eclipse.jdt.core.dom.CompilationUnit.findDeclaringNode(字符串) - 字符串參數是結合鍵,見前面的點。

+0

好文章,謝謝。在java模型中搜索一個方法非常簡單,所以我抓住了一個IMethod。然後,我將ICompilationUnit解析爲一個AST,並從中獲取mehod聲明,並將它們的java元素(MethodDeclaration.resolvebinding()。getJavaElement())與原始IMethod進行比較。當他們匹配時,我知道MethodDeclaration(AST)對應於原始IMethod(JavaModel)。我相信這不是這樣做的正確方法,但它工作。 –

+0

不客氣。我已經添加了JDT FAQ的摘錄,其中提到了CompilationUnit.findDeclaringNode()方法。可能這可以簡化你的代碼。 – sevenforce