From 9f11564708191dd32f211ce5df1cb600ca0d3a6a Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 4 Jan 2017 00:39:08 +0300 Subject: [PATCH] Deprecate version field and preserve order of script providers in extension point It's impossible to guess the order of the final list when there're providers from different vendors as they might have different versioning systems. com.intellij.openapi.extensions.LoadingOrder constants can be used by plugins authors to resolve priority issues. --- .../scriptTemplateProviderExtensionPoint.kt | 16 +++++++++------- .../core/script/gradleScriptTemplateProvider.kt | 1 - idea/src/META-INF/extensions/ide.xml | 9 +++++++-- .../scriptTemplatesFromCompilerSettings.kt | 1 - .../script/AbstractScriptConfigurationTest.kt | 1 - 5 files changed, 16 insertions(+), 12 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt index 2aaf6a9e71b..30975500741 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/script/scriptTemplateProviderExtensionPoint.kt @@ -27,7 +27,11 @@ interface ScriptTemplatesProvider { // for resolving ambiguities val id: String - val version: Int + + @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 @@ -42,7 +46,8 @@ interface ScriptTemplatesProvider { val environment: Map? companion object { - val EP_NAME = ExtensionPointName.create("org.jetbrains.kotlin.scriptTemplatesProvider") + val EP_NAME: ExtensionPointName = + ExtensionPointName.create("org.jetbrains.kotlin.scriptTemplatesProvider") } } @@ -55,16 +60,13 @@ fun makeScriptDefsFromTemplatesProviderExtensions(project: Project, fun makeScriptDefsFromTemplatesProviders(providers: Iterable, errorsHandler: ((ScriptTemplatesProvider, Exception) -> Unit) = { ep, ex -> throw ex } ): List { - val idToVersion = hashMapOf() - return providers.filter { it.isValid }.sortedByDescending { it.version }.flatMap { provider -> + return providers.filter { it.isValid }.flatMap { provider -> try { - idToVersion.get(provider.id)?.let { ver -> errorsHandler(provider, RuntimeException("Conflicting scriptTemplatesProvider ${provider.id}, using one with version $ver")) } Logger.getInstance("makeScriptDefsFromTemplatesProviders") .info("[kts] loading script definitions ${provider.templateClassNames} using cp: ${provider.dependenciesClasspath.joinToString(File.pathSeparator)}") val loader = URLClassLoader(provider.dependenciesClasspath.map { File(it).toURI().toURL() }.toTypedArray(), ScriptTemplatesProvider::class.java.classLoader) provider.templateClassNames.map { val cl = loader.loadClass(it) - idToVersion.put(provider.id, provider.version) KotlinScriptDefinitionFromAnnotatedTemplate(cl.kotlin, provider.resolver, provider.filePattern, provider.environment) } } @@ -73,4 +75,4 @@ fun makeScriptDefsFromTemplatesProviders(providers: Iterable() } } -} +} \ No newline at end of file diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/gradleScriptTemplateProvider.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/gradleScriptTemplateProvider.kt index 227a4cbdb30..07bd1beaa28 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/gradleScriptTemplateProvider.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/script/gradleScriptTemplateProvider.kt @@ -55,7 +55,6 @@ class GradleScriptTemplatesProvider(project: Project): ScriptTemplatesProvider { } override val id: String = "Gradle" - override val version: Int = 1 override val isValid: Boolean get() = gradleExeSettings?.gradleHome != null override val templateClassNames: Iterable = listOf("org.gradle.script.lang.kotlin.KotlinBuildScript") diff --git a/idea/src/META-INF/extensions/ide.xml b/idea/src/META-INF/extensions/ide.xml index 228c42d5e73..26952482109 100644 --- a/idea/src/META-INF/extensions/ide.xml +++ b/idea/src/META-INF/extensions/ide.xml @@ -15,7 +15,12 @@ - - + + + diff --git a/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt b/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt index 79b57cc1a00..4e5fb3e7544 100644 --- a/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt +++ b/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt @@ -27,7 +27,6 @@ class ScriptTemplatesFromCompilerSettingsProvider(project: Project): ScriptTempl private val kotlinSettings = KotlinCompilerSettings.getInstance(project).settings override val id: String = "KotlinCompilerScriptTemplatesSettings" - override val version: Int = 1 override val isValid: Boolean = kotlinSettings.scriptTemplates.isNotBlank() override val templateClassNames: Iterable get() = kotlinSettings.scriptTemplates.split(',', ' ') diff --git a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt index 71dbe5e989a..2732bb2aa4e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/script/AbstractScriptConfigurationTest.kt @@ -141,7 +141,6 @@ class TestScriptTemplateProvider( override val environment: Map ) : ScriptTemplatesProvider { override val id = "Test" - override val version = 0 override val isValid = true override val templateClassNames = listOf("custom.scriptDefinition.Template") override val dependenciesClasspath = listOf(compiledTemplateDir.canonicalPath)