我正在嘗試實現一個Eclipse插件來計算Java應用程序的一些OO度量標準,如DIT(繼承樹深度)。但是,我無法檢索有關類繼承樹的信息(直到Object的類之間的距離)。假設一個類是一個CompilationUnit,我試圖通過TypeDeclaration進入類來比較這個類,例如Dog(extends Animal)是否是Object的一個實例。如果沒有,它會對傳遞Animal類作爲參數的visit方法進行遞歸調用,直到類爲Object。如何檢索有關AST eclipse中的類的繼承信息?
編輯我設法恢復使用typeDec.getSuperClassType()
超,但是我需要得到這個超類的TypeDeclaration遞歸調用訪問方法,通過這個TypeDeclaration作爲參數。
這是我的代碼的想法:
public class ClassVisitor extends ASTVisitor {
depthOfInheritanceTreeIndex = 1;
public boolean visit(CompilationUnit unit) {
for (Object type :unit.types()){
TypeDeclaration typeDec = (TypeDeclaration) type;
Type superClassType = typeDec.getSuperClassType();
TypeDeclaration superClazz;
if (superClassType.equals(Object.class.getSimpleName())){
return continue;
}else{
depthOfInheritanceTreeIndex++;
superClazz = (TypeDeclaration) superClassType.getParent();
return super.visit(superClazz);
}
}
return false;
}
}
你們是否有什麼我做錯了或怎麼做任何想法?任何幫助將會得到讚揚!
謝謝安德魯,它的工作原理! – mari