diff --git a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt index 4af9fc9f99d..f92ab0a2b02 100644 --- a/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt +++ b/idea/kotlin-gradle-tooling/src/KotlinGradleModelBuilder.kt @@ -31,6 +31,7 @@ import kotlin.collections.HashSet typealias CompilerArgumentsBySourceSet = Map> interface KotlinGradleModel : Serializable { + val hasKotlinPlugin: Boolean val currentCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet val defaultCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet val coroutines: String? @@ -39,6 +40,7 @@ interface KotlinGradleModel : Serializable { } class KotlinGradleModelImpl( + override val hasKotlinPlugin: Boolean, override val currentCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet, override val defaultCompilerArgumentsBySourceSet: CompilerArgumentsBySourceSet, override val coroutines: String?, @@ -55,6 +57,7 @@ class KotlinGradleModelBuilder : ModelBuilderService { "kotlin" to "kotlin-platform-jvm", "kotlin2js" to "kotlin-platform-js" ) + val kotlinPluginIds = listOf("kotlin", "kotlin2js") private val kotlinPlatformCommonPluginId = "kotlin-platform-common" } @@ -151,6 +154,9 @@ class KotlinGradleModelBuilder : ModelBuilderService { } override fun buildAll(modelName: String?, project: Project): KotlinGradleModelImpl { + val kotlinPluginId = kotlinPluginIds.singleOrNull { project.plugins.findPlugin(it) != null } + val platformPluginId = platformPluginIds.singleOrNull { project.plugins.findPlugin(it) != null } + val currentCompilerArgumentsBySourceSet = LinkedHashMap>() val defaultCompilerArgumentsBySourceSet = LinkedHashMap>() @@ -161,11 +167,11 @@ class KotlinGradleModelBuilder : ModelBuilderService { collectCompilerArguments(compileTask, "getDefaultSerializedCompilerArguments", defaultCompilerArgumentsBySourceSet) } - val platform = platformPluginIds.singleOrNull { project.plugins.findPlugin(it) != null } - ?: pluginToPlatform.entries.singleOrNull { project.plugins.findPlugin(it.key) != null }?.value + val platform = platformPluginId ?: pluginToPlatform.entries.singleOrNull { project.plugins.findPlugin(it.key) != null }?.value val transitiveCommon = getImplements(project)?.let { transitiveCommonDependencies(it) } ?: emptySet() return KotlinGradleModelImpl( + kotlinPluginId != null || platformPluginId != null, currentCompilerArgumentsBySourceSet, defaultCompilerArgumentsBySourceSet, getCoroutines(project), diff --git a/idea/src/META-INF/gradle.xml b/idea/src/META-INF/gradle.xml index 0000c0bb1b0..4cc518500a4 100644 --- a/idea/src/META-INF/gradle.xml +++ b/idea/src/META-INF/gradle.xml @@ -3,7 +3,7 @@ - + diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt index 23f6db48b93..f18b11cbb2f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleProjectResolverExtension.kt @@ -28,12 +28,15 @@ import org.gradle.tooling.model.idea.IdeaModule import org.jetbrains.kotlin.gradle.CompilerArgumentsBySourceSet import org.jetbrains.kotlin.gradle.KotlinGradleModel import org.jetbrains.kotlin.gradle.KotlinGradleModelBuilder +import org.jetbrains.kotlin.psi.NotNullableUserDataProperty import org.jetbrains.kotlin.psi.UserDataProperty import org.jetbrains.plugins.gradle.model.ExternalProject import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData import org.jetbrains.plugins.gradle.service.project.AbstractProjectResolverExtension import org.jetbrains.plugins.gradle.service.project.GradleProjectResolverUtil.getModuleId +var DataNode.hasKotlinPlugin + by NotNullableUserDataProperty(Key.create("HAS_KOTLIN_PLUGIN"), false) var DataNode.currentCompilerArgumentsBySourceSet by UserDataProperty(Key.create("CURRENT_COMPILER_ARGUMENTS")) var DataNode.defaultCompilerArgumentsBySourceSet @@ -67,6 +70,7 @@ class KotlinGradleProjectResolverExtension : AbstractProjectResolverExtension() } } + ideModule.hasKotlinPlugin = gradleModel.hasKotlinPlugin ideModule.currentCompilerArgumentsBySourceSet = gradleModel.currentCompilerArgumentsBySourceSet ideModule.defaultCompilerArgumentsBySourceSet = gradleModel.defaultCompilerArgumentsBySourceSet ideModule.coroutines = gradleModel.coroutines diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt index dc3a896856c..79458797fbd 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSourceSetDataService.kt @@ -109,6 +109,11 @@ private fun configureFacetByGradleModule( ideModule: Module, modelsProvider: IdeModifiableModelsProvider ): KotlinFacet? { + if (!moduleNode.hasKotlinPlugin) { + KotlinFacet.get(ideModule)?.let { modelsProvider.getModifiableFacetModel(ideModule).removeFacet(it) } + return null + } + val compilerVersion = moduleNode.findAll(BuildScriptClasspathData.KEY).firstOrNull()?.data?.let(::findKotlinPluginVersion) ?: return null val platformKind = detectPlatformByPlugin(moduleNode) ?: detectPlatformByLibrary(moduleNode) 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 b7489711c21..5e548ae429e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -748,4 +748,64 @@ class GradleFacetImportTest : GradleImportingTestCase() { Assert.assertEquals(TargetPlatformKind.JavaScript, targetPlatformKind) } } + + @Test + fun testNoFacetInModuleWithoutKotlinPlugin() { + createProjectSubFile("build.gradle", """ + group 'gr01' + version '1.0-SNAPSHOT' + + apply plugin: 'java' + apply plugin: 'kotlin' + + sourceCompatibility = 1.8 + + repositories { + mavenCentral() + } + + buildscript { + repositories { + mavenCentral() + } + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.1.1" + } + } + dependencies { + compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:1.1.1" + } + """) + createProjectSubFile("settings.gradle", """ + rootProject.name = 'gr01' + include 'm1' + """) + createProjectSubFile("m1/build.gradle", """ + group 'gr01' + version '1.0-SNAPSHOT' + + apply plugin: 'java' + + sourceCompatibility = 1.8 + + repositories { + mavenCentral() + } + + buildscript { + repositories { + mavenCentral() + } + } + dependencies { + testCompile group: 'junit', name: 'junit', version: '4.11' + } + """) + importProject() + + Assert.assertNotNull(KotlinFacet.get(getModule("gr01_main"))) + Assert.assertNotNull(KotlinFacet.get(getModule("gr01_test"))) + Assert.assertNull(KotlinFacet.get(getModule("m1_main"))) + Assert.assertNull(KotlinFacet.get(getModule("m1_test"))) + } }