Provide UI for changing the order of script definitions applicability

^KT-24465 In Progress
This commit is contained in:
Natalia Selezneva
2018-07-13 09:44:03 +03:00
parent 2df8adc50b
commit 9ab4d727e9
3 changed files with 19 additions and 7 deletions
@@ -62,7 +62,7 @@ import kotlin.script.templates.standard.ScriptTemplateWithArgs
class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinitionProvider() {
private var definitionsByContributor = mutableMapOf<ScriptDefinitionContributor, List<KotlinScriptDefinition>>()
private var definitions: Sequence<KotlinScriptDefinition>? = null
private var definitions: List<KotlinScriptDefinition>? = null
private val scriptDefinitionsCacheLock = ReentrantReadWriteLock()
private val scriptDefinitionsCache = SLRUMap<String, KotlinScriptDefinition>(10, 10)
@@ -102,10 +102,10 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
override val currentDefinitions: Sequence<KotlinScriptDefinition>
get() =
definitions ?: kotlin.run {
(definitions ?: kotlin.run {
reloadScriptDefinitions()
definitions!!
}
}).asSequence()
private fun getContributors(): List<ScriptDefinitionContributor> {
@Suppress("DEPRECATION")
@@ -124,6 +124,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
updateDefinitions()
}
fun saveNewDefinitions(newDefinitions: List<KotlinScriptDefinition>) = 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()
@@ -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<KotlinScriptDefinition>) :
class KotlinScriptDefinitionsModel(definitions: MutableList<KotlinScriptDefinition>) :
ListTableModel<KotlinScriptDefinition>(
arrayOf(
ScriptDefinitionName(),
@@ -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