Skip to main content

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

Unfortunately, Java model elements don't work without the context of a Java project.
So, yes, it is unlikely to work for you.

Now, I am less hopeful of finding another way. These things (the anonymous names)
are decided much later in the compilation process and not sure DOM, which solely
works with source code has the capability to find that. May be others can correct me
if I am wrong.

Regards,
Jay


Inactive hide details for Alex Lovkov ---11/04/2019 02:46:47 PM---I just tried all methods which return something:) I read in dAlex Lovkov ---11/04/2019 02:46:47 PM---I just tried all methods which return something:) I read in docs: that if I don't use java-plugin, I

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





I just tried all methods which return something:) 
I read in docs: that if I don't use java-plugin, I can specify ASTParser by unitName and Environment, but it didn't help me at all. .getJavaElement returns null anyway, from your code. So how can I get real name of anonymous class? Like Main$1$2 for example? Is it really possible? Thanks!

чт, 11 апр. 2019 г. в 06:41, Jayaprakash Arthanareeswaran <jarthana@xxxxxxxxxx>:
    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



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





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



Back to the top