Provide UI for changing the order of script definitions applicability
^KT-24465 In Progress
This commit is contained in:
+15
-4
@@ -62,7 +62,7 @@ import kotlin.script.templates.standard.ScriptTemplateWithArgs
|
|||||||
|
|
||||||
class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinitionProvider() {
|
class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinitionProvider() {
|
||||||
private var definitionsByContributor = mutableMapOf<ScriptDefinitionContributor, List<KotlinScriptDefinition>>()
|
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 scriptDefinitionsCacheLock = ReentrantReadWriteLock()
|
||||||
private val scriptDefinitionsCache = SLRUMap<String, KotlinScriptDefinition>(10, 10)
|
private val scriptDefinitionsCache = SLRUMap<String, KotlinScriptDefinition>(10, 10)
|
||||||
@@ -102,10 +102,10 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
|
|
||||||
override val currentDefinitions: Sequence<KotlinScriptDefinition>
|
override val currentDefinitions: Sequence<KotlinScriptDefinition>
|
||||||
get() =
|
get() =
|
||||||
definitions ?: kotlin.run {
|
(definitions ?: kotlin.run {
|
||||||
reloadScriptDefinitions()
|
reloadScriptDefinitions()
|
||||||
definitions!!
|
definitions!!
|
||||||
}
|
}).asSequence()
|
||||||
|
|
||||||
private fun getContributors(): List<ScriptDefinitionContributor> {
|
private fun getContributors(): List<ScriptDefinitionContributor> {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
@@ -124,6 +124,14 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
updateDefinitions()
|
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()
|
fun getAllDefinitions() = currentDefinitions.toList()
|
||||||
|
|
||||||
override fun getDefaultScriptDefinition(): KotlinScriptDefinition {
|
override fun getDefaultScriptDefinition(): KotlinScriptDefinition {
|
||||||
@@ -132,7 +140,10 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
|
|
||||||
private fun updateDefinitions() {
|
private fun updateDefinitions() {
|
||||||
assert(lock.isWriteLocked) { "updateDefinitions should only be called under the write lock" }
|
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()
|
val fileTypeManager = FileTypeManager.getInstance()
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -13,7 +13,7 @@ import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
|||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
|
import org.jetbrains.kotlin.script.KotlinScriptDefinitionFromAnnotatedTemplate
|
||||||
import org.jetbrains.kotlin.scripting.compiler.plugin.KotlinScriptDefinitionAdapterFromNewAPIBase
|
import org.jetbrains.kotlin.scripting.compiler.plugin.KotlinScriptDefinitionAdapterFromNewAPIBase
|
||||||
|
|
||||||
class KotlinScriptDefinitionsModel(definitions: ArrayList<KotlinScriptDefinition>) :
|
class KotlinScriptDefinitionsModel(definitions: MutableList<KotlinScriptDefinition>) :
|
||||||
ListTableModel<KotlinScriptDefinition>(
|
ListTableModel<KotlinScriptDefinition>(
|
||||||
arrayOf(
|
arrayOf(
|
||||||
ScriptDefinitionName(),
|
ScriptDefinitionName(),
|
||||||
|
|||||||
+3
-2
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings;
|
|||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.util.Collections;
|
||||||
|
|
||||||
public class KotlinScriptingSettingsConfigurable implements SearchableConfigurable, Configurable.NoScroll {
|
public class KotlinScriptingSettingsConfigurable implements SearchableConfigurable, Configurable.NoScroll {
|
||||||
private JPanel root;
|
private JPanel root;
|
||||||
@@ -61,14 +62,14 @@ public class KotlinScriptingSettingsConfigurable implements SearchableConfigurab
|
|||||||
settings.setAutoReloadEnabled(scriptDependenciesAutoReload.isSelected());
|
settings.setAutoReloadEnabled(scriptDependenciesAutoReload.isSelected());
|
||||||
|
|
||||||
|
|
||||||
// todo
|
manager.saveNewDefinitions(Collections.unmodifiableList(model.getItems()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset() {
|
public void reset() {
|
||||||
scriptDependenciesAutoReload.setSelected(settings.isAutoReloadEnabled());
|
scriptDependenciesAutoReload.setSelected(settings.isAutoReloadEnabled());
|
||||||
|
|
||||||
// todo
|
model.setItems(Lists.newArrayList(manager.getAllDefinitions()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user