diff --git a/idea/idea-gradle/res/messages/KotlinIdeaGradleBundle.properties b/idea/idea-gradle/res/messages/KotlinIdeaGradleBundle.properties index 6ef930f986e..c97b0dd59ba 100644 --- a/idea/idea-gradle/res/messages/KotlinIdeaGradleBundle.properties +++ b/idea/idea-gradle/res/messages/KotlinIdeaGradleBundle.properties @@ -1,3 +1,4 @@ +gradle.script.configurations.importing.feature=Load gradle kotlin scripts configuration from project importing notification.outsideAnything.text=Code insight unavailable (related Gradle project not linked) notification.outsideAnything.linkAction=Link Gradle project notification.wasNotImportedAfterCreation.text=Code insight unavailable (Gradle project not imported) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptConfigurationsImportingFeature.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptConfigurationsImportingFeature.kt new file mode 100644 index 00000000000..a0c4f3bdc6b --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/GradleScriptConfigurationsImportingFeature.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.scripting.gradle + +import com.intellij.openapi.project.ProjectManager +import org.jetbrains.kotlin.idea.KotlinIdeaGradleBundle +import org.jetbrains.kotlin.idea.configuration.ExperimentalFeature +import org.jetbrains.kotlin.idea.scripting.gradle.roots.GradleBuildRootsManager + +object GradleScriptConfigurationsImportingFeature : ExperimentalFeature() { + override val title: String + get() = KotlinIdeaGradleBundle.message("gradle.script.configurations.importing.feature") + + override fun shouldBeShown(): Boolean = true + + override var isEnabled: Boolean = true + set(value) { + if (field != value) { + field = value + ProjectManager.getInstance().openProjects.forEach { + GradleBuildRootsManager.getInstance(it).enabled = field + } + } + } +} \ No newline at end of file diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt index 2d2441e477a..fe8545fe848 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/roots/GradleBuildRootsManager.kt @@ -67,6 +67,16 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(), private val updater get() = manager.updater + var enabled: Boolean = true + set(value) { + if (value != field) { + field = value + roots.list.toList().forEach { + reloadBuildRoot(it.pathPrefix) + } + } + } + //////////// /// ScriptingSupport.Provider implementation: @@ -275,7 +285,8 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(), } private fun loadLinkedRoot(settings: GradleProjectSettings) = - tryLoadFromFsCache(settings) ?: createOtherLinkedRoot(settings) + if (!enabled) Legacy(settings) + else tryLoadFromFsCache(settings) ?: createOtherLinkedRoot(settings) private fun tryLoadFromFsCache(settings: GradleProjectSettings) = tryCreateImportedRoot(settings.externalProjectPath) { diff --git a/idea/resources/META-INF/gradle.xml b/idea/resources/META-INF/gradle.xml index 0fe0e582dd8..23325075261 100644 --- a/idea/resources/META-INF/gradle.xml +++ b/idea/resources/META-INF/gradle.xml @@ -10,6 +10,7 @@ + diff --git a/idea/resources/META-INF/gradle.xml.201 b/idea/resources/META-INF/gradle.xml.201 index f9a603cdf30..bc1cec9a718 100644 --- a/idea/resources/META-INF/gradle.xml.201 +++ b/idea/resources/META-INF/gradle.xml.201 @@ -10,6 +10,7 @@ +