分类
开发者 未分类

由CompilationUnit得到SuperClass的方法

做BTF项目的时候, 要判断一个类是否继承了某个指定类.

由于类还是在Eclipse的JDT中, 没有被Load, 所以java.lang.Class.getSuperclass()不中了.

查找一番原来可以通过CompilationUnit获取org.eclipse.jdt.core.IType,

然后IType.newSupertypeHierarchy(*)得到ITypeHierarchy, 继而就能用ITypeHierarchy.getSuperclass(IType)得到其超类了.

IType[] types = ((ICompilationUnit)javaElement).getTypes();
    if(null != types && types.length > 0){
         ITypeHierarchy typeHierarchy = types[0].newSupertypeHierarchy(null);
             IType superclass = typeHierarchy.getSuperclass(types[0]);
                if(superclass instanceof ResolvedBinaryType){
                 …

                  }
         }
}

Gem Chen

原谅我这一生不羁放纵爱自由

“由CompilationUnit得到SuperClass的方法”上的17条回复

@Gem 人生像茶几,上面摆满了杯具;人生又像茶杯,本身就是个杯具;人生更像茶叶,终究要被浸泡在杯具之中。

人生就像茶几,上面摆满了杯具。当你努力跳出一个杯具时,却发现自己跳进了一个餐具(惨剧)。

人生就像是一个茶几,上面摆满了杯具。当我们认为自己跳出一个杯具时,却已经掉进了另外一个杯具。而若你发现你没有跳进另一个杯具……那恭喜你……你掉下茶几了。

人生就像一个透明的杯具,我们自知身在其中,偶尔和另一个杯具一见钟情,却出不去。

人生是一只茶几,上面放满了杯具。而本身就是杯具的我们还非加上茶叶自以为与别人没有茶具(差距),结果人人都说咱现在要具就用餐具(惨剧)。我们在沉默中灭亡,成了文具;在沉默中爆发,成了火炬。我们想明哲保身,都成了面具。我们想一鸣惊人,都成了京剧。不能再次相聚,执手相看泪眼,成了默剧。生活是自己的杯具,别人眼里的洗具(喜剧)。

你好,看了你的文章我知道了可以直接得到类的父类,但是我找不到你文章你里的javaElement,不知道你是怎么得到的?我是这样得到CompilationUnit的
ASTParser parser = ASTParser.newParser(AST.JLS3); //initialize
parser.setSource(source.toCharArray()); //content is a 、 CompilationUnit CompilationUnit result = (CompilationUnit) parser.createAST(null);
IJavaElement javaElement=result.getJavaElement();
但是这里面的javaElement为空,不知道你的是怎么样子的

这里的javaElement实质上就是个CompilationUnit类型的参数,由前面的程序生成的。
我找了一下CompilationUnit的代码好像没有getJavaElement这个方法(jdk1.6).
不过你看看这篇文章对你有没有帮助:http://www.ibm.com/developerworks/cn/opensource/os-ast/index.html

//因为原文中的CompilationUnit(javaElement)是org.eclipse.jdt.internal.core包里
//的,而用ASTparser解析源代码生成的CompilationUnit是org.eclipse.jdt.core.dom
//包里的,两者是不同的,所以应该有不同的获取父类的方法。

ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(stringSource.toCharArray());
CompilationUnit node = (CompilationUnit) parser.createAST(null);
Type type = ((org.eclipse.jdt.core.dom.TypeDeclaration)node.types().get(0)).getSuperclassType();//这样可以拿到父类的类型

其实我是想找所有继承的父类,包括父类的父类。。。但是还是非常感谢你的帮忙,我再找找看吧。

如果你在Eclipse Runtime环境下可以用JavaCore.create(IResource)方法创建IJavaElement,然后用原文的方法。其他的我就不太清楚了。

Aubama进行回复 取消回复

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据