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

I am surprised it returned non null for a source file. I thought the getBinaryName() will return
anything meaningful only for elements loaded as binaries.

Jay

Inactive hide details for Alex Lovkov ---10/04/2019 08:44:45 PM---I got name of the anonymous class by this: @OverrideAlex Lovkov ---10/04/2019 08:44:45 PM---I got name of the anonymous class by this: @Override

From: Alex Lovkov <charmik1994@xxxxxxxxx>
To: Jayaprakash Arthanareeswaran <jarthana@xxxxxxxxxx>
Cc: "Eclipse JDT general developers list." <jdt-dev@xxxxxxxxxxx>
Date: 10/04/2019 08:44 PM
Subject: Re: [jdt-dev] get name of the anonymous class





I got name of the anonymous class by this: 
@Override
public
 boolean visit(AnonymousClassDeclaration node) {
ITypeBinding 
resolveBinding = node.resolveBinding();
String binaryName = resolveBinding.getBinaryName();
return true;
}

but it gives me wrong name for inner anonymous classes, example:
new Serializable() {
void x() {
new Serializable() {
};
}
};

it prints Main$1 Main$2, but it should be Main$1 and Main$1$1.
I get .getJavaElement()=null anyway. Can I fix it without ecpilse plugin? Thanks!

---------- Forwarded message ---------
От: Jayaprakash Arthanareeswaran <jarthana@xxxxxxxxxx>
Date: ср, 10 апр. 2019 г. в 05:43
Subject: Re: [jdt-dev] get name of the anonymous class
To: Eclipse JDT general developers list. <jdt-dev@xxxxxxxxxxx>
Cc: Александр Ловков <charmik1994@xxxxxxxxx>

One way of achieving that is by using Java model elements, like below:

@Override

public
boolean visit(AnonymousClassDeclaration node) {
ITypeBinding
resolveBinding = node.resolveBinding();
IType
javaElement = (IType) resolveBinding.getJavaElement();
System.
out.println(javaElement.getFullyQualifiedName());
return
true;
}


Jay


Inactive hide details for "Александр Ловков" ---09/04/2019 10:59:12 PM---Hello, I was wondering how can I get th"Александр Ловков" ---09/04/2019 10:59:12 PM---Hello, I was wondering how can I get the name of the anonymous class (exactly "$1", or Main$1) from

From:
"Александр Ловков" <charmik1994@xxxxxxxxx>
To:
jdt-dev@xxxxxxxxxxx
Date:
09/04/2019 10:59 PM
Subject:
[jdt-dev] get name of the anonymous class
Sent by:
jdt-dev-bounces@xxxxxxxxxxx





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
_______________________________________________
jdt-dev mailing list

jdt-dev@xxxxxxxxxxx
To change your delivery options, retrieve your password, or unsubscribe from this list, visit

https://www.eclipse.org/mailman/listinfo/jdt-dev



--
С Уважением, Ловков А.С.