diff --git a/substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/darwin/DarwinSubstitutions.java b/substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/darwin/DarwinSubstitutions.java index fe753381be04..88238af7ad60 100644 --- a/substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/darwin/DarwinSubstitutions.java +++ b/substratevm/src/com.oracle.svm.core.posix/src/com/oracle/svm/core/posix/darwin/DarwinSubstitutions.java @@ -28,6 +28,7 @@ import static com.oracle.svm.core.posix.headers.darwin.DarwinTime.NoTransitions.mach_timebase_info; import java.util.Objects; +import java.util.function.BooleanSupplier; import org.graalvm.nativeimage.ImageSingletons; import org.graalvm.nativeimage.Platform; @@ -122,7 +123,7 @@ long nanoTime() { * Native functions don't exist on Darwin because this whole class is used, and should exist, only * on Linux. See java.util.prefs.Preferences#factory. */ -@TargetClass(className = "java.util.prefs.FileSystemPreferences") +@TargetClass(className = "java.util.prefs.FileSystemPreferences", onlyWith = IsJavaUtilPrefsPresent.class) final class Target_java_util_prefs_FileSystemPreferences { @Delete private static native int[] lockFile0(String fileName, int permission, boolean shared); @@ -134,6 +135,14 @@ final class Target_java_util_prefs_FileSystemPreferences { private static native int chmod(String fileName, int permission); } +final class IsJavaUtilPrefsPresent implements BooleanSupplier { + @Override + public boolean getAsBoolean() { + var prefsMod = ModuleLayer.boot().findModule("java.prefs"); + return prefsMod.isPresent(); + } +} + /** * Not used in native image and has linker errors with XCode 13. Can be removed in the future when * XCode 14 becomes omnipresent.