Integrated: 8303431: [JVMCI] libgraal annotation API
Doug Simon
dnsimon at openjdk.org
Wed Apr 19 16:05:13 UTC 2023
On Wed, 1 Mar 2023 18:07:34 GMT, Doug Simon <dnsimon at openjdk.org> wrote:
> 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.
This pull request has now been integrated.
Changeset: 48fd4f2b
Author: Doug Simon <dnsimon at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/48fd4f2bd37562a159e4089b15aa108e0b1bebeb
Stats: 2321 lines in 34 files changed: 2270 ins; 23 del; 28 mod
8303431: [JVMCI] libgraal annotation API
Reviewed-by: kvn, never, darcy
-------------
PR: https://git.openjdk.org/jdk/pull/12810
More information about the core-libs-dev
mailing list