diff --git a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt index 0241927936f..f752935555f 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt @@ -33,19 +33,22 @@ interface KotlinGradleModel : Serializable { val currentCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet val defaultCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet val coroutines: String? + val platformPluginId: String? } class KotlinGradleModelImpl( override val implements: String?, override val currentCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet, override val defaultCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet, - override val coroutines: String? + override val coroutines: String?, + override val platformPluginId: String? ) : KotlinGradleModel class KotlinGradleModelBuilder : ModelBuilderService { companion object { val kotlinCompileTaskClasses = listOf("org.jetbrains.kotlin.gradle.tasks.KotlinCompile_Decorated", "org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile_Decorated") + val platformPluginIds = listOf("kotlin-platform-jvm", "kotlin-platform-js", "kotlin-platform-common") } override fun getErrorMessageBuilder(project: Project, e: Exception): ErrorMessageBuilder { @@ -127,7 +130,8 @@ class KotlinGradleModelBuilder : ModelBuilderService { getImplements(project), currentCompilerArgumentsBySourceSet, defaultCompilerArgumentsBySourceSet, - getCoroutines(project) + getCoroutines(project), + platformPluginIds.singleOrNull { project.plugins.findPlugin(it) != null } ) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index f67ff7b0c3f..f9fa8643881 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -40,6 +40,8 @@ var DataNode.defaultCompilerArgumentsBySourceSet by UserDataProperty(Key.create("DEFAULT_COMPILER_ARGUMENTS")) var DataNode.coroutines by UserDataProperty(Key.create("KOTLIN_COROUTINES")) +var DataNode.platformPluginId + by UserDataProperty(Key.create("PLATFORM_PLUGIN_ID")) class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() { override fun getToolingExtensionsClasses(): Set> { @@ -68,6 +70,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() ideModule.currentCompilerArgumentsBySourceSet = gradleModel.currentCompilerArgumentsBySourceSet ideModule.defaultCompilerArgumentsBySourceSet = gradleModel.defaultCompilerArgumentsBySourceSet ideModule.coroutines = gradleModel.coroutines + ideModule.platformPluginId = gradleModel.platformPluginId super.populateModuleDependencies(gradleModule, ideModule, ideProject) } diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index 4973e1d9ea2..6ef5d78b2ce 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -35,7 +35,6 @@ import org.jetbrains.kotlin.idea.inspections.gradle.findKotlinPluginVersion import org.jetbrains.kotlin.idea.inspections.gradle.getResolvedKotlinStdlibVersionByModuleData import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData -import org.jetbrains.plugins.gradle.service.project.data.ExternalProjectDataService import java.util.* interface GradleProjectImportHandler { @@ -90,15 +89,11 @@ class KotlinGradleProjectDataService : AbstractProjectDataService): TargetPlatformKind<*>? { - val projectNode = ExternalSystemApiUtil.findParent(moduleNode, ProjectKeys.PROJECT) - val externalProjectNode = ExternalSystemApiUtil.find(projectNode as DataNode<*>, ExternalProjectDataService.KEY) - return externalProjectNode?.let { - when (it.data.plugins.values.map { it.id }.firstOrNull { it.startsWith("kotlin-platform-") }) { - "kotlin-platform-jvm" -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6] - "kotlin-platform-js" -> TargetPlatformKind.JavaScript - "kotlin-platform-common" -> TargetPlatformKind.Common - else -> null - } + return when (moduleNode.platformPluginId) { + "kotlin-platform-jvm" -> TargetPlatformKind.Jvm[JvmTarget.JVM_1_6] + "kotlin-platform-js" -> TargetPlatformKind.JavaScript + "kotlin-platform-common" -> TargetPlatformKind.Common + else -> null } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index 668109a4eaa..c62d91bfb47 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -481,4 +481,94 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals(TargetPlatformKind.Common, targetPlatformKind) } } + + @Test + fun testJvmImportByPlatformPlugin() { + createProjectSubFile("build.gradle", """ + group 'Again' + version '1.0-SNAPSHOT' + + buildscript { + repositories { + mavenCentral() + maven { + url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1' + } + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } + } + + apply plugin: 'kotlin-platform-jvm' + """) + importProject() + + with (facetSettings) { + Assert.assertEquals("1.1", languageLevel!!.versionString) + Assert.assertEquals("1.1", apiLevel!!.versionString) + Assert.assertEquals(TargetPlatformKind.Jvm[JvmTarget.JVM_1_6], targetPlatformKind) + } + } + + @Test + fun testJsImportByPlatformPlugin() { + createProjectSubFile("build.gradle", """ + group 'Again' + version '1.0-SNAPSHOT' + + buildscript { + repositories { + mavenCentral() + maven { + url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1' + } + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } + } + + apply plugin: 'kotlin-platform-js' + """) + importProject() + + with (facetSettings) { + Assert.assertEquals("1.1", languageLevel!!.versionString) + Assert.assertEquals("1.1", apiLevel!!.versionString) + Assert.assertEquals(TargetPlatformKind.JavaScript, targetPlatformKind) + } + } + + @Test + fun testCommonImportByPlatformPlugin() { + createProjectSubFile("build.gradle", """ + group 'Again' + version '1.0-SNAPSHOT' + + buildscript { + repositories { + mavenCentral() + maven { + url 'http://dl.bintray.com/kotlin/kotlin-eap-1.1' + } + } + + dependencies { + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.0") + } + } + + apply plugin: 'kotlin-platform-common' + """) + importProject() + + with (facetSettings) { + Assert.assertEquals("1.1", languageLevel!!.versionString) + Assert.assertEquals("1.1", apiLevel!!.versionString) + Assert.assertEquals(TargetPlatformKind.Common, targetPlatformKind) + } + } }