From dd8fb03048e8c5531891623960effff918410888 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 --- .github/workflows/reachability-metadata.yml | 4 ++-- .../svm/core/configure/ReflectionMetadataParser.java | 7 +++++++ .../svm/core/configure/SerializationMetadataParser.java | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/reachability-metadata.yml b/.github/workflows/reachability-metadata.yml index 8d9cd0ab2285b..21cf56fb8bb06 100644 --- a/.github/workflows/reachability-metadata.yml +++ b/.github/workflows/reachability-metadata.yml @@ -3,7 +3,7 @@ # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # # The Universal Permissive License (UPL), Version 1.0 -# +#op # Subject to the condition set forth below, permission is hereby granted to any # person obtaining a copy of this software, associated documentation and/or # data (collectively the "Software"), free of charge and under any and all @@ -71,7 +71,7 @@ jobs: - name: Build GraalVM JDK uses: ./.github/actions/build-graalvm with: - native-images: 'native-image,native-image-configure,lib:native-image-agent' + native-images: 'native-image' components: 'Native Image,Native Image Configure Tool' java-version: ${{ env.MINIMUM_METADATA_JAVA_VERSION }} - name: Tar GraalVM JDK 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..1d79bdebd42ba 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,10 @@ import org.graalvm.collections.EconomicMap; import org.graalvm.collections.MapCursor; +import org.graalvm.nativeimage.ImageSingletons; +import org.graalvm.nativeimage.impl.ConfigurationCondition; 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 +61,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 +104,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 && condition instanceof ConfigurationCondition cond) { + ImageSingletons.lookup(RuntimeSerializationSupport.class).register(cond, 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()) {