Warn when certain constructor is used

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Thu May 31 14:44:36 UTC 2018

Try to call


This should trigger attribution of the tree and give you the 'symbol' 
associated with the constructor. From there you can access the symbol 
signature using


And downcasting to this:


If this works, good, otherwise the solution would be more cumbersome - 
and it will involve setting up a task listener. But try this first.


On 31/05/18 13:19, Pietro Paolini wrote:
> Hi Maurizio,
> Thanks a lot. I would have an additional, and hopefully last, question.
> I am getting the NewClassTree which seems to provide me access to the - forgive me the coarse wording of it -  the "token", namely the textual representation
> of it, while I am mainly interested in the type.
> I am getting around it by comparing strings but I wonder if there is any way to get to the type of the expression :
> := new identifier ( arguments )
> What I have in my mind is to detect all instances in which the identifier has *type* A and the argument's  list is composed by a single *type* , let say B. That allows me to
> print something:
> "Hey, constructor new A(B) has been detected"
> Thanks a lot for your help so far, really.
> Thanks,
> P.
>> -----Original Message-----
>> From: Maurizio Cimadamore [mailto:maurizio.cimadamore at oracle.com]
>> Sent: 31 May 2018 12:45
>> To: Pietro Paolini
>> Cc: compiler-dev at openjdk.java.net
>> Subject: Re: Warn when certain constructor is used
>> On 31/05/18 12:21, Pietro Paolini wrote:
>>> JCTree tree = (JCTree) trees.getTree(element);
>>> tree.accept(new LocalDateUtilDate());
>> There re two visitor methods in JCTree, one internal (used by javac),
>> one external (used by the API). I don't think you need to cast down to
>> JCTree (yet, at least). Just keep it as a com.sun.source.tree.Tree, and
>> you will see that the only 'accept' method there takes two arguments: a
>> visitor (which you have) and a visitor parameter; since you don't seem
>> to need a visitor parameter, you can just pass 'null' as second parameter.
>> Maurizio

More information about the compiler-dev mailing list