ソース コード内のすべての変数のIField または IJavaElement 参照を取得する必要があります。私はプラグインを使用し、次を使用してすべてのトップレベル オブジェクトを読み取ることができる ICompilationUnit を取得します。
for( IJavaElement i:unit.getTypes()[0].getChildren() )
また
for( IJavaElement i:unit.getAllTypes() )
ローカル変数にアクセスするにはどうすればよいですか? ICompilationUnit を CompilationUnit に解析しようとしましたが、ここで各 field の ASTNode を取得できますが、それを IField に変換することはできません。何か案は?
//編集: 例: クラスの場合:
パブリック クラス テスト {
int グローバル 1; int global2; ボイド a() { global1 = 4; int local1; int local2 = 5; }
}
電話する
for (IType タイプ : unit.getTypes()) { System.out.println("itype "+type); for (IField iField : type.getFields()) { System.out.println("iField "+iField); }}
出力は次のとおりです。
itype class Test [in [作業コピー] Test.java [in [in src [in testowy]]] int global1 int global2 void a() iField int global1 [in Test [in [作業コピー] Test.java [in [ in src [in testowy]]]]] iField int global2 [in Test [in [作業コピー] Test.java [in [in src [in testowy]]]]]
したがって、ローカル変数は見つかりませんでした...
//追加 - まだ苦労しています: 実際には、私が期待していた動作ではありません.
for( IMethod i:unit.getAllTypes()[0].getMethods() )
{
System.out.println("index to h:"+h+" type "+i.getSource()+" name: "+i.getElementName());
h++;
int o =0;
for( IJavaElement j: i.getChildren() )
{
System.out.println("index to o: "+o+j+" type "+j.getElementType()+" name: "+j.getElementName());
o++;
}
}
このコードは、すべてのメソッドを検索し (機能する)、メソッドからすべてのローカル変数を取得する (機能しない) ことを期待していました。フィールドでループに入ることはありません。関数宣言を正しく出力するので、すべての変数が表示されると確信しています...
また、INodes の使用に関しては、すべてのノードにアクセスできますが、タイプを Node から必要な IField/IJavaElement に変更するにはどうすればよいですか?
ありがとう :)