[java] no module path on non-modular JDK

This commit is contained in:
Roman Shevchenko
2016-10-21 19:29:45 +02:00
parent de894de753
commit a0c6219ed8
@@ -30,6 +30,8 @@ import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.options.SettingsEditorGroup;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.JavaSdkVersion;
import com.intellij.openapi.util.DefaultJDOMExternalizer;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.WriteExternalException;
@@ -45,6 +47,9 @@ import org.jetbrains.annotations.Nullable;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Optional;
import static com.intellij.openapi.util.Pair.pair;
public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule>
implements CommonJavaRunConfigurationParameters, SingleClassConfiguration, RefactoringListenerProvider {
@@ -281,12 +286,18 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration<JavaRunCo
}
private static void setupModulePath(JavaParameters params, JavaRunConfigurationModule module) {
PsiClass mainClass = module.findClass(params.getMainClass());
if (mainClass != null) {
PsiJavaModule mainModule = JavaModuleGraphUtil.findDescriptorByElement(mainClass);
if (mainModule != null) {
params.setModuleName(mainModule.getModuleName());
params.getModulePath().addAll(params.getClassPath().getPathList());
JavaSdkVersion version = Optional.ofNullable(params.getJdk())
.map(jdk -> pair(jdk.getSdkType(), jdk))
.map(p -> p.first instanceof JavaSdk ? ((JavaSdk)p.first).getVersion(p.second) : null)
.orElse(null);
if (version != null && version.isAtLeast(JavaSdkVersion.JDK_1_9)) {
PsiClass mainClass = module.findClass(params.getMainClass());
if (mainClass != null) {
PsiJavaModule mainModule = JavaModuleGraphUtil.findDescriptorByElement(mainClass);
if (mainModule != null) {
params.setModuleName(mainModule.getModuleName());
params.getModulePath().addAll(params.getClassPath().getPathList());
}
}
}
}