From fa4012f504a0a3928df080715281a6f2b09d8697 Mon Sep 17 00:00:00 2001 From: Loic Ottet Date: Tue, 1 Oct 2024 01:30:38 +0200 Subject: [PATCH] Consider all types as serializable --- .../oracle/svm/core/configure/ReflectionMetadataParser.java | 6 ++++++ .../svm/core/configure/SerializationMetadataParser.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/ReflectionMetadataParser.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/ReflectionMetadataParser.java index 982588099e973..3aee59022c3a0 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/ReflectionMetadataParser.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/ReflectionMetadataParser.java @@ -31,7 +31,9 @@ import org.graalvm.collections.EconomicMap; import org.graalvm.collections.MapCursor; +import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.impl.RuntimeReflectionSupport; +import org.graalvm.nativeimage.impl.RuntimeSerializationSupport; import org.graalvm.nativeimage.impl.UnresolvedConfigurationCondition; import com.oracle.svm.core.TypeResult; @@ -58,6 +60,7 @@ public void parseAndRegister(Object json, URI origin) { } @Override + @SuppressWarnings("unchecked") protected void parseClass(EconomicMap data) { checkAttributes(data, "reflection class descriptor object", List.of(TYPE_KEY), OPTIONAL_REFLECT_METADATA_ATTRS); RuntimeReflectionSupport.increaseCount(false); @@ -100,6 +103,9 @@ protected void parseClass(EconomicMap data) { delegate.registerPublicMethods(queryCondition, true, clazz); delegate.registerDeclaredFields(queryCondition, true, clazz); delegate.registerPublicFields(queryCondition, true, clazz); + if (clazz instanceof Class c) { + ImageSingletons.lookup(RuntimeSerializationSupport.class).register(condition, c); + } registerIfNotDefault(data, false, clazz, "allDeclaredConstructors", () -> delegate.registerDeclaredConstructors(condition, false, clazz)); registerIfNotDefault(data, false, clazz, "allPublicConstructors", () -> delegate.registerPublicConstructors(condition, false, clazz)); diff --git a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/SerializationMetadataParser.java b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/SerializationMetadataParser.java index 1f6a9f82221fa..20d9ab108dee6 100644 --- a/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/SerializationMetadataParser.java +++ b/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/configure/SerializationMetadataParser.java @@ -50,7 +50,7 @@ public void parseAndRegister(Object json, URI origin) { @Override protected void parseSerializationDescriptorObject(EconomicMap data, boolean lambdaCapturingType) { checkAttributes(data, "serialization descriptor object", List.of(TYPE_KEY), List.of(CONDITIONAL_KEY, CUSTOM_TARGET_CONSTRUCTOR_CLASS_KEY)); - RuntimeReflectionSupport.increaseCount(false); + RuntimeReflectionSupport.increaseCount(true); Optional targetSerializationClass = parseTypeContents(data.get(TYPE_KEY)); if (targetSerializationClass.isEmpty()) {