diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt index bb9f211538c..5f6e35fcfc7 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptDefinitionsManager.kt @@ -74,8 +74,13 @@ class ScriptDefinitionsManager(private val project: Project): ScriptDefinitionPr currentDefinitions().any { it.isScript(fileName) } } - private fun getContributors(): List = - Extensions.getArea(project).getExtensionPoint(ScriptDefinitionContributor.EP_NAME).extensions.toList() + private fun getContributors(): List { + @Suppress("DEPRECATION") + val fromDeprecatedEP = Extensions.getArea(project).getExtensionPoint(ScriptTemplatesProvider.EP_NAME).extensions.toList() + .map(::ScriptTemplatesProviderAdapter) + val fromNewEp = Extensions.getArea(project).getExtensionPoint(ScriptDefinitionContributor.EP_NAME).extensions.toList() + return fromDeprecatedEP + fromNewEp + } fun reloadScriptDefinitions() = lock.write { definitionsByContributor = getContributors().associateByTo(mutableMapOf(), { it }, { it.safeGetDefinitions() }) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptTemplatesProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptTemplatesProvider.kt new file mode 100644 index 00000000000..df988490fba --- /dev/null +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/ScriptTemplatesProvider.kt @@ -0,0 +1,71 @@ +/* + * Copyright 2010-2017 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.core.script + +import com.intellij.openapi.extensions.ExtensionPointName +import org.jetbrains.kotlin.script.KotlinScriptDefinition +import java.io.File +import kotlin.script.experimental.dependencies.DependenciesResolver + +@Deprecated("Use ScriptDefinitionContributor EP and loadDefinitionsFromTemplates top level function") +interface ScriptTemplatesProvider { + + // for resolving ambiguities + val id: String + + @Deprecated("Parameter isn't used for resolving priorities anymore. " + + "com.intellij.openapi.extensions.LoadingOrder constants can be used to order providers when registered from Intellij plugin.", + ReplaceWith("0")) + val version: Int + get() = 0 + + val isValid: Boolean + + val templateClassNames: Iterable + + val resolver: DependenciesResolver? get() = null + + val filePattern: String? get() = null + + val templateClasspath: List + + // TODO: need to provide a way to specify this in compiler/repl .. etc + /* + * Allows to specify additional jars needed for DependenciesResolver (and not script template). + * Script template dependencies naturally become (part of) dependencies of the script which is not always desired for resolver dependencies. + * i.e. gradle resolver may depend on some jars that 'built.gradle.kts' files should not depend on. + */ + val additionalResolverClasspath: List get() = emptyList() + + val environment: Map? + + companion object { + val EP_NAME: ExtensionPointName = + ExtensionPointName.create("org.jetbrains.kotlin.scriptTemplatesProvider") + } +} + +class ScriptTemplatesProviderAdapter(private val templatesProvider: ScriptTemplatesProvider) : ScriptDefinitionContributor { + override val id: String + get() = templatesProvider.id + + override fun getDefinitions(): List { + return loadDefinitionsFromTemplates( + templatesProvider.templateClassNames.toList(), templatesProvider.templateClasspath, + templatesProvider.environment.orEmpty(), templatesProvider.additionalResolverClasspath) + } +} \ No newline at end of file diff --git a/idea/src/META-INF/extensions/common.xml b/idea/src/META-INF/extensions/common.xml index 5963195110d..d6b9c018e88 100644 --- a/idea/src/META-INF/extensions/common.xml +++ b/idea/src/META-INF/extensions/common.xml @@ -33,6 +33,9 @@ +