我正在編寫一個Eclipse插件來執行一些簡單的代碼生成。我能夠獲取代表我需要修改的方法的IMethod,但我不確定如何在其正文中實際編寫其他代碼。我知道這可以用AST節點完成,那麼有沒有辦法在IMethod和MethodDeclaration之間進行轉換呢?將方法添加到方法
Q
將方法添加到方法
1
A
回答
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(字符串) - 字符串參數是結合鍵,見前面的點。
相關問題
- 1. 將方法添加到ApplicationUserManager
- 2. 添加方法的方法
- 3. Rails:將方法添加到activerecord(正確的方法?)
- 4. 將方法添加到Sylius模型的最佳方法
- 5. 將註釋添加到繼承方法的最佳方法
- 6. 循環瀏覽Javascript方法並將數據添加到方法
- 7. 將對象添加到Arraylist並在方法外使用方法
- 8. 將方法添加到jquery插件的最佳方法
- 9. Corona storyboard將方法添加到方法外部的[self.view]
- 10. 將方法添加到域類
- 11. 將擴展方法添加到MembershipProvider
- 12. 將原型/方法添加到jQuery val();
- 13. 將方法添加到JavaScript函數
- 14. 將方法添加到Django模型中
- 15. 將方法添加到內置類
- 16. 將orElse函數添加到firstWhere方法
- 17. 如何將方法添加到Cairo.Context?
- 18. 將setter方法添加到scala類
- 19. 將方法添加到導入的類
- 20. 如何將方法添加到JTextPane
- 21. 將方法添加到EntityFramework DBset
- 22. 將方法添加到Ruby數組類
- 23. 將方法添加到Windows窗體?
- 24. 將類方法添加到ActiveRecord :: Base
- 25. 將方法添加到JavaScript對象
- 26. 如何將方法添加到DataGridView類
- 27. 將事件添加到方法
- 28. 將方法添加到POCO類
- 29. 將方法添加到默認類
- 30. 將方法添加到對象數組
好文章,謝謝。在java模型中搜索一個方法非常簡單,所以我抓住了一個IMethod。然後,我將ICompilationUnit解析爲一個AST,並從中獲取mehod聲明,並將它們的java元素(MethodDeclaration.resolvebinding()。getJavaElement())與原始IMethod進行比較。當他們匹配時,我知道MethodDeclaration(AST)對應於原始IMethod(JavaModel)。我相信這不是這樣做的正確方法,但它工作。 –
不客氣。我已經添加了JDT FAQ的摘錄,其中提到了CompilationUnit.findDeclaringNode()方法。可能這可以簡化你的代碼。 – sevenforce