使用JDT获取内部类方法声明的外部类名

时间:2015-03-16 00:16:49

标签: java eclipse-plugin eclipse-jdt

我可以使用eclipse JDT获取Java中每个方法声明的类名。因此,对于在内部类中声明的方法,我得到内部类的名称。

是否可以使用JDT为方法在内部类中获取外部类名

到目前为止,我可以通过以下代码识别一个类是内部类还是外部类:

public boolean visit(TypeDeclaration td) {
    className = td.getName().getFullyQualifiedName();
    if (!td.isPackageMemberTypeDeclaration()) 
            System.out.println(className+" is inner class")

    return true;
}
  • 我知道内部类名,因此可以通过AST获取它的外部类名吗?
  • 有没有办法得到AST解析器当前处理的.java文件(当解析完整项目时)?

1 个答案:

答案 0 :(得分:0)

  1. 不确定这是否是理想的方法,但您可以使用以下代码段获取最顶层的TypeDeclaration(外类)。

    public static ASTNode getOuterClass(ASTNode node) {
    
        do {
            node= node.getParent();
        } while (node != null && node.getNodeType() != ASTNode.TYPE_DECLARATION
                && node.isPackageMemberTypeDeclaration());
    
        return node;
    }
    

    然后你可以通过以下方式获得课程名称:

    ASTNode outerClassNode = getOuterClass(methodDeclarationNode);
    if (outerClassNode != null) { // not the topmost node
         System.out.println(outerClassNode.getName());
    }
    
  2. 通常我将CompilationUnit作为ASTVisitor类的构造函数参数传递,并从中获取文件名。

  3. <强>更新

    获取声明类详细信息的另一种方法:

    typDeclarationNode.resolveBinding().getDeclaredTypes();
    

    如果它是顶级类,则返回null。对于内部类,它将返回外部类。