Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,31 +9,39 @@
* @since 2.14
*/
public class NativeImageUtil {
private static final boolean RUNNING_IN_SVM;

static {
RUNNING_IN_SVM = System.getProperty("org.graalvm.nativeimage.imagecode") != null;
}

private static final boolean RUNNING_IN_SVM = System.getProperty("org.graalvm.nativeimage.imagecode") != null;

private NativeImageUtil() {
}

/**
* Check whether we're running in substratevm native image runtime mode.
* This check cannot be a constant, because
* Check whether we're running in SubstrateVM native image and also in "runtime" mode.
* The "runtime" check cannot be a constant, because
* the static initializer may run early during build time
*<p>
* NOTE: {@code public} since 2.16 (before that, {@code private}).
* As optimization, {@link #RUNNING_IN_SVM} is used to short-circuit on normal JVMs.
*/
public static boolean isRunningInNativeImage() {
private static boolean isInNativeImageAndIsAtRuntime() {
return RUNNING_IN_SVM && "runtime".equals(System.getProperty("org.graalvm.nativeimage.imagecode"));
}

/**
* Checks whether we're running in SubstrateVM native image <b>only by the presence</b> of
* {@code "org.graalvm.nativeimage.imagecode"} system property, regardless of its value (buildtime or runtime).
* We are irrespective of the build or runtime phase, because native-image can initialize static initializers at build time.
*<p>
* @since 2.16
*/
public static boolean isInNativeImage() {
return RUNNING_IN_SVM;
}

/**
* Check whether the given error is a substratevm UnsupportedFeatureError
*/
public static boolean isUnsupportedFeatureError(Throwable e) {
if (!isRunningInNativeImage()) {
if (!isInNativeImageAndIsAtRuntime()) {
return false;
}
if (e instanceof InvocationTargetException) {
Expand All @@ -47,7 +55,7 @@ public static boolean isUnsupportedFeatureError(Throwable e) {
* members visible in reflection).
*/
public static boolean needsReflectionConfiguration(Class<?> cl) {
if (!isRunningInNativeImage()) {
if (!isInNativeImageAndIsAtRuntime()) {
return false;
}
// records list their fields but not other members
Expand Down