Skip to content

Commit afba8d6

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

2 files changed

Lines changed: 69 additions & 11 deletions

File tree

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

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,15 +128,21 @@
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.classfmt.ClassFileConstants;
132+
import org.eclipse.jdt.internal.compiler.impl.CompilerOptions;
133+
import org.eclipse.jdt.internal.debug.core.JDIDebugPlugin;
131134
import org.eclipse.jdt.internal.debug.core.model.JDIDebugTarget;
132135
import org.eclipse.jdt.internal.debug.eval.ast.engine.ASTEvaluationEngine;
133136
import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
134137
import org.eclipse.jdt.internal.debug.ui.IJDIPreferencesConstants;
135138
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
136139
import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
137140
import org.eclipse.jdt.launching.IVMInstall;
141+
import org.eclipse.jdt.launching.IVMInstallChangedListener;
138142
import org.eclipse.jdt.launching.JavaRuntime;
143+
import org.eclipse.jdt.launching.PropertyChangeEvent;
139144
import org.eclipse.jdt.launching.environments.IExecutionEnvironment;
145+
import org.eclipse.jdt.launching.environments.IExecutionEnvironmentsManager;
140146
import org.eclipse.jface.dialogs.ErrorDialog;
141147
import org.eclipse.jface.dialogs.MessageDialogWithToggle;
142148
import org.eclipse.jface.preference.IPreferenceStore;
@@ -170,6 +176,8 @@
170176
@SuppressWarnings("deprecation")
171177
public abstract class AbstractDebugTest extends TestCase implements IEvaluationListener {
172178

179+
private static boolean setupFirstTest = false;
180+
173181
public static final String MULTI_OUTPUT_PROJECT_NAME = "MultiOutput";
174182
public static final String BOUND_EE_PROJECT_NAME = "BoundEE";
175183
public static final String ONE_FOUR_PROJECT_NAME = "DebugTests";
@@ -264,6 +272,12 @@ public AbstractDebugTest(String name) {
264272

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

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)