Skip to content

Commit 8a4c8d0

Browse files
committed
Move tracing before missing registration checks.
1 parent bfe3626 commit 8a4c8d0

File tree

6 files changed

+35
-30
lines changed

6 files changed

+35
-30
lines changed

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -500,6 +500,12 @@ public static Throwable getSavedException(String className) {
500500
*/
501501
public static boolean canUnsafeInstantiateAsInstance(DynamicHub hub) {
502502
Class<?> clazz = DynamicHub.toClass(hub);
503+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
504+
ConfigurationType type = MetadataTracer.singleton().traceReflectionType(clazz.getName());
505+
if (type != null) {
506+
type.setUnsafeAllocated();
507+
}
508+
}
503509
RuntimeConditionSet conditionSet = null;
504510
for (var singleton : layeredSingletons()) {
505511
conditionSet = singleton.unsafeInstantiatedClasses.get(clazz);
@@ -508,12 +514,6 @@ public static boolean canUnsafeInstantiateAsInstance(DynamicHub hub) {
508514
}
509515
}
510516
if (conditionSet != null) {
511-
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
512-
ConfigurationType type = MetadataTracer.singleton().traceReflectionType(clazz.getName());
513-
if (type != null) {
514-
type.setUnsafeAllocated();
515-
}
516-
}
517517
return conditionSet.satisfied();
518518
}
519519
return false;

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1973,14 +1973,19 @@ public DynamicHub arrayType() {
19731973
if (toClass(this) == void.class) {
19741974
throw new UnsupportedOperationException(new IllegalArgumentException());
19751975
}
1976+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
1977+
MetadataTracer.singleton().traceReflectionType(arrayTypeName());
1978+
}
19761979
if (companion.arrayHub == null) {
1977-
MissingReflectionRegistrationUtils.reportClassAccess(getTypeName() + "[]");
1978-
} else if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
1979-
MetadataTracer.singleton().traceReflectionType(companion.arrayHub.getTypeName());
1980+
MissingReflectionRegistrationUtils.reportClassAccess(arrayTypeName());
19801981
}
19811982
return companion.arrayHub;
19821983
}
19831984

1985+
private String arrayTypeName() {
1986+
return getTypeName() + "[]";
1987+
}
1988+
19841989
@KeepOriginal
19851990
private native Class<?> elementType();
19861991

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/JavaIOSubstitutions.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,12 +65,12 @@ static ObjectStreamClass lookup(Class<?> cl, boolean all) {
6565
}
6666

6767
if (Serializable.class.isAssignableFrom(cl) && !cl.isArray()) {
68-
if (!DynamicHub.fromClass(cl).isRegisteredForSerialization()) {
69-
MissingSerializationRegistrationUtils.reportSerialization(cl);
70-
}
7168
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
7269
MetadataTracer.singleton().traceSerializationType(cl.getName());
7370
}
71+
if (!DynamicHub.fromClass(cl).isRegisteredForSerialization()) {
72+
MissingSerializationRegistrationUtils.reportSerialization(cl);
73+
}
7474
}
7575

7676
return Target_java_io_ObjectStreamClass_Caches.localDescs0.get(cl);

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/localization/LocalizationSupport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -294,10 +294,10 @@ public boolean isRegisteredBundleLookup(String baseName, Locale locale, Object c
294294
/* Those cases will throw a NullPointerException before any lookup */
295295
return true;
296296
}
297+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
298+
MetadataTracer.singleton().traceResourceBundle(baseName);
299+
}
297300
if (registeredBundles.containsKey(baseName)) {
298-
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
299-
MetadataTracer.singleton().traceResourceBundle(baseName);
300-
}
301301
return registeredBundles.get(baseName).satisfied();
302302
}
303303
return false;

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jni/access/JNIReflectionDictionary.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -273,19 +273,19 @@ public static JNIMethodId getDeclaredMethodID(Class<?> classObject, JNIAccessibl
273273
}
274274

275275
private static JNIAccessibleMethod getDeclaredMethod(Class<?> classObject, JNIAccessibleMethodDescriptor descriptor, String dumpLabel) {
276+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
277+
ConfigurationType clazzType = MetadataTracer.singleton().traceJNIType(classObject.getName());
278+
if (clazzType != null) {
279+
clazzType.addMethod(descriptor.getNameConvertToString(), descriptor.getSignatureConvertToString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED);
280+
}
281+
}
276282
boolean foundClass = false;
277283
for (var dictionary : layeredSingletons()) {
278284
JNIAccessibleClass clazz = dictionary.classesByClassObject.get(classObject);
279285
if (clazz != null) {
280286
foundClass = true;
281287
JNIAccessibleMethod method = clazz.getMethod(descriptor);
282288
if (method != null) {
283-
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
284-
ConfigurationType clazzType = MetadataTracer.singleton().traceJNIType(classObject.getName());
285-
if (clazzType != null) {
286-
clazzType.addMethod(descriptor.getNameConvertToString(), descriptor.getSignatureConvertToString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED);
287-
}
288-
}
289289
return method;
290290
}
291291
}
@@ -334,19 +334,19 @@ private static JNIAccessibleMethod checkMethod(JNIAccessibleMethod method, Class
334334
}
335335

336336
private static JNIAccessibleField getDeclaredField(Class<?> classObject, CharSequence name, boolean isStatic, String dumpLabel) {
337+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
338+
ConfigurationType clazzType = MetadataTracer.singleton().traceJNIType(classObject.getName());
339+
if (clazzType != null) {
340+
clazzType.addField(name.toString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED, false);
341+
}
342+
}
337343
boolean foundClass = false;
338344
for (var dictionary : layeredSingletons()) {
339345
JNIAccessibleClass clazz = dictionary.classesByClassObject.get(classObject);
340346
if (clazz != null) {
341347
foundClass = true;
342348
JNIAccessibleField field = clazz.getField(name);
343349
if (field != null && (field.isStatic() == isStatic || field.isNegative())) {
344-
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
345-
ConfigurationType clazzType = MetadataTracer.singleton().traceJNIType(classObject.getName());
346-
if (clazzType != null) {
347-
clazzType.addField(name.toString(), ConfigurationMemberInfo.ConfigurationMemberDeclaration.DECLARED, false);
348-
}
349-
}
350350
return field;
351351
}
352352
}

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/reflect/serialize/SerializationSupport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -267,12 +267,12 @@ public static Object getSerializationConstructorAccessor(Class<?> serializationT
267267
return constructorAccessor;
268268
}
269269
} else {
270+
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
271+
MetadataTracer.singleton().traceSerializationType(declaringClass.getName());
272+
}
270273
for (var singleton : layeredSingletons()) {
271274
Object constructorAccessor = singleton.getSerializationConstructorAccessor0(declaringClass, targetConstructorClass);
272275
if (constructorAccessor != null) {
273-
if (MetadataTracer.Options.MetadataTracingSupport.getValue() && MetadataTracer.singleton().enabled()) {
274-
MetadataTracer.singleton().traceSerializationType(declaringClass.getName());
275-
}
276276
return constructorAccessor;
277277
}
278278
}

0 commit comments

Comments
 (0)