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
This commit is contained in:
Brian Clozel
2024-12-09 10:50:44 +01:00
parent aee52b53a1
commit 13df9058a4
3 changed files with 14 additions and 4 deletions

View File

@@ -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 {
* 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
}

View File

@@ -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);
}
}
);

View File

@@ -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 {
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 {
"allDeclaredMethods": true,
"allPublicClasses": true,
"allDeclaredClasses": true,
"unsafeAllocated": true,
"fields": [
{ "name": "aScore" },
{ "name": "DEFAULT_CHARSET" },