RFR: JDK-8267936: PreserveAllAnnotations option isn't tested
Peter Levart
plevart at openjdk.java.net
Wed Jun 2 11:43:27 UTC 2021
On Wed, 2 Jun 2021 11:34:18 GMT, Peter Levart <plevart at openjdk.org> wrote:
>> test/jdk/java/lang/annotation/AnnotationType/AnnotationTypeChangedToRuntimeTest.java line 81:
>>
>>> 79: " should not be visible at runtime");
>>> 80: }
>>> 81: }
>>
>> I'm trying to understand why the case of `TestTask.class.getDeclaredAnnotation(AnnA_v1.class)` is different from `AnnB.class.getDeclaredAnnotation(AnnA_v1.class)` ... `TestTask` and `AnnB` are both just types annotated with the same annotation `@AnnA_v1` ... I'll have to debug this to see the point (does it have something to do with the fact that there is circularity of annotation uses: `AnnA_v1` is annotated with `@AnnB` while `AnnB` is annotated with `@AnnA_v1` ?
>
> ...hm, it seems that mere presence of any RUNTIME annotation that was RUNTIME already at the use compile time somehow affects -XX:+PreserveAllAnnotations option so that now RUNTIME annotations that were CLASS annotations at use compile time are not returned. Checking VM logic...
For example, if I try this:
@Retention(CLASS)
public @interface AnnA_v1 {}
// An alternative version of AnnA_v1 with RUNTIME retention instead.
// Used to simulate separate compilation (see AltClassLoader below).
@Retention(RUNTIME)
public @interface AnnA_v2 {}
@Retention(RUNTIME)
public @interface AnnB {}
@AnnA_v1
@AnnB
public static class TestTask implements Runnable {
@Override
public void run() {
AnnA_v1 ann1 = TestTask.class.getDeclaredAnnotation(AnnA_v1.class);
... then `ann1` is not returned, but if I comment out the `@AnnB` annotation use on TestTask, `ann1` is returned.
-------------
PR: https://git.openjdk.java.net/jdk/pull/4280
More information about the core-libs-dev
mailing list