Skip to content

Commit f4b06d5

Browse files
committed
Avoid getting the GraalVM version at deployment time for AWT
1 parent aea9c27 commit f4b06d5

File tree

4 files changed

+32
-22
lines changed

4 files changed

+32
-22
lines changed

core/runtime/src/main/java/io/quarkus/runtime/util/JavaVersionUtil.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public class JavaVersionUtil {
1212
private static boolean IS_GRAALVM_JDK;
1313
private static boolean IS_JAVA_16_OR_OLDER;
1414
private static boolean IS_JAVA_17_OR_NEWER;
15+
private static boolean IS_JAVA_19_OR_NEWER;
1516

1617
static {
1718
performChecks();
@@ -26,11 +27,13 @@ static void performChecks() {
2627
IS_JAVA_13_OR_NEWER = (first >= 13);
2728
IS_JAVA_16_OR_OLDER = (first <= 16);
2829
IS_JAVA_17_OR_NEWER = (first >= 17);
30+
IS_JAVA_19_OR_NEWER = (first >= 19);
2931
} else {
3032
IS_JAVA_11_OR_NEWER = false;
3133
IS_JAVA_13_OR_NEWER = false;
3234
IS_JAVA_16_OR_OLDER = false;
3335
IS_JAVA_17_OR_NEWER = false;
36+
IS_JAVA_19_OR_NEWER = false;
3437
}
3538

3639
String vmVendor = System.getProperty("java.vm.vendor");
@@ -53,6 +56,10 @@ public static boolean isJava17OrHigher() {
5356
return IS_JAVA_17_OR_NEWER;
5457
}
5558

59+
public static boolean isJava19OrHigher() {
60+
return IS_JAVA_19_OR_NEWER;
61+
}
62+
5663
public static boolean isGraalvmJdk() {
5764
return IS_GRAALVM_JDK;
5865
}

extensions/awt/deployment/src/main/java/io/quarkus/awt/deployment/AwtProcessor.java

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.quarkus.awt.deployment;
22

33
import static io.quarkus.deployment.builditem.nativeimage.UnsupportedOSBuildItem.Os.WINDOWS;
4-
import static io.quarkus.deployment.pkg.steps.GraalVM.Version.CURRENT;
54

65
import java.util.ArrayList;
76
import java.util.List;
@@ -26,9 +25,7 @@
2625
import io.quarkus.deployment.pkg.builditem.NativeImageRunnerBuildItem;
2726
import io.quarkus.deployment.pkg.builditem.ProcessInheritIODisabled;
2827
import io.quarkus.deployment.pkg.builditem.ProcessInheritIODisabledBuildItem;
29-
import io.quarkus.deployment.pkg.steps.GraalVM;
3028
import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild;
31-
import io.quarkus.deployment.pkg.steps.NoopNativeImageBuildRunner;
3229

3330
class AwtProcessor {
3431

@@ -128,12 +125,6 @@ JniRuntimeAccessBuildItem setupJava2DClasses(NativeImageRunnerBuildItem nativeIm
128125
Optional<ProcessInheritIODisabledBuildItem> processInheritIODisabledBuildItem) {
129126
nativeImageRunnerBuildItem.getBuildRunner()
130127
.setup(processInheritIODisabled.isPresent() || processInheritIODisabledBuildItem.isPresent());
131-
final GraalVM.Version v;
132-
if (nativeImageRunnerBuildItem.getBuildRunner() instanceof NoopNativeImageBuildRunner) {
133-
v = CURRENT;
134-
} else {
135-
v = nativeImageRunnerBuildItem.getBuildRunner().getGraalVMVersion();
136-
}
137128
final List<String> classes = new ArrayList<>();
138129
classes.add("com.sun.imageio.plugins.jpeg.JPEGImageReader");
139130
classes.add("com.sun.imageio.plugins.jpeg.JPEGImageWriter");
@@ -258,18 +249,11 @@ JniRuntimeAccessBuildItem setupJava2DClasses(NativeImageRunnerBuildItem nativeIm
258249
// A new way of dynamically loading shared objects instead
259250
// of baking in static libs: https://github.com/oracle/graal/issues/4921
260251
classes.add("sun.awt.X11FontManager");
261-
if (v.javaVersion.feature() != 19) {
262-
classes.add("java.awt.GraphicsEnvironment");
263-
classes.add("sun.awt.X11GraphicsConfig");
264-
classes.add("sun.awt.X11GraphicsDevice");
265-
classes.add("sun.java2d.SunGraphicsEnvironment");
266-
classes.add("sun.java2d.xr.XRSurfaceData");
267-
}
268-
269-
// Added for JDK 19+ due to: https://github.com/openjdk/jdk20/commit/9bc023220 calling FontUtilities
270-
if (v.jdkVersionGreaterOrEqualTo("19")) {
271-
classes.add("sun.font.FontUtilities");
272-
}
252+
classes.add("java.awt.GraphicsEnvironment");
253+
classes.add("sun.awt.X11GraphicsConfig");
254+
classes.add("sun.awt.X11GraphicsDevice");
255+
classes.add("sun.java2d.SunGraphicsEnvironment");
256+
classes.add("sun.java2d.xr.XRSurfaceData");
273257

274258
return new JniRuntimeAccessBuildItem(true, true, true, classes.toArray(new String[0]));
275259
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package io.quarkus.awt.runtime.graal;
2+
3+
import io.quarkus.runtime.util.JavaVersionUtil;
4+
import org.graalvm.nativeimage.hosted.Feature;
5+
import org.graalvm.nativeimage.hosted.RuntimeJNIAccess;
6+
7+
public class AwtFeature implements Feature {
8+
@Override
9+
public void afterRegistration(AfterRegistrationAccess access) {
10+
// Added for JDK 19+ due to: https://github.com/openjdk/jdk20/commit/9bc023220 calling FontUtilities
11+
if (JavaVersionUtil.isJava19OrHigher()) {
12+
try {
13+
RuntimeJNIAccess.register(Class.forName("sun.font.FontUtilities"));
14+
} catch (ClassNotFoundException e) {
15+
throw new RuntimeException(e);
16+
}
17+
}
18+
}
19+
}

extensions/awt/runtime/src/main/java/io/quarkus/awt/runtime/graal/DarwinAwtFeature.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,4 @@ public void afterRegistration(AfterRegistrationAccess access) {
1616
RuntimeClassInitialization.initializeAtRunTime("sun.lwawt.macosx");
1717
}
1818
}
19-
}
19+
}

0 commit comments

Comments
 (0)