Heiner Kücker
2016-10-13 19:38:59 UTC
Hallo,
ich habe mich relativ umfangreich damit befasst, einen Prüfer für Java8-Programme zu entwickeln.
In diesem Rahmen habe ich mich mit den Typ-Annotationen (JSR 308) beschäftigt.
Ich finde die Typ-Annotationen (JSR 308) zwar nicht besonders gut, aber die gehören zu Java8 nun mal dazu.
Unter anderem kann man die Typ-Annotationen an Typ-Parametern und deren Bounds notieren.
public class TestTypeAnnotationOnClassTypeparamBound<
@TypeAnno00 T_EXT_INTERSECTION extends
@TypeAnno01 List<
@TypeAnno02 String > &
@TypeAnno03 Iterable<
@TypeAnno04 String > &
@TypeAnno05 Serializable
{
}
Bei T_EXT_INTERSECTION handelt es sich um einen
Ich habe dazu mal einen Unit-Test gemacht (JUnit4):
TypeAnnotationOnClassTypeparamWildcard1OverReflectionTest
http://control-and-command.de/zip/JAVA8_TYPE_ANNO_BUG.zip
Weder mit dem Eclipse-Compiler noch mit dem jdk1.8.0_102 javac funktioniert dieser Test.
Scheinbar haben die Compiler-Anbieter keine Tests hierzu.
Die Typ-Annotationen waren neben den Haupt-Java8-Themen wie Lambdas, Streams und default-Methoden in Interfaces nur eine Nebensache.
Andererseits sind es nur Meta-Daten, die geparst, im Byte-Code vermerkt und wieder abgefragt werden müssen, nichts kompliziertes wie Optimierung oder Typ-Inferenz.
Im Netz findet man auch einige getrackte Bugs in diesem Umfeld.
https://www.google.de/search?q=java+bug+type+annotation+on+class+type+parameter+intersection+bound
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwiQrrK8w9jPAhWDjSwKHQ3LAscQFggxMAI&url=https%3A%2F%2Fbugs.eclipse.org%2Fbugs%2Fshow_bug.cgi%3Fid%3D462083&usg=AFQjCNEEkF0KsnBbdp2WcaYyVGHx7cLj9Q&sig2=KqkPYovFkv5VqgeM-JPdlw
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0ahUKEwiZ0dD_w9jPAhXBDiwKHf69CNQQFghWMAc&url=http%3A%2F%2Ftypes.cs.washington.edu%2Fchecker-framework%2Fcurrent%2Fchangelog.txt&usg=AFQjCNESdEMTut2sVzfbGctMVUSGPTXj5g&sig2=F8JX8xUARXDQO6dzd8yGRQ&bvm=bv.135475266,d.bGghttps://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0ahUKEwiZ0dD_w9jPAhXBDiwKHf69CNQQFghWMAc&url=http%3A%2F%2Ftypes.cs.washington.edu%2Fchecker-framework%2Fcurrent%2Fchangelog.txt&usg=AFQjCNESdEMTut2sVzfbGctMVUSGPTXj5g&sig2=F8JX8xUARXDQO6dzd8yGRQ&bvm=bv.135475266,d.bGg
Meine Frage ist nun, wo ich einen entsprechenden Bug einstellen sollte,
Oracle, Open JDK oder Eclipse, und ob sich dies überhaupt lohnt?
Danke
Heiner
ich habe mich relativ umfangreich damit befasst, einen Prüfer für Java8-Programme zu entwickeln.
In diesem Rahmen habe ich mich mit den Typ-Annotationen (JSR 308) beschäftigt.
Ich finde die Typ-Annotationen (JSR 308) zwar nicht besonders gut, aber die gehören zu Java8 nun mal dazu.
Unter anderem kann man die Typ-Annotationen an Typ-Parametern und deren Bounds notieren.
public class TestTypeAnnotationOnClassTypeparamBound<
@TypeAnno00 T_EXT_INTERSECTION extends
@TypeAnno01 List<
@TypeAnno02 String > &
@TypeAnno03 Iterable<
@TypeAnno04 String > &
@TypeAnno05 Serializable
{
}
Bei T_EXT_INTERSECTION handelt es sich um einen
Ich habe dazu mal einen Unit-Test gemacht (JUnit4):
TypeAnnotationOnClassTypeparamWildcard1OverReflectionTest
http://control-and-command.de/zip/JAVA8_TYPE_ANNO_BUG.zip
Weder mit dem Eclipse-Compiler noch mit dem jdk1.8.0_102 javac funktioniert dieser Test.
Scheinbar haben die Compiler-Anbieter keine Tests hierzu.
Die Typ-Annotationen waren neben den Haupt-Java8-Themen wie Lambdas, Streams und default-Methoden in Interfaces nur eine Nebensache.
Andererseits sind es nur Meta-Daten, die geparst, im Byte-Code vermerkt und wieder abgefragt werden müssen, nichts kompliziertes wie Optimierung oder Typ-Inferenz.
Im Netz findet man auch einige getrackte Bugs in diesem Umfeld.
https://www.google.de/search?q=java+bug+type+annotation+on+class+type+parameter+intersection+bound
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0ahUKEwiQrrK8w9jPAhWDjSwKHQ3LAscQFggxMAI&url=https%3A%2F%2Fbugs.eclipse.org%2Fbugs%2Fshow_bug.cgi%3Fid%3D462083&usg=AFQjCNEEkF0KsnBbdp2WcaYyVGHx7cLj9Q&sig2=KqkPYovFkv5VqgeM-JPdlw
https://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0ahUKEwiZ0dD_w9jPAhXBDiwKHf69CNQQFghWMAc&url=http%3A%2F%2Ftypes.cs.washington.edu%2Fchecker-framework%2Fcurrent%2Fchangelog.txt&usg=AFQjCNESdEMTut2sVzfbGctMVUSGPTXj5g&sig2=F8JX8xUARXDQO6dzd8yGRQ&bvm=bv.135475266,d.bGghttps://www.google.de/url?sa=t&rct=j&q=&esrc=s&source=web&cd=8&cad=rja&uact=8&ved=0ahUKEwiZ0dD_w9jPAhXBDiwKHf69CNQQFghWMAc&url=http%3A%2F%2Ftypes.cs.washington.edu%2Fchecker-framework%2Fcurrent%2Fchangelog.txt&usg=AFQjCNESdEMTut2sVzfbGctMVUSGPTXj5g&sig2=F8JX8xUARXDQO6dzd8yGRQ&bvm=bv.135475266,d.bGg
Meine Frage ist nun, wo ich einen entsprechenden Bug einstellen sollte,
Oracle, Open JDK oder Eclipse, und ob sich dies überhaupt lohnt?
Danke
Heiner