Skip to content

Commit 0331752

Browse files
committed
Future defaults done right
1 parent 9e61990 commit 0331752

File tree

1 file changed

+21
-16
lines changed

1 file changed

+21
-16
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/FutureDefaultsOptions.java

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import java.util.Objects;
3131
import java.util.Set;
3232
import java.util.stream.Collectors;
33+
import java.util.stream.Stream;
3334

3435
import org.graalvm.collections.EconomicMap;
3536
import org.graalvm.nativeimage.ImageInfo;
@@ -40,6 +41,7 @@
4041
import com.oracle.svm.core.option.APIOption;
4142
import com.oracle.svm.core.option.AccumulatingLocatableMultiOptionValue;
4243
import com.oracle.svm.core.option.HostedOptionKey;
44+
import com.oracle.svm.core.option.LocatableMultiOptionValue;
4345
import com.oracle.svm.core.option.SubstrateOptionsParser;
4446
import com.oracle.svm.core.util.UserError;
4547
import com.oracle.svm.core.util.VMError;
@@ -116,8 +118,7 @@ private static LinkedHashSet<String> getAllValues() {
116118
@Override
117119
protected void onValueUpdate(EconomicMap<OptionKey<?>, Object> values, AccumulatingLocatableMultiOptionValue.Strings oldValue, AccumulatingLocatableMultiOptionValue.Strings newValue) {
118120
super.onValueUpdate(values, oldValue, newValue);
119-
/* temporary simple pwdctest, will do full parsing */
120-
if (newValue.values().contains("all") || newValue.values().contains(CLASS_FOR_NAME_RESPECTS_CLASS_LOADER)) {
121+
if (computeFutureDefaults(newValue.getValuesWithOrigins()).contains(CLASS_FOR_NAME_RESPECTS_CLASS_LOADER)) {
121122
ClassForNameSupport.Options.ClassForNameRespectsClassLoader.update(values, true);
122123
}
123124
}
@@ -154,8 +155,20 @@ private static void verifyOptionDescription() {
154155
@Platforms(Platform.HOSTED_ONLY.class)
155156
public static void parseAndVerifyOptions() {
156157
verifyOptionDescription();
157-
futureDefaults = new LinkedHashSet<>(getAllValues().size());
158158
var valuesWithOrigin = FutureDefaults.getValue().getValuesWithOrigins();
159+
futureDefaults = computeFutureDefaults(valuesWithOrigin);
160+
/* Set build-time properties for user features */
161+
for (String futureDefault : getFutureDefaults()) {
162+
setSystemProperty(futureDefault);
163+
}
164+
165+
for (String retiredFutureDefault : RETIRED_FUTURE_DEFAULTS) {
166+
setSystemProperty(retiredFutureDefault);
167+
}
168+
}
169+
170+
private static LinkedHashSet<String> computeFutureDefaults(Stream<LocatableMultiOptionValue.ValueWithOrigin<String>> valuesWithOrigin) {
171+
LinkedHashSet<String> result = new LinkedHashSet<>();
159172
valuesWithOrigin.forEach(valueWithOrigin -> {
160173
String value = valueWithOrigin.value();
161174
if (DEFAULT_NAME.equals(value)) {
@@ -190,26 +203,18 @@ public static void parseAndVerifyOptions() {
190203
SubstrateOptionsParser.commandArgument(FutureDefaults, NONE_NAME),
191204
valueWithOrigin.origin());
192205
}
193-
futureDefaults.clear();
206+
result.clear();
194207
}
195208

196209
if (value.equals(ALL_NAME)) {
197-
futureDefaults.addAll(ALL_FUTURE_DEFAULTS);
210+
result.addAll(ALL_FUTURE_DEFAULTS);
198211
} else if (value.equals(RUN_TIME_INITIALIZE_JDK)) {
199-
futureDefaults.addAll(List.of(RUN_TIME_INITIALIZE_SECURITY_PROVIDERS, RUN_TIME_INITIALIZE_FILE_SYSTEM_PROVIDERS, RUN_TIME_INITIALIZE_RESOURCE_BUNDLES));
212+
result.addAll(List.of(RUN_TIME_INITIALIZE_SECURITY_PROVIDERS, RUN_TIME_INITIALIZE_FILE_SYSTEM_PROVIDERS, RUN_TIME_INITIALIZE_RESOURCE_BUNDLES));
200213
} else {
201-
futureDefaults.add(value);
214+
result.add(value);
202215
}
203216
});
204-
205-
/* Set build-time properties for user features */
206-
for (String futureDefault : getFutureDefaults()) {
207-
setSystemProperty(futureDefault);
208-
}
209-
210-
for (String retiredFutureDefault : RETIRED_FUTURE_DEFAULTS) {
211-
setSystemProperty(retiredFutureDefault);
212-
}
217+
return result;
213218
}
214219

215220
private static void setSystemProperty(String futureDefault) {

0 commit comments

Comments
 (0)