Я могу получить имя класса для каждого объявления метода в 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 в настоящее время (когда анализируется полный проект)?
Ответ 1 · Unni Kris
Не уверен, что это идеальный способ, но вы можете использовать приведенный ниже фрагмент, чтобы получить самый верхний 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());
}
Обычно я передаю CompilationUnit в качестве аргумента конструктора для класса ASTVisitor и получаю от него имя файла.
ОБНОВЛЕНИЕ:
Другой способ получить детали объявления класса:
typDeclarationNode.resolveBinding().getDeclaredTypes();
Это вернет null, если это класс верхнего уровня. Для внутреннего класса он вернет внешние классы.