解决新创建类型的绑定?

时间:2014-09-14 15:24:34

标签: eclipse eclipse-jdt

我正在开发一个Eclipse插件,用JDT重构Java源代码。我创建了一些新类,但在解决这些新类型方面遇到了问题。因此,我的问题是:是否可以在不重新分析的情况下解析新创建的类型?

ASTParser parser = ASTParser.newParser(AST.JLS4);
parser.setResolveBindings(true);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(existingCompilationUnit);

CompilationUnit unit = (CompilationUnit)parser.createAST(null);

AST ast = unit.getAST();

// create a new type
TypeDeclaration newCreatedType = ast.newTypeDeclaration();
// fill type declaration with methods, fields, etc.
// ...

// create new compilation unit for the new type
CompilationUnit newCreatedCompilationUnit = ast.newCompilationUnit();
newCreatedCompilationUnit.types().add(newCreatedType);

newCreatedType.resolveBinding(); // returns null

当然可以重新解析它,但它会包含在另一个AST中,当我尝试重写AST的元素时会导致问题:

parser.setSource(newCreatedCompilationUnit);
CompilationUnit newParsedCompilationUnit = (CompilationUnit)parser.createAST(null);
TypeDeclaration newParsedType = (TypeDeclaration)newParsedCompilationUnit.types().get(0);
newParsedType.resolveBinding() // returns a correct binding, but newParsedType.getAST() != ast

然后我尝试将新类型复制到旧AST,这会更正AST,但绑定信息会再次丢失:

CompilationUnit copiedCompilationUnit = (CompilationUnit) newUnit.copySubtree(ast, newParsedCompilationUnit);
// (copiedCompilationUnit.getAST() == ast) is true
TypeDeclaration copiedType = (TypeDeclaration)copiedCompilationUnit.types().get(0);
copiedType.resolveBinding() // returns null

到现在为止,我必须在没有绑定或错误的AST之间做出决定,我找不到解决方案。

0 个答案:

没有答案