From 9ab4d727e9d91c997b8878456787a12414a79ebd Mon Sep 17 00:00:00 2001 From: Natalia Selezneva Date: Fri, 13 Jul 2018 09:44:03 +0300 Subject: [PATCH] Provide UI for changing the order of script definitions applicability ^KT-24465 In Progress --- .../core/script/ScriptDefinitionsManager.kt | 19 +++++++++++++++---- .../KotlinScriptDefinitionsModel.kt | 2 +- .../KotlinScriptingSettingsConfigurable.java | 5 +++-- 3 files changed, 19 insertions(+), 7 deletions(-) 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 a00711ec1dd..e91a8300673 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 @@ -62,7 +62,7 @@ import kotlin.script.templates.standard.ScriptTemplateWithArgs class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinitionProvider() { private var definitionsByContributor = mutableMapOf>() - private var definitions: Sequence? = null + private var definitions: List? = null private val scriptDefinitionsCacheLock = ReentrantReadWriteLock() private val scriptDefinitionsCache = SLRUMap(10, 10) @@ -102,10 +102,10 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit override val currentDefinitions: Sequence get() = - definitions ?: kotlin.run { + (definitions ?: kotlin.run { reloadScriptDefinitions() definitions!! - } + }).asSequence() private fun getContributors(): List { @Suppress("DEPRECATION") @@ -124,6 +124,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit updateDefinitions() } + fun saveNewDefinitions(newDefinitions: List) = lock.write { + definitions = newDefinitions + + clearCache() + ServiceManager.getService(project, ScriptDependenciesCache::class.java).clear() + EditorNotifications.getInstance(project).updateAllNotifications() + } + fun getAllDefinitions() = currentDefinitions.toList() override fun getDefaultScriptDefinition(): KotlinScriptDefinition { @@ -132,7 +140,10 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit private fun updateDefinitions() { assert(lock.isWriteLocked) { "updateDefinitions should only be called under the write lock" } - definitions = definitionsByContributor.values.flattenTo(mutableListOf()).asSequence() + + definitions = definitionsByContributor.values.flattenTo(mutableListOf()).sortedBy { + definitions?.indexOf(it) ?: 1000 + } val fileTypeManager = FileTypeManager.getInstance() diff --git a/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptDefinitionsModel.kt b/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptDefinitionsModel.kt index 381e621a0a2..92fd1726d7b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptDefinitionsModel.kt +++ b/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptDefinitionsModel.kt @@ -13,7 +13,7 @@ import org.jetbrains.kotlin.script.KotlinScriptDefinition import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate import org.jetbrains.kotlin.scripting.compiler.plugin.KotlinScriptDefinitionAdapterFromNewAPIBase -class KotlinScriptDefinitionsModel(definitions: ArrayList) : +class KotlinScriptDefinitionsModel(definitions: MutableList) : ListTableModel( arrayOf( ScriptDefinitionName(), diff --git a/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptingSettingsConfigurable.java b/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptingSettingsConfigurable.java index 843794a32e9..5c41191cb83 100644 --- a/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptingSettingsConfigurable.java +++ b/idea/src/org/jetbrains/kotlin/idea/script/configuration/KotlinScriptingSettingsConfigurable.java @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings; import javax.swing.*; import java.awt.*; +import java.util.Collections; public class KotlinScriptingSettingsConfigurable implements SearchableConfigurable, Configurable.NoScroll { private JPanel root; @@ -61,14 +62,14 @@ public class KotlinScriptingSettingsConfigurable implements SearchableConfigurab settings.setAutoReloadEnabled(scriptDependenciesAutoReload.isSelected()); - // todo + manager.saveNewDefinitions(Collections.unmodifiableList(model.getItems())); } @Override public void reset() { scriptDependenciesAutoReload.setSelected(settings.isAutoReloadEnabled()); - // todo + model.setItems(Lists.newArrayList(manager.getAllDefinitions())); } @Override