Skip to content

Commit a76c823

Browse files
Add support for MethodHandles.classData
Add support for build-time- and run-time-loaded classes.
1 parent 515dad2 commit a76c823

File tree

2 files changed

+14
-6
lines changed

2 files changed

+14
-6
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHub.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@
150150
import jdk.graal.compiler.nodes.java.FinalFieldBarrierNode;
151151
import jdk.graal.compiler.replacements.ReplacementsUtil;
152152
import jdk.internal.access.JavaLangReflectAccess;
153+
import jdk.internal.access.SharedSecrets;
153154
import jdk.internal.misc.Unsafe;
154155
import jdk.internal.reflect.CallerSensitive;
155156
import jdk.internal.reflect.CallerSensitiveAdapter;
@@ -452,8 +453,9 @@ public DynamicHub(Class<?> hostedJavaClass, String name, byte hubType, Reference
452453
this.flags = flags;
453454

454455
Object loader = PredefinedClassesSupport.isPredefined(hostedJavaClass) ? NO_CLASS_LOADER : classLoader;
456+
Object classData = SharedSecrets.getJavaLangAccess().classData(hostedJavaClass);
455457
this.companion = DynamicHubCompanion.createHosted(hostedJavaClass.getModule(), superType, sourceFileName,
456-
modifiers, loader, nestHost, simpleBinaryName, declaringClass, signature);
458+
modifiers, loader, nestHost, simpleBinaryName, declaringClass, signature, classData);
457459
}
458460

459461
/**
@@ -2328,6 +2330,11 @@ private Class<?>[] getPermittedSubclasses0() {
23282330
@KeepOriginal
23292331
native boolean casAnnotationType(AnnotationType oldType, AnnotationType newType);
23302332

2333+
@Substitute
2334+
Object getClassData() {
2335+
return companion.classData;
2336+
}
2337+
23312338
/*
23322339
* We need to filter out hiding and negative elements at the last moment. This ensures that the
23332340
* JDK internals see them as regular methods and fields and ensure their visibility is correct,

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/hub/DynamicHubCompanion.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,22 +153,22 @@ public final class DynamicHubCompanion {
153153
Constructor<?> cachedConstructor;
154154
Object jfrEventConfiguration;
155155
@Stable boolean canUnsafeAllocate;
156+
Object classData;
156157

157158
@Platforms(Platform.HOSTED_ONLY.class)
158159
static DynamicHubCompanion createHosted(Module module, DynamicHub superHub, String sourceFileName, int modifiers,
159-
Object classLoader, Class<?> nestHost, String simpleBinaryName, Object declaringClass, String signature) {
160-
161-
return new DynamicHubCompanion(module, superHub, sourceFileName, modifiers, classLoader, nestHost, simpleBinaryName, declaringClass, signature);
160+
Object classLoader, Class<?> nestHost, String simpleBinaryName, Object declaringClass, String signature, Object classData) {
161+
return new DynamicHubCompanion(module, superHub, sourceFileName, modifiers, classLoader, nestHost, simpleBinaryName, declaringClass, signature, classData);
162162
}
163163

164164
static DynamicHubCompanion createAtRuntime(Module module, DynamicHub superHub, String sourceFileName, int modifiers,
165165
ClassLoader classLoader, String simpleBinaryName, Object declaringClass, String signature, ClassDefinitionInfo info) {
166166
assert RuntimeClassLoading.isSupported();
167-
return new DynamicHubCompanion(module, superHub, sourceFileName, modifiers, classLoader, info.dynamicNest, simpleBinaryName, declaringClass, signature);
167+
return new DynamicHubCompanion(module, superHub, sourceFileName, modifiers, classLoader, info.dynamicNest, simpleBinaryName, declaringClass, signature, info.classData);
168168
}
169169

170170
private DynamicHubCompanion(Module module, DynamicHub superHub, String sourceFileName, int modifiers,
171-
Object classLoader, Class<?> nestHost, String simpleBinaryName, Object declaringClass, String signature) {
171+
Object classLoader, Class<?> nestHost, String simpleBinaryName, Object declaringClass, String signature, Object classData) {
172172
this.module = module;
173173
this.superHub = superHub;
174174
this.sourceFileName = sourceFileName;
@@ -179,6 +179,7 @@ private DynamicHubCompanion(Module module, DynamicHub superHub, String sourceFil
179179
this.signature = signature;
180180

181181
this.classLoader = classLoader;
182+
this.classData = classData;
182183
}
183184

184185
public void setHubMetadata(RuntimeDynamicHubMetadata hubMetadata) {

0 commit comments

Comments
 (0)