diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/CompositeScriptConfigurationManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/CompositeScriptConfigurationManager.kt index 0088703d7b9..607bbe7586f 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/CompositeScriptConfigurationManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/CompositeScriptConfigurationManager.kt @@ -46,7 +46,7 @@ class CompositeScriptConfigurationManager(val project: Project) : ScriptConfigur val updater = ScriptClassRootsUpdater(project, this) - private val plugins = ScriptingSupport.Provider.EPN.getPoint(project).extensionList + private val plugins = ScriptingSupport.EPN.getPoint(project).extensionList val default = DefaultScriptingSupport(this) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt index e83cf0d7ec3..e3bb67f1ce6 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/ScriptingSupport.kt @@ -8,17 +8,35 @@ package org.jetbrains.kotlin.idea.core.script.configuration import com.intellij.openapi.extensions.ExtensionPointName import com.intellij.openapi.vfs.VirtualFile import org.jetbrains.kotlin.idea.core.script.configuration.utils.ScriptClassRootsCache +import org.jetbrains.kotlin.idea.core.script.configuration.listener.ScriptChangeListener import org.jetbrains.kotlin.psi.KtFile +/** + * Extension point for overriding default Kotlin scripting support. + * + * Implementation should store script configuration internally (in memory and/or fs), + * and provide it inside [collectConfigurations] using the [ScriptClassRootsCache.LightScriptInfo]. + * Custom data can be attached to [ScriptClassRootsCache.LightScriptInfo] and retrieved + * by calling [ScriptClassRootsCache.getLightScriptInfo]. + * + * [ScriptChangeListener] can be used to listen script changes. + * [CompositeScriptConfigurationManager.updater] should be used to schedule configuration reloading. + * + * [isApplicable] should return true for files that is covered by that support. + * + * [isConfigurationLoadingInProgress] is used to pause analyzing. + * + * Long read: [idea/idea-gradle/src/org/jetbrains/kotlin/idea/scripting/gradle/README.md]. + * + * @sample GradleBuildRootsManager + */ abstract class ScriptingSupport { - abstract class Provider { - abstract fun isApplicable(file: VirtualFile): Boolean - abstract fun isConfigurationLoadingInProgress(file: KtFile): Boolean - abstract fun collectConfigurations(builder: ScriptClassRootsCache.Builder) + abstract fun isApplicable(file: VirtualFile): Boolean + abstract fun isConfigurationLoadingInProgress(file: KtFile): Boolean + abstract fun collectConfigurations(builder: ScriptClassRootsCache.Builder) - companion object { - val EPN: ExtensionPointName = - ExtensionPointName.create("org.jetbrains.kotlin.scripting.idea.scriptingSupportProvider") - } + companion object { + val EPN: ExtensionPointName = + ExtensionPointName.create("org.jetbrains.kotlin.scripting.idea.scriptingSupport") } } \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptConfigurationUpdater.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptConfigurationUpdater.kt deleted file mode 100644 index 020d11f6232..00000000000 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/listener/ScriptConfigurationUpdater.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 2010-2019 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.core.script.configuration.listener - -import org.jetbrains.kotlin.idea.core.script.configuration.cache.ScriptConfigurationCacheScope -import org.jetbrains.kotlin.psi.KtFile - -interface ScriptConfigurationUpdater { - /** - * Ensure that configuration for [file] is up-to-date, - * or new configuration loading is started - */ - fun ensureUpToDatedConfigurationSuggested(file: KtFile) - - /** - * Check that configurations for given [files] is up-to-date or try synchronously update - * them. Synchronous update will be occurred only if auto apply is enabled and - * configuration for given file will not be loaded in background. - * - * @return true, if all files are already up-to-date or updated during this call - */ - fun ensureConfigurationUpToDate(files: List): Boolean - - /** - * Suggest to update script configuration if configuration for [file] is out of date - */ - fun suggestToUpdateConfigurationIfOutOfDate(file: KtFile) -} \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt index deb243235f4..b6329034ea5 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/configuration/utils/ScriptClassRootsStorage.kt @@ -10,11 +10,9 @@ import com.intellij.openapi.project.Project import com.intellij.util.xmlb.XmlSerializerUtil /** - * Actually, this storage is required only for before Gradle 6.0. - * For projects starting from Gradle 6.0, [org.jetbrains.kotlin.idea.scripting.gradle.GradleScriptingSupportProvider] - * will also store all roots in FS, and will overwrite this one shrotly after start. + * This cache is used by [org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSupport] only. + * @see org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSupport.collectConfigurations * - * Btw, this is still useful for projects without custom scripting support. */ @State( name = "ScriptClassRootsStorage", 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 38bd6bacb47..e01d6e6de3d 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 @@ -56,7 +56,7 @@ import java.util.concurrent.atomic.AtomicBoolean * - [GradleBuildRoot.New] - not yet imported * - [GradleBuildRoot.Imported] - imported */ -class GradleBuildRootsManager(val project: Project) : ScriptingSupport.Provider() { +class GradleBuildRootsManager(val project: Project) : ScriptingSupport() { private val manager: CompositeScriptConfigurationManager get() = ScriptConfigurationManager.getInstance(project) as CompositeScriptConfigurationManager diff --git a/idea/resources/META-INF/gradle.xml b/idea/resources/META-INF/gradle.xml index 54fd09b2bf5..5687dd29a3c 100644 --- a/idea/resources/META-INF/gradle.xml +++ b/idea/resources/META-INF/gradle.xml @@ -17,7 +17,7 @@ - + diff --git a/idea/resources/META-INF/gradle.xml.201 b/idea/resources/META-INF/gradle.xml.201 index a878eedc2e3..7038af60150 100644 --- a/idea/resources/META-INF/gradle.xml.201 +++ b/idea/resources/META-INF/gradle.xml.201 @@ -18,7 +18,7 @@ - + diff --git a/idea/resources/META-INF/scripting-support.xml b/idea/resources/META-INF/scripting-support.xml index 6b84786709f..8acf103162e 100644 --- a/idea/resources/META-INF/scripting-support.xml +++ b/idea/resources/META-INF/scripting-support.xml @@ -1,7 +1,7 @@ -