Browse Source

Introduce "unsafeAllocated" flag in TypeHint

This metadata information is required for supporting libraries using
`sun.misc.Unsafe#allocateInstance(Class<?>)`, even though Spring
Framework is not using this feature.

Closes gh-34055
pull/34398/head
Brian Clozel 1 year ago
parent
commit
13df9058a4
  1. 12
      spring-core/src/main/java/org/springframework/aot/hint/MemberCategory.java
  2. 1
      spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsWriter.java
  3. 5
      spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsWriterTests.java

12
spring-core/src/main/java/org/springframework/aot/hint/MemberCategory.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -124,6 +124,14 @@ public enum MemberCategory { @@ -124,6 +124,14 @@ public enum MemberCategory {
* reflection for inner classes but rather makes sure they are available
* via a call to {@link Class#getDeclaredClasses}.
*/
DECLARED_CLASSES
DECLARED_CLASSES,
/**
* A category that represents the need for
* {@link sun.misc.Unsafe#allocateInstance(Class) unsafe allocation}
* for this type.
* @since 6.2.1
*/
UNSAFE_ALLOCATED
}

1
spring-core/src/main/java/org/springframework/aot/nativex/ReflectionHintsWriter.java

@ -124,6 +124,7 @@ class ReflectionHintsWriter { @@ -124,6 +124,7 @@ class ReflectionHintsWriter {
attributes.put("allDeclaredMethods", true);
case PUBLIC_CLASSES -> attributes.put("allPublicClasses", true);
case DECLARED_CLASSES -> attributes.put("allDeclaredClasses", true);
case UNSAFE_ALLOCATED -> attributes.put("unsafeAllocated", true);
}
}
);

5
spring-core/src/test/java/org/springframework/aot/nativex/ReflectionHintsWriterTests.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2023 the original author or authors.
* Copyright 2002-2024 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -59,7 +59,7 @@ class ReflectionHintsWriterTests { @@ -59,7 +59,7 @@ class ReflectionHintsWriterTests {
MemberCategory.INVOKE_PUBLIC_CONSTRUCTORS, MemberCategory.INVOKE_DECLARED_CONSTRUCTORS,
MemberCategory.INTROSPECT_PUBLIC_METHODS, MemberCategory.INTROSPECT_DECLARED_METHODS,
MemberCategory.INVOKE_PUBLIC_METHODS, MemberCategory.INVOKE_DECLARED_METHODS,
MemberCategory.PUBLIC_CLASSES, MemberCategory.DECLARED_CLASSES)
MemberCategory.PUBLIC_CLASSES, MemberCategory.DECLARED_CLASSES, MemberCategory.UNSAFE_ALLOCATED)
.withField("DEFAULT_CHARSET")
.withField("defaultCharset")
.withField("aScore")
@ -83,6 +83,7 @@ class ReflectionHintsWriterTests { @@ -83,6 +83,7 @@ class ReflectionHintsWriterTests {
"allDeclaredMethods": true,
"allPublicClasses": true,
"allDeclaredClasses": true,
"unsafeAllocated": true,
"fields": [
{ "name": "aScore" },
{ "name": "DEFAULT_CHARSET" },

Loading…
Cancel
Save