我有一个程序,除其他任务外,还必须使用JDT更改某些类的超类。我有两个字符串,其中包含要交换的超类的限定名称,例如“org.example.John”和“org.example.Smith”,我正在解析整个AST搜索扩展这些类的类。
当我试图找出超类的合格名称时,我的问题就出现了。我找不到办法。给定ICompilationUnit
(表示类),我使用ASTVisitor来解析TypeDeclaration,如下面的方法所示。
public boolean visit(TypeDeclaration typeDeclaration) {
TypeDeclaration[] types = typeDeclaration.getTypes();
superClass = typeDeclaration.getSuperclassType();
superClass.getNodeType();
Class nodeType = ASTNode.nodeClassForType(superClass.getNodeType());
if (newSuperClass != null) {
Name oldName = typeDeclaration.getAST().newName(oldSuperClass);
SimpleType oldType = typeDeclaration.getAST().newSimpleType(oldName);
Name newName = typeDeclaration.getAST().newName(newSuperClass);
SimpleType newType = typeDeclaration.getAST().newSimpleType(newName);
if (superClass != null && superClass.equals(oldType)) {
typeDeclaration.setSuperclassType(newType);
}
}
return true;
}
我的理解是Eclipse能够在超类声明(例如public class MySubClass extends John
)之间建立连接,并将其映射到导入中定义的实际类型(例如import org.example.John
)。我正在寻找一种与Eclipse一样的方法。
可能的替代解决方案是任何可以帮助我使用JDT更改类的超类的解决方案,给定纯文本限定名称。