Skip to content

Commit 7cb97bd

Browse files
committed
Use several specific packages instead of one general when initializing at buildtime
1 parent 200e536 commit 7cb97bd

File tree

7 files changed

+47
-11
lines changed

7 files changed

+47
-11
lines changed

common/junit-platform-native/src/main/java/org/graalvm/junit/platform/JUnitPlatformFeature.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import org.graalvm.junit.platform.config.core.PluginConfigProvider;
4545
import org.graalvm.nativeimage.ImageSingletons;
4646
import org.graalvm.nativeimage.hosted.Feature;
47-
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
4847
import org.graalvm.nativeimage.hosted.RuntimeReflection;
4948

5049
import org.junit.platform.engine.DiscoverySelector;
@@ -100,13 +99,6 @@ public void duringSetup(DuringSetupAccess access) {
10099

101100
@Override
102101
public void beforeAnalysis(BeforeAnalysisAccess access) {
103-
/* Before GraalVM version 22 we couldn't have classes initialized at run-time
104-
that are also used at build-time but not added to the image heap */
105-
if (Runtime.version().feature() <= 21) {
106-
RuntimeClassInitialization.initializeAtBuildTime("org.junit");
107-
RuntimeClassInitialization.initializeAtBuildTime("java");
108-
}
109-
110102
List<? extends DiscoverySelector> selectors = getSelectors();
111103
registerTestClassesForReflection(selectors);
112104

common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/core/PluginConfigProvider.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@
4141

4242
package org.graalvm.junit.platform.config.core;
4343

44+
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
45+
46+
import java.util.List;
47+
4448
public abstract class PluginConfigProvider {
4549

4650
protected ClassLoader applicationClassLoader;
@@ -55,4 +59,10 @@ public final void initialize(ClassLoader classLoader, NativeImageConfiguration n
5559
applicationClassLoader = classLoader;
5660
nativeImageConfigImpl = nic;
5761
}
62+
63+
protected void initializeClassesForOlderJDKs(List<String> packages) {
64+
if (Runtime.version().feature() <= 21) {
65+
packages.forEach(RuntimeClassInitialization::initializeAtBuildTime);
66+
}
67+
}
5868
}

common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/jupiter/JupiterConfigProvider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import org.graalvm.junit.platform.config.core.NativeImageConfiguration;
4545
import org.graalvm.junit.platform.config.core.PluginConfigProvider;
4646
import org.graalvm.junit.platform.config.util.AnnotationUtils;
47+
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
4748
import org.junit.jupiter.api.DisplayNameGeneration;
4849
import org.junit.jupiter.api.IndicativeSentencesGeneration;
4950
import org.junit.jupiter.api.TestMethodOrder;
@@ -65,8 +66,18 @@
6566

6667
public class JupiterConfigProvider extends PluginConfigProvider {
6768

69+
/* Before GraalVM version 22 we couldn't have classes initialized at run-time
70+
that are also used at build-time but not added to the image heap */
71+
private final List<String> packagesForOldInitializationStrategy = List.of(
72+
"org.junit.jupiter.engine",
73+
"org.junit.jupiter.api",
74+
"org.junit.jupiter.params",
75+
"java.beans.Introspector");
76+
6877
@Override
6978
public void onLoad(NativeImageConfiguration config) {
79+
initializeClassesForOlderJDKs(packagesForOldInitializationStrategy);
80+
7081
/* Provide support for Timeout annotation */
7182
config.registerAllClassMembersForReflection(
7283
"org.junit.jupiter.engine.extension.TimeoutExtension$ExecutorResource",

common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/platform/PlatformConfigProvider.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,22 @@
4646
import org.graalvm.nativeimage.hosted.RuntimeSerialization;
4747
import org.junit.platform.launcher.TestIdentifier;
4848

49+
import java.util.List;
50+
4951

5052
public class PlatformConfigProvider extends PluginConfigProvider {
5153

54+
/* Before GraalVM version 22 we couldn't have classes initialized at run-time
55+
that are also used at build-time but not added to the image heap */
56+
private final List<String> packagesForOldInitializationStrategy = List.of(
57+
"org.junit.platform.engine",
58+
"org.junit.platform.launcher",
59+
"org.junit.platform.commons",
60+
"org.junit.validator.PublicClassValidator");
61+
5262
@Override
5363
public void onLoad(NativeImageConfiguration config) {
64+
initializeClassesForOlderJDKs(packagesForOldInitializationStrategy);
5465
RuntimeSerialization.register(TestIdentifier.class.getDeclaredClasses());
5566
}
5667

common/junit-platform-native/src/main/java/org/graalvm/junit/platform/config/vintage/VintageConfigProvider.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,28 @@
4343

4444
import org.graalvm.junit.platform.config.core.NativeImageConfiguration;
4545
import org.graalvm.junit.platform.config.core.PluginConfigProvider;
46+
import org.graalvm.nativeimage.hosted.RuntimeClassInitialization;
4647
import org.graalvm.nativeimage.hosted.RuntimeReflection;
4748
import org.graalvm.nativeimage.hosted.RuntimeSerialization;
4849

4950
import java.lang.annotation.Annotation;
5051
import java.lang.reflect.Method;
52+
import java.util.List;
5153

5254
public class VintageConfigProvider extends PluginConfigProvider {
5355

56+
/* Before GraalVM version 22 we couldn't have classes initialized at run-time
57+
that are also used at build-time but not added to the image heap */
58+
private final List<String> packagesForOldInitializationStrategy = List.of(
59+
"org.junit.vintage.engine",
60+
"org.junit.runner",
61+
"org.junit.runners",
62+
"org.junit.internal.runners.rules.RuleMemberValidator");
63+
5464
@Override
5565
public void onLoad(NativeImageConfiguration config) {
66+
initializeClassesForOlderJDKs(packagesForOldInitializationStrategy);
67+
5668
try {
5769
RuntimeSerialization.register(Class.forName("org.junit.runner.Result").getDeclaredClasses());
5870
RuntimeReflection.register(Class.forName("org.junit.runner.Description").getDeclaredFields());
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
native.gradle.plugin.version = 0.10.6-SNAPSHOT
1+
native.gradle.plugin.version = 0.10.7-SNAPSHOT

samples/junit-tests/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,8 @@
5252
<java.version>1.8</java.version>
5353
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
5454
<junit.jupiter.version>5.11.0</junit.jupiter.version>
55-
<native.maven.plugin.version>0.10.6-SNAPSHOT</native.maven.plugin.version>
56-
<junit.platform.native.version>0.10.6-SNAPSHOT</junit.platform.native.version>
55+
<native.maven.plugin.version>0.10.7-SNAPSHOT</native.maven.plugin.version>
56+
<junit.platform.native.version>0.10.7-SNAPSHOT</junit.platform.native.version>
5757
<imageName>example-app</imageName>
5858
</properties>
5959

0 commit comments

Comments
 (0)