Skip to content

Commit 25dffe1

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

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

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

Lines changed: 89 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,10 @@
170175
@SuppressWarnings("deprecation")
171176
public abstract class AbstractDebugTest extends TestCase implements IEvaluationListener {
172177

178+
private static final String JAVASE_PREFIX = "JavaSE-";
179+
180+
private static boolean setupFirstTest = false;
181+
173182
public static final String MULTI_OUTPUT_PROJECT_NAME = "MultiOutput";
174183
public static final String BOUND_EE_PROJECT_NAME = "BoundEE";
175184
public static final String ONE_FOUR_PROJECT_NAME = "DebugTests";
@@ -264,6 +273,12 @@ public AbstractDebugTest(String name) {
264273

265274
@Override
266275
protected void setUp() throws Exception {
276+
if (!setupFirstTest) {
277+
setupFirstTest = true;
278+
TestUtil.logInfo("SETTING UP TESTS");
279+
JavaRuntime.addVMInstallChangedListener(new LogVMInstallChanges());
280+
setExecutionEnvironmentDefaults();
281+
}
267282
TestUtil.logInfo("SETUP " + getClass().getSimpleName() + "." + getName());
268283
super.setUp();
269284
setPreferences();
@@ -3090,4 +3105,78 @@ private static String toString(Collection<IMarker> markers) {
30903105
public interface StackFrameSupplier {
30913106
IJavaStackFrame get() throws Exception;
30923107
}
3108+
3109+
/**
3110+
* Sets 'JavaSE-N' execution environment default VMs to the default VM install.
3111+
*/
3112+
protected static void setExecutionEnvironmentDefaults() {
3113+
IVMInstall vm = JavaRuntime.getDefaultVMInstall();
3114+
TestUtil.logInfo("Default VM is \"" + vm.getName() + "\"");
3115+
IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
3116+
IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
3117+
List<String> versions = new ArrayList<>();
3118+
for (IExecutionEnvironment environment : environments) {
3119+
String id = environment.getId();
3120+
if (id.startsWith(JAVASE_PREFIX)) {
3121+
String version = id.substring(JAVASE_PREFIX.length());
3122+
long jdkLevel = CompilerOptions.versionToJdkLevel(version, false);
3123+
if (jdkLevel != 0 && JavaRuntime.compareJavaVersions(vm, version) >= 0) {
3124+
environment.setDefaultVM(vm);
3125+
versions.add(environment.getId());
3126+
}
3127+
}
3128+
}
3129+
if (!versions.isEmpty()) {
3130+
TestUtil.logInfo("Set VM \"" + vm.getName() + "\" for execution environments: " + versions);
3131+
}
3132+
}
3133+
3134+
/**
3135+
* Removes the default VM install of 'JavaSE-N' execution environments.
3136+
*/
3137+
protected static void clearExecutionEnvironmentDefaults() {
3138+
IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
3139+
IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
3140+
List<String> versions = new ArrayList<>();
3141+
for (IExecutionEnvironment environment : environments) {
3142+
String id = environment.getId();
3143+
if (id.startsWith(JAVASE_PREFIX)) {
3144+
environment.setDefaultVM(null);
3145+
String version = id.substring(JAVASE_PREFIX.length());
3146+
versions.add(version);
3147+
}
3148+
}
3149+
TestUtil.logInfo("Cleared default VM for execution environments: " + versions);
3150+
}
3151+
3152+
private static void logVMChange(String message, IVMInstall vm) {
3153+
IStatus status = new Status(IStatus.INFO, JDIDebugPlugin.getUniqueIdentifier(),
3154+
message + " " + vm.getName() + ", location: " + vm.getInstallLocation(),
3155+
new RuntimeException("strack trace info"));
3156+
JDIDebugPlugin.log(status);
3157+
}
3158+
3159+
private static class LogVMInstallChanges implements IVMInstallChangedListener {
3160+
3161+
@Override
3162+
public void vmRemoved(IVMInstall vm) {
3163+
logVMChange("VM removed", vm);
3164+
}
3165+
3166+
@Override
3167+
public void vmChanged(PropertyChangeEvent event) {
3168+
}
3169+
3170+
@Override
3171+
public void vmAdded(IVMInstall vm) {
3172+
logVMChange("VM added", vm);
3173+
3174+
}
3175+
3176+
@Override
3177+
public void defaultVMInstallChanged(IVMInstall previous, IVMInstall current) {
3178+
logVMChange("Default VM changed", current);
3179+
}
3180+
3181+
}
30933182
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ public void testLimitModules1() throws Exception {
225225
}
226226

227227
private void checkVMInstall(IJavaProject javaProject) throws CoreException {
228+
IVMInstall defaultVm = JavaRuntime.getDefaultVMInstall();
228229
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);
230+
assertEquals("Expected default VM but got: " + vm.getInstallLocation(), defaultVm.getName(), vm.getName());
231231
}
232232
}

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ public MultiReleaseLaunchTests(String name) {
6262
@Override
6363
protected void setUp() throws Exception {
6464
super.setUp();
65+
clearExecutionEnvironmentDefaults();
6566
final Set<File> existingLocations = new HashSet<>();
6667
List<RequiredJavaVersion> requiredJavaVersions = new ArrayList<>(List.of(JAVA_11, JAVA_17, JAVA_21));
6768
removeExistingJavaVersions(requiredJavaVersions, existingLocations);
@@ -104,6 +105,7 @@ private void matchInstallationsFrom(final File rootDir, List<RequiredJavaVersion
104105
protected void tearDown() throws Exception {
105106
super.tearDown();
106107
disposeVms.forEach(Runnable::run);
108+
setExecutionEnvironmentDefaults();
107109
}
108110

109111
@Override

0 commit comments

Comments
 (0)