新しく作成されたメソッド宣言で参照される型のコンパイル ユニットにインポート宣言を追加しようとしています。この目的のために、特定の ImportRewrite インスタンスにアクセスするすべての型 (単純型、パラメーター化型など) を追加する単純な ASTVisitor を作成しました。コンパイル ユニットに加えた変更を MultiTextEdit インスタンスに追加するには、最初に rewriteAST() メソッドを使用して ASTRewrite インスタンスに変更を追加し、次に rewriteImports() メソッドを使用して ImportRewrite に変更を追加します。以下のコード:
MultiTextEdit edit = new MultiTextEdit();
TextEdit astEdit = astRewrite.rewriteAST();
edit.addChild(astEdit);
TextEdit importEdit = importRewrite.rewriteImports(new NullProgressMonitor());
edit.addChild(importEdit);
また、ビジターの一部は次のとおりです (他のタイプは同じパターンに従います)。
public boolean visit(SimpleType type) {
ITypeBinding typeBinding = type.resolveBinding();
importRewrite.addImport(typeBinding);
return true;
}
問題は、新しく作成されたコンパイル単位で、インポート宣言が他のすべての型宣言などの後に配置され、コンパイル エラーが発生することです。ドキュメントに記載されているように、インポート宣言は ASTRewrite によって編集されません。astRewrite の変更の前に importRewrite の変更を追加しようとした結果、インポート宣言がパッケージ宣言の前に配置されたため、再びコンパイル エラーが発生しました。問題を修正し、パッケージ宣言と型宣言の間の適切な場所にインポート宣言を追加する方法についてのアイデアはありますか?