> This PR extends JVMCI with new API (`jdk.vm.ci.meta.Annotated`) for accessing 
> annotations. The main differences from `java.lang.reflect.AnnotatedElement` 
> are:
> * All methods in the `Annotated` interface explicitly specify requested 
> annotation type(s). That is, there is no equivalent of 
> `AnnotatedElement.getAnnotations()`.
> * Annotation data is returned in a map-like object (of type 
> `jdk.vm.ci.meta.AnnotationData`) instead of in an `Annotation` object. This 
> works better for libgraal as it avoids the need for annotation types to be 
> loaded and included in libgraal.
>  
> To demonstrate the new API, here's an example in terms 
> `java.lang.reflect.AnnotatedElement` (which `ResolvedJavaType` implements):
> 
>     ResolvedJavaMethod method = ...;
>     ExplodeLoop a = method.getAnnotation(ExplodeLoop.class);
>     return switch (a.kind()) {
>         case FULL_UNROLL -> LoopExplosionKind.FULL_UNROLL;
>         case FULL_UNROLL_UNTIL_RETURN -> 
> LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN;
>         ...
>     }
> 
> 
> The same code using the new API:
> 
> 
>     ResolvedJavaMethod method = ...;
>     ResolvedJavaType explodeLoopType = ...;
>     AnnotationData a = method.getAnnotationDataFor(explodeLoopType);
>     return switch (a.getEnum("kind").getName()) {
>         case "FULL_UNROLL" -> LoopExplosionKind.FULL_UNROLL;
>         case "FULL_UNROLL_UNTIL_RETURN" -> 
> LoopExplosionKind.FULL_UNROLL_UNTIL_RETURN;
>         ...
>     }
> 
> 
> The implementation relies on new methods in `jdk.internal.vm.VMSupport` for 
> parsing annotations and serializing/deserializing to/from a byte array. This 
> allows the annotation data to be passed from the HotSpot heap to the libgraal 
> heap.

Doug Simon has updated the pull request incrementally with two additional 
commits since the last revision:

 - added breadcrumb in AnnotationParser about considering JVMCI should new 
annotation element types be added
 - fixed javadoc comment

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/12810/files
  - new: https://git.openjdk.org/jdk/pull/12810/files/362738a6..bad23a0c

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=12810&range=08
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=12810&range=07-08

  Stats: 3 lines in 2 files changed: 2 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/12810.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/12810/head:pull/12810

PR: https://git.openjdk.org/jdk/pull/12810

Reply via email to