做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){
…}
}
}
你好,看了你的文章我知道了可以直接得到类的父类,但是我找不到你文章你里的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 人生就像牙缸,你可以把它看成杯具,也可以看成洗具。
人生就像茶几,上面摆满了杯具。当你努力跳出一个杯具时,却发现自己跳进了一个餐具(惨剧)。
人生就像是一个茶几,上面摆满了杯具。当我们认为自己跳出一个杯具时,却已经掉进了另外一个杯具。而若你发现你没有跳进另一个杯具……那恭喜你……你掉下茶几了。
人生就像一个透明的杯具,我们自知身在其中,偶尔和另一个杯具一见钟情,却出不去。
人生是一只茶几,上面放满了杯具。而本身就是杯具的我们还非加上茶叶自以为与别人没有茶具(差距),结果人人都说咱现在要具就用餐具(惨剧)。我们在沉默中灭亡,成了文具;在沉默中爆发,成了火炬。我们想明哲保身,都成了面具。我们想一鸣惊人,都成了京剧。不能再次相聚,执手相看泪眼,成了默剧。生活是自己的杯具,别人眼里的洗具(喜剧)。
我跟上帝说我渴了,于是上帝给了我一大堆杯具。
女人是水做的,为了迎合她们,男人注定成为一个个杯具。
@Gem 人生像茶几,上面摆满了杯具;人生又像茶杯,本身就是个杯具;人生更像茶叶,终究要被浸泡在杯具之中。
@Gem
人生是一张茶几,上面放满了杯具
人生是个杯具