Annotation

muss_

Grünschnabel
Hallo zusammen,
ich möchte eine Annotation schreiben und mein Hauptziel ist die Zeilennummer herausfinden wo der Annotation im Code steht.
Annotation zu schreiben ist kein Problem aber weiß jemand wie ich die Zeilennummer finden kann?
Danke im Voraus.
 
Moin,

ich möchte eine Annotation schreiben und mein Hauptziel ist die Zeilennummer herausfinden wo der Annotation im Code steht.
Annotation zu schreiben ist kein Problem aber weiß jemand wie ich die Zeilennummer finden kann?

Was meinst Du? Zählen? :p

Oder willst Du innerhalb der Annotation die aktuelle Zeilennummer anzeigen lassen (mit einer Art von Makro oder so) ?

Ich versteh' die Frage nicht so ganz ....

Gruß
Klaus
 
Hallo,

dabei geht es auch um das eclipse-Plugin, oder?

Definierst du dann eine Annotation, die der User deines Plugins dann 2 mal im Code anwendet und damit die Brakepoints definiert?

Dann würde ich deine Frage mal in:
Gibt es mit der Reflection API eine möglichkeit die Zeilennummern in denen eine selbst definierte Annotatioe steht herauszufinden?
Und darauf befürchte ich lautet die Antwort Nein, denn bei Reflection geht es stets um Class- Method-, Annotation-, ... Objekte und um das class-File, aber nie um die .java-Datei in der es Zeilennummern giebt. Ich weiss nicht worauf das ganze hinauslaufen soll, aber wie währe es denn die .java-Datei als String einzulesen...

Das einzige was mir an sonsten einfällt, wäre das der User die Zeilennummer nochmal explizit angeben muss. (Hier ein kleines Beispiel mit Auslesen der Annotation bei allen Metoden.

Deine Annotation:
Java:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Breakepoint {
    int lineNo();
}
Quellcode des Plug-in-Users:
Java:
@Breakepoint(lineNo = 46)
public int seineMethode(boolean aFlag) {
...
}
Dein Quellcode zum auslesen:
Java:
import java.lang.reflect.*;

...

Method[] methoden = UserKlasse.class.getDeclaredMethods();
for(Method methode : methoden){
    if(methode.isAnnotationPresent(Breakpoint.class){
        System.out.println("User hat Breakpoint in Zeile " + 
        methode.getDeclaredAnnotation(Breakepoint.class).lineNo() + " gesetzt.");
    } 
}

Bitte korriere mich, wenn ich deine Frage falsch gedeutet habe,
javaDeveloper2011
 
Hallo,

dabei geht es auch um das eclipse-Plugin, oder?

Definierst du dann eine Annotation, die der User deines Plugins dann 2 mal im Code anwendet und damit die Brakepoints definiert?

Dann würde ich deine Frage mal in:

Und darauf befürchte ich lautet die Antwort Nein, denn bei Reflection geht es stets um Class- Method-, Annotation-, ... Objekte und um das class-File, aber nie um die .java-Datei in der es Zeilennummern giebt. Ich weiss nicht worauf das ganze hinauslaufen soll, aber wie währe es denn die .java-Datei als String einzulesen...

Das einzige was mir an sonsten einfällt, wäre das der User die Zeilennummer nochmal explizit angeben muss. (Hier ein kleines Beispiel mit Auslesen der Annotation bei allen Metoden.

Deine Annotation:
Java:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface Breakepoint {
    int lineNo();
}
Quellcode des Plug-in-Users:
Java:
@Breakepoint(lineNo = 46)
public int seineMethode(boolean aFlag) {
...
}
Dein Quellcode zum auslesen:
Java:
import java.lang.reflect.*;

...

Method[] methoden = UserKlasse.class.getDeclaredMethods();
for(Method methode : methoden){
    if(methode.isAnnotationPresent(Breakpoint.class){
        System.out.println("User hat Breakpoint in Zeile " + 
        methode.getDeclaredAnnotation(Breakepoint.class).lineNo() + " gesetzt.");
    } 
}

Bitte korriere mich, wenn ich deine Frage falsch gedeutet habe,
javaDeveloper2011

Danke für die ausführliche Info, das ist was ich suche...
Ich habe auch vor im Rechtsklick-Menu im Eclipse ein Eintrag wie "Annotation hinzufügen" zu erstellen, sodass der Benutzer es nicht selber schreiben muss. Kann ich vlt. so die Zeilennummer automatisch schreiben lassen?
 
Zurück