RFR: JDK-8267936: PreserveAllAnnotations option doesn't expose the annotation to Java code [v4]

Jaroslav Tulach github.com+26887752+jaroslavtulach at openjdk.java.net
Mon May 31 06:11:19 UTC 2021


On Mon, 31 May 2021 06:06:37 GMT, Jaroslav Tulach <github.com+26887752+JaroslavTulach at openjdk.org> wrote:

>> This PR exposes runtime invisible annotations via `Class.getAnnotation` when `-XX:+PreserveAllAnnotations` option is passed to the JVM.
>> 
>> Existing `-XX:+PreserveAllAnnotations` option can be very useful for code that needs to access annotations with `RetentionPolicy.CLASS` without the need to parse the .class files manually. While the RuntimeInvisibleAnnotations are kept in the runtime, they are not visible via java.lang.reflect API. I assume that's just an omission.
>> 
>> This PR provides a new test and a fix to make `Class.getAnnotation(...)` useful when `-XX:+PreserveAllAnnotations` option is on.
>
> Jaroslav Tulach has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR.

test/jdk/java/lang/annotation/AnnotationType/AnnotationTypeChangedToRuntimeTest.java line 56:

> 54:     @Retention(RUNTIME)
> 55:     @AnnB
> 56:     public @interface AnnA_v2 {

The `AltClassLoader` uses `AnnA_v2` instead of `AnnA_v1` when loading the classes and that makes (in cooperation with `-XX:+PreserveAllAnnotations` flag) the `RuntimeInvisibleAnnotation` visible.

-------------

PR: https://git.openjdk.java.net/jdk/pull/4245


More information about the hotspot-runtime-dev mailing list