28
28
import static com .oracle .svm .core .posix .headers .darwin .DarwinTime .NoTransitions .mach_timebase_info ;
29
29
30
30
import java .util .Objects ;
31
+ import java .util .function .BooleanSupplier ;
31
32
32
33
import org .graalvm .nativeimage .ImageSingletons ;
33
34
import org .graalvm .nativeimage .Platform ;
@@ -122,7 +123,7 @@ long nanoTime() {
122
123
* Native functions don't exist on Darwin because this whole class is used, and should exist, only
123
124
* on Linux. See <code>java.util.prefs.Preferences#factory</code>.
124
125
*/
125
- @ TargetClass (className = "java.util.prefs.FileSystemPreferences" )
126
+ @ TargetClass (className = "java.util.prefs.FileSystemPreferences" , onlyWith = IsJavaUtilPrefsPresent . class )
126
127
final class Target_java_util_prefs_FileSystemPreferences {
127
128
@ Delete
128
129
private static native int [] lockFile0 (String fileName , int permission , boolean shared );
@@ -134,6 +135,14 @@ final class Target_java_util_prefs_FileSystemPreferences {
134
135
private static native int chmod (String fileName , int permission );
135
136
}
136
137
138
+ final class IsJavaUtilPrefsPresent implements BooleanSupplier {
139
+ @ Override
140
+ public boolean getAsBoolean () {
141
+ var prefsMod = ModuleLayer .boot ().findModule ("java.prefs" );
142
+ return prefsMod .isPresent ();
143
+ }
144
+ }
145
+
137
146
/**
138
147
* Not used in native image and has linker errors with XCode 13. Can be removed in the future when
139
148
* XCode 14 becomes omnipresent.
0 commit comments