diff --git a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/option/HostedOptionCustomizer.java b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/option/HostedOptionCustomizer.java index d023baf56a69..0738dac47991 100644 --- a/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/option/HostedOptionCustomizer.java +++ b/substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/option/HostedOptionCustomizer.java @@ -26,20 +26,18 @@ import org.graalvm.collections.EconomicMap; +import com.oracle.svm.common.option.MultiOptionValue; + import jdk.graal.compiler.options.OptionKey; import jdk.graal.compiler.options.OptionValues; public class HostedOptionCustomizer implements HostedOptionProvider { - private final EconomicMap, Object> hostedValues; private final EconomicMap, Object> runtimeValues; - public HostedOptionCustomizer(HostedOptionProvider original) { - hostedValues = OptionValues.newOptionMap(); - hostedValues.putAll(original.getHostedValues()); - - runtimeValues = OptionValues.newOptionMap(); - runtimeValues.putAll(original.getRuntimeValues()); + public HostedOptionCustomizer(HostedOptionParser hostedOptionParser) { + this.hostedValues = copyOptionValues(hostedOptionParser.getHostedValues()); + this.runtimeValues = copyOptionValues(hostedOptionParser.getRuntimeValues()); } @Override @@ -51,4 +49,18 @@ public EconomicMap, Object> getHostedValues() { public EconomicMap, Object> getRuntimeValues() { return runtimeValues; } + + private static EconomicMap, Object> copyOptionValues(EconomicMap, Object> original) { + EconomicMap, Object> result = OptionValues.newOptionMap(); + var cursor = original.getEntries(); + while (cursor.advance()) { + OptionKey key = cursor.getKey(); + Object value = cursor.getValue(); + if (value instanceof MultiOptionValue v) { + value = v.createCopy(); + } + result.put(key, value); + } + return result; + } }