Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jdt-dev] get name of the anonymous class

Hello, I was wondering how can I get the name of the anonymous class (exactly "$1", or Main$1) from AST, after I parse my source file?
If I try to get the name of the class going recursive to the root from the variable, I don't get FieldDeclaration -> TypeDeclaration as in normal (Z) class, I get the next one: FieldDeclaration -> AnonymousClassDeclaration -> ClassInstanceCreation
and AnonymousClassDeclaration doesn't have any getName() methods. 
So how can I get "$1" by AnonymousClassDeclaration/ClassInstanceCreation? thanks!

example:
public class Main {
void f() {
new Serializable() {
public static final String T1 = "T1";
};
}
private class Z implements Serializable {
public static final String T2 = "T2";
}
}
ASTParser parser = ASTParser.newParser(AST.JLS11);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(new String(Files.readAllBytes(Paths.get(
"src/main/java/Main.java"))).toCharArray());
CompilationUnit unit = (CompilationUnit) parser.createAST(new NullProgressMonitor());

ArrayList<FieldDeclaration> fields = new ArrayList<>();
unit.accept(new ASTVisitor() {
@Override
public boolean visit(final FieldDeclaration node) {
fields.add(node);
return super.visit(node);
}
});
FieldDeclaration fieldDeclaration_T1 = fields.get(0);
FieldDeclaration fieldDeclaration_T2 = fields.get(1);
ASTNode T1parent = fieldDeclaration_T1.getParent(); //AnonymousClassDeclaration here (can't get $1)
ASTNode T2parent = fieldDeclaration_T2.getParent(); //TypeDeclaration here. can use .getName() to get a name of nested class) cl
--
Sincerely, Alex

Back to the top