解析Java代码并使用AST添加方法(JDT Eclipse)

时间:2012-12-07 09:45:01

标签: java eclipse parsing abstract-syntax-tree eclipse-jdt

我有一个包含类的.java文件。我想为该类添加一个方法,但我找不到真正有用的“HOWTO”或示例。 我正在使用Eclipse及其用于AST的JDT插件。 我尝试了一个从项目

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

然后用astrewrite添加一个方法。 但它似乎只有在我作为插件项目而不是简单的Java应用程序运行时才有效。 我需要在java中编写一个“简单地”解析java文件并向其类添加方法的应用程序。 我应该做的是: 1)直接从我要解析的.java文件创建一个ICompilationUnit(最终位于我自己项目的目录中) 2)使用另一种方式

这两种情况我都无法继续下去。有人可以帮帮我吗?

2 个答案:

答案 0 :(得分:2)

当您需要通过添加某些内容进行更改时,您必须使用CompilationUnit提供的功能来创建新节点。

向" unit"添加方法你必须:

  • 使用编译单元创建MethodDeclaration节点:

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

  • 根据您的要求自定义此方法声明:

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

这会产生:void newMethod() {}

  • 从" unit"获取TypeBinding :

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

  • 将新创建的MethodDeclaration添加到正文声明:

typeDeclaration.bodyDeclarations().add( md );

在TypeDeclaration上有一个名为getMethods()的方法,但它没有返回MethodDeclarations的实时列表,因此你无法直接修改它。

答案 1 :(得分:0)

将源文件作为文本读取并将最后}替换为方法声明加}非常容易。显然,如果有人将多个顶级类放在一个文件中,这不起作用(这种情况非常罕见,我怀疑你会遇到问题)。