Skip to content

Commit 5bd634a

Browse files
committed
Internal ignore lists for -H:Preserve
1 parent 56cebab commit 5bd634a

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

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

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,12 +1338,9 @@ public enum ReportingMode {
13381338
@Option(help = "file:doc-files/PreserveHelp.txt")//
13391339
public static final HostedOptionKey<AccumulatingLocatableMultiOptionValue.Strings> Preserve = new HostedOptionKey<>(AccumulatingLocatableMultiOptionValue.Strings.build());
13401340

1341-
@Option(help = "file:doc-files/PreserveHelp.txt")//
1341+
@Option(help = "Ignore classes or packages (comma separated) from the ones included with '-H:Preserve'. This can be used to workaround potential issues related to '-H:Preserve'.", type = OptionType.Debug) //
13421342
public static final HostedOptionKey<AccumulatingLocatableMultiOptionValue.Strings> IgnorePreserveForClasses = new HostedOptionKey<>(AccumulatingLocatableMultiOptionValue.Strings.build());
13431343

1344-
@Option(help = "file:doc-files/PreserveHelp.txt")//
1345-
public static final HostedOptionKey<AccumulatingLocatableMultiOptionValue.Strings> IgnorePreserveForClassesPaths = new HostedOptionKey<>(AccumulatingLocatableMultiOptionValue.Strings.build());
1346-
13471344
@Option(help = "Force include include all public types and methods that can be reached using normal Java access rules.")//
13481345
public static final HostedOptionKey<Boolean> UseBaseLayerInclusionPolicy = new HostedOptionKey<>(false);
13491346

substratevm/src/com.oracle.svm.hosted/src/com/oracle/svm/hosted/NativeImageGenerator.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import java.util.Collection;
4444
import java.util.Collections;
4545
import java.util.EnumSet;
46+
import java.util.HashSet;
4647
import java.util.List;
4748
import java.util.ListIterator;
4849
import java.util.Locale;
@@ -1098,10 +1099,10 @@ protected void setupNativeImage(String imageName, OptionValues options, Map<Meth
10981099

10991100
var runtimeReflection = ImageSingletons.lookup(RuntimeReflectionSupport.class);
11001101

1101-
var classesToIgnore = OptionClassFilterBuilder.createFilter(loader, SubstrateOptions.IgnorePreserveForClasses, SubstrateOptions.IgnorePreserveForClassesPaths);
1102+
Set<String> classesOrPackagesToIgnore = ignoredClassesOrPackagesForPreserve();
11021103
loader.classLoaderSupport.getClassesToPreserve().parallel()
11031104
.filter(ClassInclusionPolicy::isClassIncludedBase)
1104-
.filter(c -> classesToIgnore.isIncluded(c) == null)
1105+
.filter(c -> classesOrPackagesToIgnore.contains(c.getPackageName()) || classesOrPackagesToIgnore.contains(c.getName()))
11051106
.forEach(c -> runtimeReflection.registerClassFully(ConfigurationCondition.alwaysTrue(), c));
11061107
for (String className : loader.classLoaderSupport.getClassNamesToPreserve()) {
11071108
RuntimeReflection.registerClassLookup(className);
@@ -1114,6 +1115,13 @@ protected void setupNativeImage(String imageName, OptionValues options, Map<Meth
11141115
}
11151116
}
11161117

1118+
private static Set<String> ignoredClassesOrPackagesForPreserve() {
1119+
Set<String> ignoredClassesOrPackages = new HashSet<>(SubstrateOptions.IgnorePreserveForClasses.getValue().valuesAsSet());
1120+
// GR-63360: Parsing of constant_ lambda forms fails
1121+
ignoredClassesOrPackages.add("java.lang.invoke.LambdaForm$Holder");
1122+
return Collections.unmodifiableSet(ignoredClassesOrPackages);
1123+
}
1124+
11171125
protected void registerEntryPointStubs(Map<Method, CEntryPointData> entryPoints) {
11181126
entryPoints.forEach((method, entryPointData) -> CEntryPointCallStubSupport.singleton().registerStubForMethod(method, () -> entryPointData));
11191127
}

0 commit comments

Comments
 (0)