From 62b3059425b80c48ef2535026988710aa4fbf37d Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Thu, 7 Sep 2017 14:56:54 +0200 Subject: [PATCH] Support running main() under JVM in multiplatform projects #KT-20093 In progress --- .../run/MultiplatformGradleProjectTaskRunner.kt | 12 ++++++++++++ .../idea/run/KotlinRunConfigurationProducer.kt | 15 +++++++++++++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformGradleProjectTaskRunner.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformGradleProjectTaskRunner.kt index 0ecc186fba4..1d91184a753 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformGradleProjectTaskRunner.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/run/MultiplatformGradleProjectTaskRunner.kt @@ -21,6 +21,7 @@ import com.intellij.openapi.externalSystem.ExternalSystemModulePropertyManager import com.intellij.openapi.externalSystem.model.project.ExternalSystemSourceType import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.module.Module +import com.intellij.openapi.roots.ModuleOrderEntry import com.intellij.openapi.roots.ModuleRootModel import com.intellij.openapi.roots.OrderEnumerationHandler import com.intellij.openapi.roots.OrderRootType @@ -30,6 +31,7 @@ import com.intellij.task.ModuleBuildTask import com.intellij.task.ProjectTask import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.idea.project.languageVersionSettings +import org.jetbrains.kotlin.idea.util.rootManager import org.jetbrains.plugins.gradle.execution.build.GradleProjectTaskRunner import org.jetbrains.plugins.gradle.model.ExternalSourceDirectorySet import org.jetbrains.plugins.gradle.service.project.data.ExternalProjectDataCache @@ -84,6 +86,16 @@ class MultiplatformGradleOrderEnumeratorHandler : OrderEnumerationHandler() { addOutputModuleRoots(sourceSet.sources[ExternalSystemSourceType.SOURCE], result) } } + + val implModule = rootModel.module.findJvmImplementationModule() + implModule + ?.rootManager + ?.orderEntries() + ?.satisfying { orderEntry -> (orderEntry as? ModuleOrderEntry)?.module != rootModel.module } + ?.compileOnly() + ?.classesRoots + ?.mapTo(result) { it.url } + return false } diff --git a/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt b/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt index 0d012d7399f..d22b5b5ae0f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/run/KotlinRunConfigurationProducer.kt @@ -19,17 +19,21 @@ package org.jetbrains.kotlin.idea.run import com.intellij.execution.Location import com.intellij.execution.actions.ConfigurationContext import com.intellij.execution.actions.RunConfigurationProducer +import com.intellij.openapi.module.Module +import com.intellij.openapi.module.ModuleManager import com.intellij.openapi.project.DumbService import com.intellij.openapi.util.Ref import com.intellij.psi.PsiElement import com.intellij.psi.util.ClassUtil import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.asJava.toLightClass +import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.fileClasses.javaFileFacadeFqName import org.jetbrains.kotlin.idea.MainFunctionDetector import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.project.TargetPlatformDetector +import org.jetbrains.kotlin.idea.project.targetPlatform import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getParentOfType @@ -58,8 +62,9 @@ class KotlinRunConfigurationProducer : RunConfigurationProducer