From 7c900d1a65c93b04a35de4e9e52681f3f850ca80 Mon Sep 17 00:00:00 2001 From: Pavel Marek Date: Thu, 25 Sep 2025 17:24:33 +0200 Subject: [PATCH] java_util_prefs substitution is applied only if java.prefs module is present. --- .../svm/core/posix/darwin/DarwinSubstitutions.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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.