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()