Bug 522395 - [9][JUnit] Cannot run JUnit tests with JDK 9
Change-Id: I4456e184c7ceee62e6259735ea3f7ba252e9a0db
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaDependenciesTab.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaDependenciesTab.java
index 1be1f71..d351777 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaDependenciesTab.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/debug/ui/launchConfigurations/JavaDependenciesTab.java
@@ -259,7 +259,7 @@
fModel.addEntry(DependencyModel.MODULE_PATH, entry);
break;
default:
- if (JavaRuntime.isModule(entry.getClasspathEntry())) {
+ if (JavaRuntime.isModule(entry.getClasspathEntry(), JavaRuntime.getJavaProject(configuration))) {
fModel.addEntry(DependencyModel.MODULE_PATH, entry);
} else {
fModel.addEntry(DependencyModel.CLASS_PATH, entry);
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
index 055c424..e67fdb5 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/StandardVMDebugger.java
@@ -223,7 +223,7 @@
arguments.add(convertClassPath(cp));
}
- if (isModular(config, fVMInstance) && (mp != null && mp.length > 0)) {
+ if (isModular(config, fVMInstance)) {
arguments.add("-m"); //$NON-NLS-1$
arguments.add(config.getModuleDescription() + "/" + config.getClassToLaunch()); //$NON-NLS-1$
} else {
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
index 0328af3..de756bc 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/JavaRuntime.java
@@ -62,8 +62,10 @@
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaModel;
import org.eclipse.jdt.core.IJavaProject;
+import org.eclipse.jdt.core.IModuleDescription;
import org.eclipse.jdt.core.IPackageFragmentRoot;
import org.eclipse.jdt.core.JavaCore;
+import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.launching.CompositeId;
import org.eclipse.jdt.internal.launching.DefaultEntryResolver;
import org.eclipse.jdt.internal.launching.DefaultProjectClasspathEntry;
@@ -766,7 +768,7 @@
* @since 3.9
*/
public static IRuntimeClasspathEntry newRuntimeContainerClasspathEntry(IClasspathEntry entry, IJavaProject project) {
- RuntimeClasspathEntry runTimeEntry = new RuntimeClasspathEntry(entry, isModule(entry) ? IRuntimeClasspathEntry.MODULE_PATH
+ RuntimeClasspathEntry runTimeEntry = new RuntimeClasspathEntry(entry, isModule(entry, project) ? IRuntimeClasspathEntry.MODULE_PATH
: IRuntimeClasspathEntry.CLASS_PATH);
runTimeEntry.setJavaProject(project);
return runTimeEntry;
@@ -903,8 +905,13 @@
public static IRuntimeClasspathEntry[] computeUnresolvedRuntimeDependencies(IJavaProject project) throws CoreException {
IClasspathEntry[] entries = project.getResolvedClasspath(true);
List<IRuntimeClasspathEntry> classpathEntries = new ArrayList<>(3);
+
IClasspathEntry entry1 = JavaCore.newProjectEntry(project.getProject().getFullPath());
- classpathEntries.add(new RuntimeClasspathEntry(entry1, IRuntimeClasspathEntry.MODULE_PATH));
+ if (isModularProject(project)) {
+ classpathEntries.add(new RuntimeClasspathEntry(entry1, IRuntimeClasspathEntry.MODULE_PATH));
+ } else {
+ classpathEntries.add(new RuntimeClasspathEntry(entry1, IRuntimeClasspathEntry.CLASS_PATH));
+ }
for (int i = 0; i < entries.length; i++) {
IClasspathEntry entry = entries[i];
switch (entry.getEntryKind()) {
@@ -916,14 +923,14 @@
// don't look at application entries
break;
case IClasspathContainer.K_DEFAULT_SYSTEM:
- if (isModule(entry)) {
+ if (isModule(entry, project)) {
classpathEntries.add(newRuntimeContainerClasspathEntry(container.getPath(), IRuntimeClasspathEntry.MODULE_PATH, project));
} else {
classpathEntries.add(newRuntimeContainerClasspathEntry(container.getPath(), IRuntimeClasspathEntry.CLASS_PATH, project));
}
break;
case IClasspathContainer.K_SYSTEM:
- if (isModule(entry)) {
+ if (isModule(entry, project)) {
classpathEntries.add(newRuntimeContainerClasspathEntry(container.getPath(), IRuntimeClasspathEntry.MODULE_PATH, project));
} else {
classpathEntries.add(newRuntimeContainerClasspathEntry(container.getPath(), IRuntimeClasspathEntry.CLASS_PATH, project));
@@ -936,7 +943,7 @@
String name = entry.getPath().lastSegment();
IProject dep = ResourcesPlugin.getWorkspace().getRoot().getProject(name);
IJavaProject javaProject = JavaCore.create(dep);
- if (isModule(entry)) {
+ if (isModule(entry, project)) {
classpathEntries.add(newProjectRuntimeClasspathEntry(javaProject, IRuntimeClasspathEntry.MODULE_PATH));
} else {
classpathEntries.add(newProjectRuntimeClasspathEntry(javaProject, IRuntimeClasspathEntry.CLASS_PATH));
@@ -953,7 +960,7 @@
IPackageFragmentRoot root = project.findPackageFragmentRoot(entry.getPath());
if (!root.getRawClasspathEntry().getPath().segment(0).contains("JRE_CONTAINER")) { //$NON-NLS-1$
IRuntimeClasspathEntry r;
- if (JavaRuntime.isModule(entry)) {
+ if (JavaRuntime.isModule(entry, project)) {
r = JavaRuntime.newArchiveRuntimeClasspathEntry(entry.getPath(), IRuntimeClasspathEntry.MODULE_PATH);
} else {
r = JavaRuntime.newArchiveRuntimeClasspathEntry(entry.getPath(), IRuntimeClasspathEntry.CLASS_PATH);
@@ -981,7 +988,11 @@
* @return boolean <code>true</code> if entry is module else <code>false</code>
* @since 3.9
*/
- public static boolean isModule(IClasspathEntry entry) {
+ public static boolean isModule(IClasspathEntry entry, IJavaProject proj) {
+ if (!isModularProject(proj)) {
+ return false;
+ }
+
if (entry == null) {
return false;
}
@@ -1016,6 +1027,11 @@
}
/**
+ * Checks if vm install is modular.
+ *
+ * @param entry
+ * the vm install
+ * @return boolean <code>true</code> if vm install is modular else <code>false</code>
* @since 3.9
*/
public static boolean isModularJava(IVMInstall vm) {
@@ -1036,6 +1052,29 @@
}
/**
+ * Checks if project entry is modular
+ *
+ * @param entry
+ * the project
+ * @return boolean <code>true</code> if project is modular else <code>false</code>
+ * @since 3.9
+ */
+ public static boolean isModularProject(IJavaProject proj) {
+
+ IModuleDescription module;
+ try {
+ module = proj == null ? null : proj.getModuleDescription();
+ String modName = module == null ? null : module.getElementName();
+ if (modName != null && modName.length() > 0) {
+ return true;
+ }
+ }
+ catch (JavaModelException e) {
+ }
+ return false;
+ }
+
+ /**
* Computes and returns the unresolved source lookup path for the given launch
* configuration.
*
@@ -2381,7 +2420,7 @@
resolver = getVariableResolver(entry.getPath().segment(0));
if (resolver != null) {
if (resolver.isVMInstallReference(entry)) {
- if (isModule(entry)) {
+ if (isModule(entry, project)) {
return newRuntimeClasspathEntry(entry, IRuntimeClasspathEntry.MODULE_PATH);
}
return newRuntimeClasspathEntry(entry, IRuntimeClasspathEntry.CLASS_PATH);
@@ -2398,12 +2437,12 @@
case IClasspathContainer.K_APPLICATION:
break;
case IClasspathContainer.K_DEFAULT_SYSTEM:
- if (isModule(entry)) {
+ if (isModule(entry, project)) {
return newRuntimeContainerClasspathEntry(entry.getPath(), IRuntimeClasspathEntry.MODULE_PATH);
}
return newRuntimeContainerClasspathEntry(entry.getPath(), IRuntimeClasspathEntry.CLASS_PATH);
case IClasspathContainer.K_SYSTEM:
- if (isModule(entry)) {
+ if (isModule(entry, project)) {
return newRuntimeContainerClasspathEntry(entry.getPath(), IRuntimeClasspathEntry.MODULE_PATH);
}
return newRuntimeContainerClasspathEntry(entry.getPath(), IRuntimeClasspathEntry.CLASS_PATH);