diff --git a/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java b/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java index 6c5a2b0fe70..7b40691a48c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java +++ b/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfiguration.java @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.run; +import com.intellij.codeInsight.daemon.impl.analysis.JavaModuleGraphUtil; import com.intellij.diagnostic.logging.LogConfigurationPanel; import com.intellij.execution.*; import com.intellij.execution.application.BaseJavaApplicationCommandLineState; @@ -30,19 +31,20 @@ import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.options.SettingsEditorGroup; +import com.intellij.openapi.project.DumbService; +import com.intellij.openapi.projectRoots.JavaSdkVersion; +import com.intellij.openapi.projectRoots.ex.JavaSdkUtil; import com.intellij.openapi.roots.*; import com.intellij.openapi.util.DefaultJDOMExternalizer; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VirtualFile; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.PsiPackage; +import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; +import com.intellij.util.PathsList; import kotlin.collections.ArraysKt; import kotlin.collections.CollectionsKt; import kotlin.jvm.functions.Function1; @@ -62,7 +64,7 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode; import java.util.*; -public class JetRunConfiguration extends ModuleBasedConfiguration +public class JetRunConfiguration extends ModuleBasedConfiguration implements CommonJavaRunConfigurationParameters, RefactoringListenerProvider { public String MAIN_CLASS_NAME; @@ -75,7 +77,7 @@ public class JetRunConfiguration extends ModuleBasedConfiguration myEnvs = new LinkedHashMap(); public boolean PASS_PARENT_ENVS = true; - public JetRunConfiguration(String name, RunConfigurationModule runConfigurationModule, ConfigurationFactory factory) { + public JetRunConfiguration(String name, JavaRunConfigurationModule runConfigurationModule, ConfigurationFactory factory) { super(name, runConfigurationModule, factory); runConfigurationModule.init(); } @@ -343,7 +345,7 @@ public class JetRunConfiguration extends ModuleBasedConfiguration JavaModuleGraphUtil.findDescriptorByElement(module.findClass(params.getMainClass()))); + if (mainModule != null) { + params.setModuleName(mainModule.getName()); + PathsList classPath = params.getClassPath(); + PathsList modulePath = params.getModulePath(); + + modulePath.addAll(classPath.getPathList()); + classPath.clear(); + } + } + } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfigurationType.java b/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfigurationType.java index 0aaccda17eb..b3d6172311e 100644 --- a/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfigurationType.java +++ b/idea/src/org/jetbrains/kotlin/idea/run/JetRunConfigurationType.java @@ -37,9 +37,10 @@ public class JetRunConfigurationType extends ConfigurationTypeBase { super(type); } + @NotNull @Override - public RunConfiguration createTemplateConfiguration(Project project) { - return new JetRunConfiguration("", new RunConfigurationModule(project), this); + public RunConfiguration createTemplateConfiguration(@NotNull Project project) { + return new JetRunConfiguration("", new JavaRunConfigurationModule(project, true), this); } } } diff --git a/idea/testData/run/WithModuleForJdk6/module/src/main.kt b/idea/testData/run/WithModuleForJdk6/module/src/main.kt new file mode 100644 index 00000000000..20f4f3a626f --- /dev/null +++ b/idea/testData/run/WithModuleForJdk6/module/src/main.kt @@ -0,0 +1,4 @@ +package some + +fun main(args: Array) { +} diff --git a/idea/testData/run/WithModuleForJdk6/module/src/module-info.java b/idea/testData/run/WithModuleForJdk6/module/src/module-info.java new file mode 100644 index 00000000000..975b4781323 --- /dev/null +++ b/idea/testData/run/WithModuleForJdk6/module/src/module-info.java @@ -0,0 +1,3 @@ +module MAIN { + requires kotlin.stdlib; +} \ No newline at end of file diff --git a/idea/testData/run/WithModuleForJdk9/module/src/main.kt b/idea/testData/run/WithModuleForJdk9/module/src/main.kt new file mode 100644 index 00000000000..20f4f3a626f --- /dev/null +++ b/idea/testData/run/WithModuleForJdk9/module/src/main.kt @@ -0,0 +1,4 @@ +package some + +fun main(args: Array) { +} diff --git a/idea/testData/run/WithModuleForJdk9/module/src/module-info.java b/idea/testData/run/WithModuleForJdk9/module/src/module-info.java new file mode 100644 index 00000000000..975b4781323 --- /dev/null +++ b/idea/testData/run/WithModuleForJdk9/module/src/module-info.java @@ -0,0 +1,3 @@ +module MAIN { + requires kotlin.stdlib; +} \ No newline at end of file diff --git a/idea/testData/run/WithModuleForJdk9WithoutModuleInfo/module/src/main.kt b/idea/testData/run/WithModuleForJdk9WithoutModuleInfo/module/src/main.kt new file mode 100644 index 00000000000..20f4f3a626f --- /dev/null +++ b/idea/testData/run/WithModuleForJdk9WithoutModuleInfo/module/src/main.kt @@ -0,0 +1,4 @@ +package some + +fun main(args: Array) { +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt index 3af89d5ff44..8c2fa1449cd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/run/RunConfigurationTest.kt @@ -166,6 +166,27 @@ class RunConfigurationTest: KotlinCodeInsightTestCase() { Assert.assertEquals("afterRenameTest.Foo", runConfiguration.MAIN_CLASS_NAME) } + fun testWithModuleForJdk6() { + checkModuleInfoName(null, PluginTestCaseBase.mockJdk()) + } + + fun testWithModuleForJdk9() { + checkModuleInfoName("MAIN", PluginTestCaseBase.mockJdk9()) + } + + fun testWithModuleForJdk9WithoutModuleInfo() { + checkModuleInfoName(null, PluginTestCaseBase.mockJdk9()) + } + + private fun checkModuleInfoName(moduleName: String?, sdk: Sdk) { + val module = configureModule(moduleDirPath("module"), getTestProject().baseDir!!).module + ConfigLibraryUtil.configureKotlinRuntimeAndSdk(module, sdk) + + val javaParameters = getJavaRunParameters(createConfigurationFromMain("some.main")) + + Assert.assertEquals(moduleName, javaParameters.moduleName) + } + private fun doTest(configureRuntime: (Module, Sdk) -> Unit) { val baseDir = getTestProject().baseDir!! val createModuleResult = configureModule(moduleDirPath("module"), baseDir)