Получить имя внешнего класса для объявления метода внутреннего класса, используя JDT

Я могу получить имя класса для каждого объявления метода в Java, используя eclipse JDT. Итак, для метода, объявленного во внутреннем классе, я получаю имя внутреннего класса.

Можно ли получить имя внешнего класса для метода, объявленного во внутреннем классе, с помощью JDT.

Пока что я могу определить, является ли класс внутренним или внешним классом, с помощью следующего кода:

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

    return true;
}
  • Поскольку я знаю имя внутреннего класса, возможно ли получить имя внешнего класса с помощью AST?
  • Есть ли способ получить, какой файл .java обрабатывает анализатор AST в настоящее время (когда анализируется полный проект)?

person Tanzeem Bin Noor    schedule 16.03.2015    source источник


Ответы (1)


  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 и получаю от него имя файла.

ОБНОВЛЕНИЕ:

Другой способ получить детали объявления класса:

typDeclarationNode.resolveBinding().getDeclaredTypes();

Это вернет null, если это класс верхнего уровня. Для внутреннего класса он вернет внешние классы.

person Unni Kris    schedule 19.03.2015