> 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 with a new target base due to a merge or a rebase. The pull request now contains 12 commits: - rephrased javadoc Annotated to more precisely describe which annotations are returned - fixed comment - Merge remote-tracking branch 'openjdk-jdk/master' into JDK-8303431 - [skip ci] formatting fixes - addressed review feedback - Merge remote-tracking branch 'openjdk-jdk/master' into JDK-8303431 - switched to use of lists and maps instead of arrays - fixed whitespace - added support for inherited annotations - Merge branch 'master' into JDK-8303431 - ... and 2 more: https://git.openjdk.org/jdk/compare/525a91e3...362738a6 ------------- Changes: https://git.openjdk.org/jdk/pull/12810/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=12810&range=07 Stats: 2319 lines in 34 files changed: 2268 ins; 23 del; 28 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