3

我有一个 .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)使用另一种方式

这两种情况我都不能走得更远。任何人都可以帮助我吗?

4

2 回答 2

2

当您需要通过向编译单元添加某些内容来进行更改时,您将不得不使用 CompilationUnit 提供的函数来创建新节点。

要将方法添加到“单元”,您必须:

  • 使用您的编译单元创建一个 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 的实时列表,因此您不能直接修改它。

于 2015-12-09T11:38:23.983 回答
0

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

于 2012-12-07T12:54:38.380 回答