【发布时间】:2017-03-16 14:07:39
【问题描述】:
我正在开发一个 Eclipse 插件。如果该类扩展了第三个类,我正在使用 ASTVisitor 的以下实现来替换该类的超类。
import org.eclipse.jdt.core.dom.ASTVisitor;
import org.eclipse.jdt.core.dom.Name;
import org.eclipse.jdt.core.dom.SimpleType;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.TypeDeclaration;
public class SuperClassVisitor extends ASTVisitor{
public Type superClass;
public String newSuperClass;
private String oldSuperClass;
public SuperClassVisitor(String newType, String oldType) {
this.newSuperClass = newType;
this.oldSuperClass = oldType;
}
public boolean visit(TypeDeclaration node) {
superClass = node.getSuperclassType();
if (newSuperClass != null) {
Name oldName = node.getAST().newName(oldSuperClass);
SimpleType oldType = node.getAST().newSimpleType(oldName);
Name newName = node.getAST().newName(newSuperClass);
SimpleType newType = node.getAST().newSimpleType(newName);
if (superClass != null && superClass.equals(oldType)) {
node.setSuperclassType(newType);
}
}
return true;
}
}
我正在访问我项目中的每一堂课。基本上,在扩展oldType 的类中,我想将其更改为newType。但是,条件superClass.equals(oldType) 永远不会为真,因为我的oldType 字符串是一个点分隔的完全限定名称,而node.getSuperclassType() 只返回类的名称。
是否可以查出超类的全名?
作为参考,这个回答帮助我创建了这个访问者: How Can a SuperClass name be retrieved from a java file using ASTParser?
【问题讨论】:
-
你的问题和标题有点矛盾,我觉得……
-
谢谢,我会尽量说清楚的。
-
对于任何非数组类,
TheClassName.class.getName()会将完整的点分隔名称作为字符串返回。someObj.getClass().getName()将返回对象的类名。someObj.getClass().getSuperclass().getName()将返回超类的名称。 -
我不是在思考类,而是在使用编译单元。
标签: java eclipse-jdt