Allow to switch off script definitions
^KT-24465 Fixed
This commit is contained in:
+7
-2
@@ -108,7 +108,7 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
(definitions ?: kotlin.run {
|
(definitions ?: kotlin.run {
|
||||||
reloadScriptDefinitions()
|
reloadScriptDefinitions()
|
||||||
definitions!!
|
definitions!!
|
||||||
}).asSequence()
|
}).asSequence().filter { KotlinScriptingSettings.getInstance(project).isScriptDefinitionEnabled(it) }
|
||||||
|
|
||||||
private fun getContributors(): List<ScriptDefinitionContributor> {
|
private fun getContributors(): List<ScriptDefinitionContributor> {
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
@@ -133,7 +133,12 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
|||||||
updateDefinitions()
|
updateDefinitions()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getAllDefinitions() = currentDefinitions.toList()
|
fun getAllDefinitions(): List<KotlinScriptDefinition> {
|
||||||
|
return definitions ?: kotlin.run {
|
||||||
|
reloadScriptDefinitions()
|
||||||
|
definitions!!
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun getDefaultScriptDefinition(): KotlinScriptDefinition {
|
override fun getDefaultScriptDefinition(): KotlinScriptDefinition {
|
||||||
return StandardIdeScriptDefinition(project)
|
return StandardIdeScriptDefinition(project)
|
||||||
|
|||||||
+31
-13
@@ -29,7 +29,7 @@ class KotlinScriptingSettings : PersistentStateComponent<Element> {
|
|||||||
*/
|
*/
|
||||||
var suppressDefinitionsCheck = false
|
var suppressDefinitionsCheck = false
|
||||||
|
|
||||||
private var scriptDefinitions = linkedMapOf<KotlinScriptDefinitionKey, Int>()
|
private var scriptDefinitions = linkedMapOf<KotlinScriptDefinitionKey, KotlinScriptDefinitionValue>()
|
||||||
|
|
||||||
override fun getState(): Element {
|
override fun getState(): Element {
|
||||||
val definitionsRootElement = Element("KotlinScriptingSettings")
|
val definitionsRootElement = Element("KotlinScriptingSettings")
|
||||||
@@ -67,21 +67,31 @@ class KotlinScriptingSettings : PersistentStateComponent<Element> {
|
|||||||
|
|
||||||
val scriptDefinitionsList = state.getChildren(SCRIPT_DEFINITION_TAG)
|
val scriptDefinitionsList = state.getChildren(SCRIPT_DEFINITION_TAG)
|
||||||
for (scriptDefinitionElement in scriptDefinitionsList) {
|
for (scriptDefinitionElement in scriptDefinitionsList) {
|
||||||
scriptDefinitions[scriptDefinitionElement.toKey()] = scriptDefinitionElement.getOrderTag()
|
scriptDefinitions[scriptDefinitionElement.toKey()] = scriptDefinitionElement.toValue()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun saveScriptDefinitionsOrder(newScriptDefinitions: List<KotlinScriptDefinition>) {
|
fun setOrder(scriptDefinition: KotlinScriptDefinition, order: Int) {
|
||||||
for ((index, scriptDefinition) in newScriptDefinitions.withIndex()) {
|
scriptDefinitions[scriptDefinition.toKey()] = scriptDefinitions[scriptDefinition.toKey()]?.copy(order = order) ?:
|
||||||
scriptDefinitions[scriptDefinition.toKey()] = index
|
KotlinScriptDefinitionValue(order)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun setEnabled(scriptDefinition: KotlinScriptDefinition, isEnabled: Boolean) {
|
||||||
|
scriptDefinitions[scriptDefinition.toKey()] = scriptDefinitions[scriptDefinition.toKey()]?.copy(isEnabled = isEnabled) ?:
|
||||||
|
KotlinScriptDefinitionValue(scriptDefinitions.size, isEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getScriptDefinitionOrder(scriptDefinition: KotlinScriptDefinition): Int {
|
fun getScriptDefinitionOrder(scriptDefinition: KotlinScriptDefinition): Int {
|
||||||
return scriptDefinitions[scriptDefinition.toKey()] ?: Integer.MAX_VALUE
|
return scriptDefinitions[scriptDefinition.toKey()]?.order ?: Integer.MAX_VALUE
|
||||||
|
}
|
||||||
|
|
||||||
|
fun isScriptDefinitionEnabled(scriptDefinition: KotlinScriptDefinition): Boolean {
|
||||||
|
return scriptDefinitions[scriptDefinition.toKey()]?.isEnabled ?: true
|
||||||
}
|
}
|
||||||
|
|
||||||
private data class KotlinScriptDefinitionKey(val definitionName: String, val className: String)
|
private data class KotlinScriptDefinitionKey(val definitionName: String, val className: String)
|
||||||
|
private data class KotlinScriptDefinitionValue(val order: Int, val isEnabled: Boolean = true)
|
||||||
|
|
||||||
private fun Element.toKey() = KotlinScriptDefinitionKey(
|
private fun Element.toKey() = KotlinScriptDefinitionKey(
|
||||||
getAttributeValue(KotlinScriptDefinitionKey::definitionName.name),
|
getAttributeValue(KotlinScriptDefinitionKey::definitionName.name),
|
||||||
@@ -91,19 +101,28 @@ class KotlinScriptingSettings : PersistentStateComponent<Element> {
|
|||||||
private fun KotlinScriptDefinition.toKey() =
|
private fun KotlinScriptDefinition.toKey() =
|
||||||
KotlinScriptDefinitionKey(this.name, this::class.qualifiedName ?: "unknown")
|
KotlinScriptDefinitionKey(this.name, this::class.qualifiedName ?: "unknown")
|
||||||
|
|
||||||
private fun Element.addScriptDefinitionContentElement(definition: KotlinScriptDefinitionKey, order: Int) {
|
private fun Element.addScriptDefinitionContentElement(definition: KotlinScriptDefinitionKey, settings: KotlinScriptDefinitionValue) {
|
||||||
element(SCRIPT_DEFINITION_TAG).apply {
|
element(SCRIPT_DEFINITION_TAG).apply {
|
||||||
attribute(KotlinScriptDefinitionKey::className.name, definition.className)
|
attribute(KotlinScriptDefinitionKey::className.name, definition.className)
|
||||||
attribute(KotlinScriptDefinitionKey::definitionName.name, definition.definitionName)
|
attribute(KotlinScriptDefinitionKey::definitionName.name, definition.definitionName)
|
||||||
|
|
||||||
element(SCRIPT_DEFINITION_ORDER_TAG).apply {
|
element(KotlinScriptDefinitionValue::order.name).apply {
|
||||||
text = order.toString()
|
text = settings.order.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!settings.isEnabled) {
|
||||||
|
element(KotlinScriptDefinitionValue::isEnabled.name).apply {
|
||||||
|
text = settings.isEnabled.toString()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun Element.getOrderTag(): Int {
|
private fun Element.toValue(): KotlinScriptDefinitionValue {
|
||||||
return getChildText(SCRIPT_DEFINITION_ORDER_TAG)?.toInt() ?: Integer.MAX_VALUE
|
val order = getChildText(KotlinScriptDefinitionValue::order.name)?.toInt() ?: Integer.MAX_VALUE
|
||||||
|
val isEnabled = getChildText(KotlinScriptDefinitionValue::isEnabled.name)?.toBoolean() ?: true
|
||||||
|
|
||||||
|
return KotlinScriptDefinitionValue(order, isEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@@ -111,7 +130,6 @@ class KotlinScriptingSettings : PersistentStateComponent<Element> {
|
|||||||
ServiceManager.getService(project, KotlinScriptingSettings::class.java)
|
ServiceManager.getService(project, KotlinScriptingSettings::class.java)
|
||||||
|
|
||||||
private const val SCRIPT_DEFINITION_TAG = "scriptDefinition"
|
private const val SCRIPT_DEFINITION_TAG = "scriptDefinition"
|
||||||
private const val SCRIPT_DEFINITION_ORDER_TAG = "order"
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+44
-10
@@ -5,36 +5,70 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.idea.script.configuration
|
package org.jetbrains.kotlin.idea.script.configuration
|
||||||
|
|
||||||
|
import com.intellij.ui.BooleanTableCellEditor
|
||||||
|
import com.intellij.ui.BooleanTableCellRenderer
|
||||||
import com.intellij.util.ui.ColumnInfo
|
import com.intellij.util.ui.ColumnInfo
|
||||||
import com.intellij.util.ui.ListTableModel
|
import com.intellij.util.ui.ListTableModel
|
||||||
import org.jetbrains.kotlin.idea.core.script.StandardIdeScriptDefinition
|
import org.jetbrains.kotlin.idea.core.script.StandardIdeScriptDefinition
|
||||||
|
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings
|
||||||
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
import org.jetbrains.kotlin.parsing.KotlinParserDefinition
|
||||||
import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
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: MutableList<KotlinScriptDefinition>) :
|
class KotlinScriptDefinitionsModelDescriptor(val definition: KotlinScriptDefinition, var isEnabled: Boolean)
|
||||||
ListTableModel<KotlinScriptDefinition>(
|
|
||||||
|
class KotlinScriptDefinitionsModel private constructor(definitions: MutableList<KotlinScriptDefinitionsModelDescriptor>) :
|
||||||
|
ListTableModel<KotlinScriptDefinitionsModelDescriptor>(
|
||||||
arrayOf(
|
arrayOf(
|
||||||
ScriptDefinitionName(),
|
ScriptDefinitionName(),
|
||||||
ScriptDefinitionPattern()
|
ScriptDefinitionPattern(),
|
||||||
|
ScriptDefinitionIsEnabled()
|
||||||
),
|
),
|
||||||
definitions,
|
definitions,
|
||||||
0
|
0
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private class ScriptDefinitionName : ColumnInfo<KotlinScriptDefinition, String>("Name") {
|
fun getDefinitions() = items.map { it.definition }
|
||||||
override fun valueOf(item: KotlinScriptDefinition) = item.name
|
fun setDefinitions(definitions: List<KotlinScriptDefinition>, settings: KotlinScriptingSettings) {
|
||||||
|
items = definitions.mapTo(arrayListOf()) { KotlinScriptDefinitionsModelDescriptor(it, settings.isScriptDefinitionEnabled(it)) }
|
||||||
}
|
}
|
||||||
|
|
||||||
private class ScriptDefinitionPattern : ColumnInfo<KotlinScriptDefinition, String>("Pattern/Extension") {
|
private class ScriptDefinitionName : ColumnInfo<KotlinScriptDefinitionsModelDescriptor, String>("Name") {
|
||||||
override fun valueOf(item: KotlinScriptDefinition): String {
|
override fun valueOf(item: KotlinScriptDefinitionsModelDescriptor) = item.definition.name
|
||||||
return when (item) {
|
}
|
||||||
is KotlinScriptDefinitionFromAnnotatedTemplate -> item.scriptFilePattern.pattern
|
|
||||||
is KotlinScriptDefinitionAdapterFromNewAPIBase -> item.fileExtension
|
private class ScriptDefinitionPattern : ColumnInfo<KotlinScriptDefinitionsModelDescriptor, String>("Pattern/Extension") {
|
||||||
|
override fun valueOf(item: KotlinScriptDefinitionsModelDescriptor): String {
|
||||||
|
val definition = item.definition
|
||||||
|
return when (definition) {
|
||||||
|
is KotlinScriptDefinitionFromAnnotatedTemplate -> definition.scriptFilePattern.pattern
|
||||||
|
is KotlinScriptDefinitionAdapterFromNewAPIBase -> definition.fileExtension
|
||||||
is StandardIdeScriptDefinition -> KotlinParserDefinition.STD_SCRIPT_EXT
|
is StandardIdeScriptDefinition -> KotlinParserDefinition.STD_SCRIPT_EXT
|
||||||
else -> ""
|
else -> ""
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class ScriptDefinitionIsEnabled : ColumnInfo<KotlinScriptDefinitionsModelDescriptor, Boolean>("Is Enabled") {
|
||||||
|
override fun valueOf(item: KotlinScriptDefinitionsModelDescriptor): Boolean = item.isEnabled
|
||||||
|
override fun setValue(item: KotlinScriptDefinitionsModelDescriptor, value: Boolean) {
|
||||||
|
item.isEnabled = value
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun getEditor(item: KotlinScriptDefinitionsModelDescriptor?) = BooleanTableCellEditor()
|
||||||
|
override fun getRenderer(item: KotlinScriptDefinitionsModelDescriptor?) = BooleanTableCellRenderer()
|
||||||
|
override fun isCellEditable(item: KotlinScriptDefinitionsModelDescriptor) = item.definition !is StandardIdeScriptDefinition
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun createModel(definitions: List<KotlinScriptDefinition>, settings: KotlinScriptingSettings): KotlinScriptDefinitionsModel {
|
||||||
|
return KotlinScriptDefinitionsModel(definitions.mapTo(arrayListOf()) {
|
||||||
|
KotlinScriptDefinitionsModelDescriptor(
|
||||||
|
it,
|
||||||
|
settings.isScriptDefinitionEnabled(it)
|
||||||
|
)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+15
-6
@@ -4,7 +4,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.jetbrains.kotlin.idea.script.configuration;
|
package org.jetbrains.kotlin.idea.script.configuration;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.intellij.openapi.options.Configurable;
|
import com.intellij.openapi.options.Configurable;
|
||||||
import com.intellij.openapi.options.SearchableConfigurable;
|
import com.intellij.openapi.options.SearchableConfigurable;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
@@ -15,10 +14,10 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager;
|
import org.jetbrains.kotlin.idea.core.script.ScriptDefinitionsManager;
|
||||||
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings;
|
import org.jetbrains.kotlin.idea.core.script.settings.KotlinScriptingSettings;
|
||||||
|
import org.jetbrains.kotlin.script.KotlinScriptDefinition;
|
||||||
|
|
||||||
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;
|
||||||
@@ -38,7 +37,7 @@ public class KotlinScriptingSettingsConfigurable implements SearchableConfigurab
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public JComponent createComponent() {
|
public JComponent createComponent() {
|
||||||
model = new KotlinScriptDefinitionsModel(Lists.newArrayList(manager.getAllDefinitions()));
|
model = KotlinScriptDefinitionsModel.Companion.createModel(manager.getAllDefinitions(), settings);
|
||||||
|
|
||||||
panelScriptDefinitionsChooser.setLayout(new BorderLayout());
|
panelScriptDefinitionsChooser.setLayout(new BorderLayout());
|
||||||
panelScriptDefinitionsChooser.add(
|
panelScriptDefinitionsChooser.add(
|
||||||
@@ -62,7 +61,12 @@ public class KotlinScriptingSettingsConfigurable implements SearchableConfigurab
|
|||||||
settings.setAutoReloadEnabled(scriptDependenciesAutoReload.isSelected());
|
settings.setAutoReloadEnabled(scriptDependenciesAutoReload.isSelected());
|
||||||
|
|
||||||
if (isScriptDefinitionsChanged()) {
|
if (isScriptDefinitionsChanged()) {
|
||||||
settings.saveScriptDefinitionsOrder(Collections.unmodifiableList(model.getItems()));
|
for (KotlinScriptDefinitionsModelDescriptor item : model.getItems()) {
|
||||||
|
KotlinScriptDefinition definition = item.getDefinition();
|
||||||
|
settings.setOrder(definition, model.getItems().indexOf(item));
|
||||||
|
settings.setEnabled(definition, item.isEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
manager.reorderScriptDefinitions();
|
manager.reorderScriptDefinitions();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -71,11 +75,16 @@ public class KotlinScriptingSettingsConfigurable implements SearchableConfigurab
|
|||||||
public void reset() {
|
public void reset() {
|
||||||
scriptDependenciesAutoReload.setSelected(settings.isAutoReloadEnabled());
|
scriptDependenciesAutoReload.setSelected(settings.isAutoReloadEnabled());
|
||||||
|
|
||||||
model.setItems(Lists.newArrayList(manager.getAllDefinitions()));
|
model.setDefinitions(manager.getAllDefinitions(), settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isScriptDefinitionsChanged() {
|
private boolean isScriptDefinitionsChanged() {
|
||||||
return !model.getItems().equals(manager.getAllDefinitions());
|
for (KotlinScriptDefinitionsModelDescriptor item : model.getItems()) {
|
||||||
|
if (settings.isScriptDefinitionEnabled(item.getDefinition()) != item.isEnabled()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return !model.getDefinitions().equals(manager.getAllDefinitions());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+5
-1
@@ -41,7 +41,11 @@ class MultipleScriptDefinitionsChecker(private val project: Project) : EditorNot
|
|||||||
|
|
||||||
val allApplicableDefinitions = ScriptDefinitionsManager.getInstance(project)
|
val allApplicableDefinitions = ScriptDefinitionsManager.getInstance(project)
|
||||||
.getAllDefinitions()
|
.getAllDefinitions()
|
||||||
.filter { it !is StandardIdeScriptDefinition && it.isScript(ktFile.name) }
|
.filter {
|
||||||
|
it !is StandardIdeScriptDefinition &&
|
||||||
|
it.isScript(ktFile.name) &&
|
||||||
|
KotlinScriptingSettings.getInstance(project).isScriptDefinitionEnabled(it)
|
||||||
|
}
|
||||||
.toList()
|
.toList()
|
||||||
if (allApplicableDefinitions.size < 2) return null
|
if (allApplicableDefinitions.size < 2) return null
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user