Skip to content

Commit f02099e

Browse files
committed
Log VM install changes during JDT debug tests, set default VM for execution environments
See: #782
1 parent 9ba1b48 commit f02099e

2 files changed

Lines changed: 67 additions & 11 deletions

File tree

org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/AbstractDebugTest.java

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,20 @@
128128
import org.eclipse.jdt.debug.tests.core.LiteralTests17;
129129
import org.eclipse.jdt.debug.tests.refactoring.MemberParser;
130130
import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
131+
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
132+
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
131133
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
132134
import org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine;
133135
import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
134136
import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
135137
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
136138
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
137139
import org.eclipse.jdt.launching.IVMInstall;
140+
import org.eclipse.jdt.launching.IVMInstallChangedListener;
138141
import org.eclipse.jdt.launching.JavaRuntime;
142+
import org.eclipse.jdt.launching.PropertyChangeEvent;
139143
import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
144+
import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
140145
import org.eclipse.jface.dialogs.ErrorDialog;
141146
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
142147
import org.eclipse.jface.preference.IPreferenceStore;
@@ -170,6 +175,8 @@
170175
@SuppressWarnings("deprecation")
171176
public abstract class AbstractDebugTest extends TestCase implements IEvaluationListener {
172177

178+
private static boolean setupFirstTest = false;
179+
173180
public static final String MULTI_OUTPUT_PROJECT_NAME = "MultiOutput";
174181
public static final String BOUND_EE_PROJECT_NAME = "BoundEE";
175182
public static final String ONE_FOUR_PROJECT_NAME = "DebugTests";
@@ -264,6 +271,12 @@ public AbstractDebugTest(String name) {
264271

265272
@Override
266273
protected void setUp() throws Exception {
274+
if (!setupFirstTest) {
275+
TestUtil.logInfo("SETTING UP TESTS");
276+
setExecutionEnvironments();
277+
JavaRuntime.addVMInstallChangedListener(new LogVMInstallChanges());
278+
setupFirstTest = true;
279+
}
267280
TestUtil.logInfo("SETUP " + getClass().getSimpleName() + "." + getName());
268281
super.setUp();
269282
setPreferences();
@@ -3090,4 +3103,58 @@ private static String toString(Collection<IMarker> markers) {
30903103
public interface StackFrameSupplier {
30913104
IJavaStackFrame get() throws Exception;
30923105
}
3106+
3107+
private static void setExecutionEnvironments() {
3108+
IVMInstall vm = JavaRuntime.getDefaultVMInstall();
3109+
TestUtil.logInfo("Default VM is \"" + vm.getName() + "\"");
3110+
String javaSEPrefix = "JavaSE-";
3111+
IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
3112+
IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
3113+
List<String> versions = new ArrayList<>();
3114+
for (IExecutionEnvironment environment : environments) {
3115+
String id = environment.getId();
3116+
if (id.startsWith(javaSEPrefix)) {
3117+
String version = id.substring(javaSEPrefix.length());
3118+
long jdkLevel = CompilerOptions.versionToJdkLevel(version, false);
3119+
if (jdkLevel != 0 && JavaRuntime.compareJavaVersions(vm, version) >= 0) {
3120+
environment.setDefaultVM(vm);
3121+
versions.add(environment.getId());
3122+
}
3123+
}
3124+
}
3125+
if (!versions.isEmpty()) {
3126+
TestUtil.logInfo("Set VM \"" + vm.getName() + "\" for execution environments: " + versions);
3127+
}
3128+
}
3129+
3130+
private static void logVMChange(String message, IVMInstall vm) {
3131+
IStatus status = new Status(IStatus.INFO, JDIDebugPlugin.getUniqueIdentifier(),
3132+
message + " " + vm.getName() + ", location: " + vm.getInstallLocation(),
3133+
new RuntimeException("strack trace info"));
3134+
JDIDebugPlugin.log(status);
3135+
}
3136+
3137+
private static class LogVMInstallChanges implements IVMInstallChangedListener {
3138+
3139+
@Override
3140+
public void vmRemoved(IVMInstall vm) {
3141+
logVMChange("VM removed", vm);
3142+
}
3143+
3144+
@Override
3145+
public void vmChanged(PropertyChangeEvent event) {
3146+
}
3147+
3148+
@Override
3149+
public void vmAdded(IVMInstall vm) {
3150+
logVMChange("VM added", vm);
3151+
3152+
}
3153+
3154+
@Override
3155+
public void defaultVMInstallChanged(IVMInstall previous, IVMInstall current) {
3156+
logVMChange("Default VM changed", current);
3157+
}
3158+
3159+
}
30933160
}

org.eclipse.jdt.debug.tests/tests/org/eclipse/jdt/debug/tests/core/ModuleOptionsTests.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,13 @@
1717
import java.util.Arrays;
1818
import java.util.List;
1919

20-
import org.eclipse.core.runtime.CoreException;
2120
import org.eclipse.debug.core.ILaunchConfiguration;
2221
import org.eclipse.jdt.core.IClasspathAttribute;
2322
import org.eclipse.jdt.core.IClasspathEntry;
2423
import org.eclipse.jdt.core.IJavaProject;
2524
import org.eclipse.jdt.core.JavaCore;
2625
import org.eclipse.jdt.core.JavaModelException;
2726
import org.eclipse.jdt.debug.tests.AbstractDebugTest;
28-
import org.eclipse.jdt.launching.IVMInstall;
2927
import org.eclipse.jdt.launching.JavaRuntime;
3028

3129
public class ModuleOptionsTests extends AbstractDebugTest {
@@ -115,7 +113,6 @@ private int indexOfJREContainer(IClasspathEntry[] rawClasspath) {
115113

116114
public void testAddModules1() throws Exception {
117115
IJavaProject javaProject = getProjectContext();
118-
checkVMInstall(javaProject);
119116
List<String> defaultModules = getDefaultModules(javaProject);
120117
defaultModules.add("jdk.crypto.cryptoki"); // requires jdk.crypto.ec up to Java 21
121118
try {
@@ -139,7 +136,6 @@ public void testAddModules1() throws Exception {
139136

140137
public void testLimitModules_release9() throws Exception {
141138
IJavaProject javaProject = getProjectContext();
142-
checkVMInstall(javaProject);
143139
try {
144140
javaProject.setOption(JavaCore.COMPILER_RELEASE, JavaCore.ENABLED);
145141
List<String> defaultModules = getDefaultModules(javaProject);
@@ -184,7 +180,6 @@ public void testLimitModules_release9() throws Exception {
184180
public void testLimitModules1() throws Exception {
185181
IJavaProject javaProject = getProjectContext();
186182
javaProject.setOption(JavaCore.COMPILER_RELEASE, JavaCore.DISABLED);
187-
checkVMInstall(javaProject);
188183
List<String> defaultModules = getDefaultModules(javaProject);
189184
String expectedModules;
190185
String moduleList = String.join(",", defaultModules);
@@ -223,10 +218,4 @@ public void testLimitModules1() throws Exception {
223218
removeClasspathAttributesFromSystemLibrary(javaProject);
224219
}
225220
}
226-
227-
private void checkVMInstall(IJavaProject javaProject) throws CoreException {
228-
IVMInstall vm = JavaRuntime.getVMInstall(javaProject);
229-
assertTrue("Expected at least Java 21 for project JVM but got: " + vm.getName() + ", with location: "
230-
+ vm.getInstallLocation(), JavaRuntime.compareJavaVersions(vm, JavaCore.VERSION_21) >= 0);
231-
}
232221
}

0 commit comments

Comments
 (0)