javac scheint bei package Annotationen nicht zu überprüfen, ob die Annotationen den deklarierten Regeln folgen. Eben habe ich einer solchen Annotation den default Wert weggenommen. Die Verwendung auf type Ebene warf Compiler Fehler. Ist der Wert in der package-info.java Datei nicht vorhanden, läuft der compile Prozess ohne Probleme durch. Die falsche Verwendung auf package Ebene wurde durch nicht angepassten Unit-Test entdeckt. Eine IncompleteAnnotationException wird geworfen, wenn ich den Wert über das Reflection API auslese.
Vorher:
@Documented
@Retention(RUNTIME)
@Target({PACKAGE, TYPE})
public @interface CommandHolder {
String value() default "";
}
Nacher:
@Documented
@Retention(RUNTIME)
@Target({PACKAGE, TYPE})
public @interface CommandHolder {
String value();
}
Verhalten tritt auf mit javac 1.6.0_16 und javac 1.7.0-ea (b80) auf einem aktuellen AMD64 Ubuntu 9.10.
Vielleicht wühle ich mich später mal durch die Spezifikationen.
TrackBacks[0]
Kommentare[0]
Geschrieben von sascha am 19. Februar 2010 17:08:00 CET
