diff --git a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt index 207715a9bf5..e4d83082b5a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt +++ b/idea/src/org/jetbrains/kotlin/idea/configuration/KotlinWithGradleConfigurator.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.idea.configuration import com.intellij.codeInsight.CodeInsightUtilCore import com.intellij.ide.actions.OpenFileAction +import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil import com.intellij.openapi.module.Module import com.intellij.openapi.module.ModuleUtil @@ -65,13 +66,15 @@ abstract class KotlinWithGradleConfigurator : KotlinProjectConfigurator { val buildFiles = listOf(getBuildGradleFile(module.project, getModuleFilePath(module)), getBuildGradleFile(module.project, getTopLevelProjectFilePath(module.project))) .filterNotNull() - if (buildFiles.none(this::isFileConfigured)) { + if (buildFiles.none { buildFile -> allGradleConfigurators.any { it.isFileConfigured(buildFile) } }) return ConfigureKotlinStatus.CAN_BE_CONFIGURED - } return ConfigureKotlinStatus.BROKEN } + private val allGradleConfigurators: Collection + get() = Extensions.getExtensions(KotlinProjectConfigurator.EP_NAME).filterIsInstance() + protected open fun isApplicable(module: Module): Boolean { return KotlinPluginUtil.isGradleModule(module) && !KotlinPluginUtil.isAndroidGradleModule(module) } diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleConfiguratorTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleConfiguratorTest.kt index 0394d7dc943..56259d91650 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleConfiguratorTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleConfiguratorTest.kt @@ -57,10 +57,11 @@ class GradleConfiguratorTest : GradleImportingTestCase() { myProject.baseDir.createChildData(null, "build.gradle") val module = ModuleManager.getInstance(myProject).findModuleByName("app")!! - val configurator = findGradleModuleConfigurator() // We have a Kotlin runtime in build.gradle but not in the classpath, so it doesn't make sense // to suggest configuring it - assertEquals(ConfigureKotlinStatus.BROKEN, configurator.getStatus(module)) + assertEquals(ConfigureKotlinStatus.BROKEN, findGradleModuleConfigurator().getStatus(module)) + // Don't offer the JS configurator if the JVM configuration exists but is broken + assertEquals(ConfigureKotlinStatus.BROKEN, findJsGradleModuleConfigurator().getStatus(module)) } } } @@ -114,6 +115,8 @@ class GradleConfiguratorTest : GradleImportingTestCase() { private fun findGradleModuleConfigurator() = Extensions.findExtension(KotlinProjectConfigurator.EP_NAME, KotlinGradleModuleConfigurator::class.java) + private fun findJsGradleModuleConfigurator() = Extensions.findExtension(KotlinProjectConfigurator.EP_NAME, + KotlinJsGradleModuleConfigurator::class.java) @Test fun testListNonConfiguredModules() { createProjectSubFile("settings.gradle", "include ':app'")