diff --git a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ModuleOptionsTests.java b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ModuleOptionsTests.java index dd80bbde6d..5a33700281 100644 --- a/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ModuleOptionsTests.java +++ b/org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ModuleOptionsTests.java @@ -25,6 +25,7 @@ import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.debug.tests.AbstractDebugTest; +import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jdt.launching.JavaRuntime; public class ModuleOptionsTests extends AbstractDebugTest { @@ -112,8 +113,9 @@ private int indexOfJREContainer(IClasspathEntry[] rawClasspath) { return -1; } - public void testAddModules1() throws JavaModelException { + public void testAddModules1() throws Exception { IJavaProject javaProject = getProjectContext(); + checkVMInstall(javaProject); List defaultModules = getDefaultModules(javaProject); defaultModules.add("jdk.crypto.cryptoki"); // requires jdk.crypto.ec up to Java 21 try { @@ -135,8 +137,9 @@ public void testAddModules1() throws JavaModelException { } } - public void testLimitModules_release9() throws CoreException { + public void testLimitModules_release9() throws Exception { IJavaProject javaProject = getProjectContext(); + checkVMInstall(javaProject); try { javaProject.setOption(JavaCore.COMPILER_RELEASE, JavaCore.ENABLED); List defaultModules = getDefaultModules(javaProject); @@ -153,7 +156,7 @@ public void testLimitModules_release9() throws CoreException { + "jdk.net," // + "jdk.nio.mapmode," // // + "jdk.packager,jdk.packager.services,jdk.plugin.dom," - // + "jdk.scripting.nashorn," + // + "jdk.scripting.nashorn," + "jdk.sctp," + "jdk.security.auth,jdk.security.jgss,jdk.unsupported," // + "jdk.unsupported.desktop,jdk.xml.dom"; @@ -178,8 +181,10 @@ public void testLimitModules_release9() throws CoreException { } } - public void testLimitModules1() throws JavaModelException { + public void testLimitModules1() throws Exception { IJavaProject javaProject = getProjectContext(); + javaProject.setOption(JavaCore.COMPILER_RELEASE, JavaCore.DISABLED); + checkVMInstall(javaProject); List defaultModules = getDefaultModules(javaProject); String expectedModules; String moduleList = String.join(",", defaultModules); @@ -218,4 +223,10 @@ public void testLimitModules1() throws JavaModelException { removeClasspathAttributesFromSystemLibrary(javaProject); } } + + private void checkVMInstall(IJavaProject javaProject) throws CoreException { + IVMInstall vm = JavaRuntime.getVMInstall(javaProject); + assertTrue("Expected at least Java 21 for project JVM but got: " + vm.getName() + ", with location: " + + vm.getInstallLocation(), JavaRuntime.compareJavaVersions(vm, JavaCore.VERSION_21) >= 0); + } } diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DetectVMInstallationsJob.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DetectVMInstallationsJob.java index ba3d8568fa..13f94e9a2d 100644 --- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DetectVMInstallationsJob.java +++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/DetectVMInstallationsJob.java @@ -33,6 +33,7 @@ import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.InstanceScope; +import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin; import org.eclipse.jdt.launching.IVMInstall; import org.eclipse.jdt.launching.IVMInstall2; import org.eclipse.jdt.launching.IVMInstallType; @@ -320,9 +321,13 @@ public static void initialize() { // early exit no need to read preferences or check env variable! return; } - if (System.getProperty(PROPERTY_DETECT_VM_INSTALLATIONS_JOB_DISABLED) == null && Boolean.parseBoolean(System.getenv(ENV_CI))) { - // exit because no explicit value for the property was given and we are running in a CI environment - return; + boolean ci = false; + if (System.getProperty(PROPERTY_DETECT_VM_INSTALLATIONS_JOB_DISABLED) == null) { + ci = Boolean.parseBoolean(System.getenv(ENV_CI)); + if (ci) { + // exit because no explicit value for the property was given and we are running in a CI environment + return; + } } // finally look what is defined in the preferences IEclipsePreferences instanceNode = InstanceScope.INSTANCE.getNode(LaunchingPlugin.getDefault().getBundle().getSymbolicName()); @@ -330,6 +335,10 @@ public static void initialize() { boolean defaultValue = defaultNode.getBoolean(LaunchingPlugin.PREF_DETECT_VMS_AT_STARTUP, true); if (instanceNode.getBoolean(LaunchingPlugin.PREF_DETECT_VMS_AT_STARTUP, defaultValue)) { new DetectVMInstallationsJob().schedule(); + if (ci) { + // log that this job will run in a CI environment + JDIDebugPlugin.log(Status.info("DetectVMInstallationsJob scheduled")); //$NON-NLS-1$ + } } }