JDT - 尝试更改Type的超类。我不知道超级班的合格名称

时间:2014-06-06 10:41:06

标签: java eclipse eclipse-jdt

我有一个程序,除其他任务外,还必须使用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更改类的超类的解决方案,给定纯文本限定名称。

0 个答案:

没有答案