Annotation Processor - Warning bei Verwendung einer Methode

Improof

Erfahrenes Mitglied
Hallo liebe Community! :)

Ich bin gerade dabei, ein paar eigene Annotations für verschiedene Anwendungsfälle zu erstellen.
Dabei habe ich mir nun auch das Thema AnnotationProcessing mit einem AbstractProcessor angeschaut, um in Eclipse direkt Warnings anzuzeigen.

Das klappt mit folgendem Code auch wunderbar:

Warning-Annotation:
Java:
@Documented
@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.METHOD)
public @interface Warning
{
    String value();
}

Processor:
Java:
@SupportedAnnotationTypes({"com.mrws.smarteai.annproc.Warning"})
public class WarningAnnotationProcessor extends AbstractProcessor
{
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv)
    {
        Messager messager = processingEnv.getMessager();
      
        Set<? extends Element> annotatedElements = roundEnv.getElementsAnnotatedWith(Warning.class);
        for (Element annotatedElement : annotatedElements)
       {
            Warning warning = annotatedElement.getAnnotation(Warning.class);
            String message = "The method " + annotatedElement.getSimpleName() + " has a warning: " + warning.value();
            messager.printMessage(Kind.WARNING, message, annotatedElement);
       }
       return true;
    }
  
    @Override
    public SourceVersion getSupportedSourceVersion() {
        return SourceVersion.latestSupported();
    }
}

Test-Klasse:
Java:
public class TestAnnotations
{
    @Warning("Vorsicht!")
    public void test()
    {
      
    }
  
    public void test2()
    {
        this.test();
    }
}

In diesem Fall wird die Methode "test()" in Eclipse gelb unterringelt und die Warning mit dem Annotation-Text angezeigt.

Nun möchte ich aber Warnings auch bei der Verwendung einer solchen Methode ausgeben. Als Beispiel soll also die Zeile "this.test();" in der Methode "test2()" auch gelb unterringelt werden.
Einfach gesagt: Das ganze soll dann so aussehen, wie wenn man eine Methode verwendet, die mit "@Deprecated" versehen ist.

Ist das denn so ohne weiteres mit dem AbstractProcessor möglich? Und wenn ja, wie kann ich überprüfen, wo eine bestimmte Methode verwendet, also aufgerufen, wird? Mir gehen hier langsam die Ideen aus und google hilft auch nicht wirklich weiter :(

Vielen Dank für eure Unterstützung!

Gruß
Daniel
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück