Получить имя внешнего класса для объявления метода внутреннего класса, используя 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)


arrow_upward
0
arrow_downward

  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