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 を body 宣言に追加します。

typeDeclaration.bodyDeclarations().add( md );

TypeDeclaration に getMethods() というメソッドがありますが、MethodDeclarations のライブ リストを返さないため、直接変更することはできません。

于 2015-12-09T11:38:23.983 に答える
0

}ソースファイルをテキストとして読み、最後をメソッド宣言 plus に置き換えるのはとても簡単}です。明らかに、誰かが複数のトップレベル クラスを 1 つのファイルに入れている場合、これは機能しません (これは非常にまれであり、問​​題があるとは思えません)。

于 2012-12-07T12:54:38.380 に答える