Skip to content

Commit dd565a3

Browse files
committed
svm: register NativeImageResourceFileSystemProvider for reflective instantiation
1 parent 2fe1d54 commit dd565a3

File tree

1 file changed

+28
-0
lines changed

1 file changed

+28
-0
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk/runtimeinit/FileSystemProviderRuntimeInitSupport.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,17 @@
3030

3131
import org.graalvm.nativeimage.Platform;
3232
import org.graalvm.nativeimage.Platforms;
33+
import org.graalvm.nativeimage.hosted.RuntimeReflection;
3334

35+
import com.oracle.svm.core.FutureDefaultsOptions;
3436
import com.oracle.svm.core.SubstrateUtil;
3537
import com.oracle.svm.core.annotate.Alias;
3638
import com.oracle.svm.core.annotate.InjectAccessors;
3739
import com.oracle.svm.core.annotate.TargetClass;
40+
import com.oracle.svm.core.feature.AutomaticallyRegisteredFeature;
41+
import com.oracle.svm.core.feature.InternalFeature;
3842
import com.oracle.svm.core.jdk.JDKInitializedAtRunTime;
43+
import com.oracle.svm.core.jdk.resources.NativeImageResourceFileSystemProvider;
3944
import com.oracle.svm.core.util.BasedOnJDKFile;
4045
import com.oracle.svm.core.util.VMError;
4146
import com.oracle.svm.util.ReflectionUtil;
@@ -51,6 +56,29 @@
5156
final class FileSystemProviderRuntimeInitSupport {
5257
}
5358

59+
@AutomaticallyRegisteredFeature
60+
final class FileSystemProviderRunTimeInitFeature implements InternalFeature {
61+
62+
@Override
63+
public boolean isInConfiguration(IsInConfigurationAccess access) {
64+
return FutureDefaultsOptions.isJDKInitializedAtRunTime();
65+
}
66+
67+
@Override
68+
public void beforeAnalysis(BeforeAnalysisAccess access) {
69+
if (FutureDefaultsOptions.isJDKInitializedAtRunTime()) {
70+
/*
71+
* Explicitly register NativeImageResourceFileSystemProvider for reflective
72+
* instantiation. Normally, the ServiceLoaderFeature does this as well, but in case it
73+
* is turned off (-H:-UseServiceLoaderFeature), we should still at least register our
74+
* own provider.
75+
*/
76+
RuntimeReflection.register(NativeImageResourceFileSystemProvider.class);
77+
RuntimeReflection.registerForReflectiveInstantiation(NativeImageResourceFileSystemProvider.class);
78+
}
79+
}
80+
}
81+
5482
// java.io
5583

5684
@TargetClass(className = "java.io.FileSystem", onlyWith = JDKInitializedAtRunTime.class)

0 commit comments

Comments
 (0)