Warn when certain constructor is used
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Thu May 31 10:31:52 UTC 2018
Hi Pietro,
I believe the compiler tree API is what you want (I'm giving you JDK 7
API links, since your link seems to be referring to JDK 7, but these API
points are available in later releases as well, of course):
https://docs.oracle.com/javase/7/docs/jdk/api/javac/tree/index.html
More specifically, if you are writing an annotation processor, the
compiler tree API allows you to retrieve a Tree objects for a given Element:
https://docs.oracle.com/javase/7/docs/jdk/api/javac/tree/com/sun/source/util/Trees.html
After which, you can define a visitor which detects the constructor
calls you are interested in. For the visitor look here:
https://docs.oracle.com/javase/7/docs/jdk/api/javac/tree/com/sun/source/util/TreeScanner.html
there's a scan method for every tree node, I think you want to override
visitNewClass:
https://docs.oracle.com/javase/7/docs/jdk/api/javac/tree/com/sun/source/util/TreeScanner.html#visitNewClass(com.sun.source.tree.NewClassTree,%20P)
As for generating diagnostics, you can do that by using the Messager
interface which is part of the annotation processing API:
https://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Messager.html
you obtain one of these from the ProcessingEnvironment object you get at
the start of anno processing - see
https://docs.oracle.com/javase/7/docs/api/javax/annotation/processing/Processor.html#init(javax.annotation.processing.ProcessingEnvironment)
I think these pointers should be enough to get started, feel free to
reach out if you get stuck.
Maurizio
On 31/05/18 10:05, Pietro Paolini wrote:
> Hi all,
>
> I am not sure the question is appropriate for compiler-dev but I would like to give it a try anyway.
>
> I would like to detect when a certain class's constructor is used and log its usage along with filename and line number somewhere, such as a log file or standard output, I can't use an IDE to do that as I am working on a fairly large codebase and I need to automate the process, moreover it seems like an interesting problem to solve.
>
> https://docs.oracle.com/javase/7/docs/api/javax/tools/JavaCompiler.html
>
> I was hoping that could help me but I haven't spot anything as yet, even though I must admit that my knowledge on the matter is limited.
>
> Thanks,
> Pietro
>
>
> Pietro Paolini
> Consultant
>
> Alfa
> ________________________________
> e: pietro.paolini at alfasystems.com | w: alfasystems.com<https://www.alfasystems.com>
> t: +44 (0) 20 7920-2643 | Moor Place, 1 Fore Street Avenue, London, EC2Y 9DT, GB
> ________________________________
>
> The contents of this communication are not intended to be binding or constitute any form of offer or acceptance or give rise to any legal obligations on behalf of the sender or Alfa. The views or opinions expressed represent those of the author and not necessarily those of Alfa. This email and any attachments are strictly confidential and are intended solely for use by the individual or entity to whom it is addressed. If you are not the addressee (or responsible for delivery of the message to the addressee) you may not copy, forward, disclose or use any part of the message or its attachments. At present the integrity of email across the internet cannot be guaranteed and messages sent via this medium are potentially at risk. All liability is excluded to the extent permitted by law for any claims arising as a result of the use of this medium to transmit information by or to Alfa or its affiliates.
>
> Alfa Financial Software Ltd
> Reg. in England No: 0248 2325
More information about the compiler-dev
mailing list