我正在尝试将导入声明添加到新创建的方法声明中引用的类型的编译单元。为此,我创建了一个简单的 ASTVisitor,它将它访问的每种类型(简单类型、参数化类型等)添加到给定的 ImportRewrite 实例。要将我对编译单元所做的更改添加到 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 更改,从而导致导入声明位于包声明之前,从而再次导致编译错误。关于如何解决问题并将导入声明添加到包声明和类型声明之间的正确位置的任何想法?