2012-12-07 75 views
2

我有一個包含類的.java文件。我想爲該類添加一個方法,但我無法找到真正有用的「HOWTO」或示例。 我正在使用Eclipse和它的JDT插件AST。 我想,從項目解析java代碼並用AST添加方法(JDT Eclipse)

IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject("ProjName"); 
IJavaProject javaProject = JavaCore.create(project); 
IPackageFragment package1 = javaProject.getPackageFragments()[0]; 
ICompilationUnit unit = package1.getCompilationUnits()[0]; 

創建ICompilationUnit然後用astrewrite添加一個方法的代碼。 但它似乎工作,只有當我運行所有的插件項目,而不是一個簡單的Java應用程序。 我需要在java中編寫一個「簡單」解析java文件並向其類中添加方法的應用程序。 我應該做的是: 1)創建ICompilationUnit直接形成我想分析(最終位於我自己的項目目錄使用另一種方式

兩種情況下,我不能去的java文件) 2)進一步。任何人都可以幫助我?

回答

0

以文本方式讀取源文件非常容易,並用方法聲明加}替換最後的}。顯然,如果有人在一個文件中放置多個頂級類(這是非常罕見的,我懷疑你會遇到問題),這是行不通的。

+0

我需要使用AST(或類似的),因爲我不應該被迫在代碼的末尾插入方法。例如,可能需要將新方法放入另一個已有的方法中。 我在這篇文章中提出了簡單的目標,以便學習如何使AST成爲可能,然後自己嘗試使用這些信息來做更復雜的事情。 – user1847118

2

當您需要通過添加東西給編譯單元進行更改時,您將不得不使用CompilationUnit提供的函數來創建新節點。

要添加一個方法來 「單位」,您將有:

  • 使用編譯單元創建MethodDeclaration節點:

MethodDeclaration md = unit.getAST().newMethodDeclaration();

  • 自定義此方法聲明您的要求:

md.setName(unit.getAST().newSimpleName("newMethod")); md.setBody(unit.getAST().newBlock());

這將產生:void newMethod() {}

  • 獲得 「單位」 TypeBinding:

TypeDeclaration typeDeclaration = (TypeDeclaration)unit.types().get(0);

  • 新創建MethodDeclaration補充人體聲明:

typeDeclaration.bodyDeclarations().add(md);

有一個叫做的getMethods()上TypeDeclaration方法,但它不返回MethodDeclarations的實時列表,因此你不能直接修改。