From ce6966b4868babb785e686e77c06fd58bbf06d25 Mon Sep 17 00:00:00 2001 From: Ilya Chernikov Date: Mon, 8 Aug 2016 16:08:34 +0200 Subject: [PATCH] Add settings to compiler to specify templates to load, add templates provider using the settings --- .../kotlin/config/CompilerSettings.kt | 2 + idea/src/META-INF/extensions/ide.xml | 1 + .../KotlinCompilerConfigurableTab.form | 36 ++++++++++++++++- .../KotlinCompilerConfigurableTab.java | 10 +++++ .../scriptTemplatesFromCompilerSettings.kt | 40 +++++++++++++++++++ 5 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/CompilerSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/CompilerSettings.kt index 2d06cf18557..1fedf41bc12 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/CompilerSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/CompilerSettings.kt @@ -18,6 +18,8 @@ package org.jetbrains.kotlin.config class CompilerSettings { var additionalArguments: String = DEFAULT_ADDITIONAL_ARGUMENTS + var scriptTemplates: String = "" + var scriptTemplatesClasspath: String = "" var copyJsLibraryFiles: Boolean = true var outputDirectoryForJsLibraryFiles: String = DEFAULT_OUTPUT_DIRECTORY diff --git a/idea/src/META-INF/extensions/ide.xml b/idea/src/META-INF/extensions/ide.xml index f0a1013199d..9acb744fb53 100644 --- a/idea/src/META-INF/extensions/ide.xml +++ b/idea/src/META-INF/extensions/ide.xml @@ -12,5 +12,6 @@ + diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form index d64d003e1c5..7304eff2434 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.form @@ -13,7 +13,7 @@ - + @@ -56,6 +56,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java index 6e7bf06bec7..0eaced7d246 100644 --- a/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java +++ b/idea/src/org/jetbrains/kotlin/idea/compiler/configuration/KotlinCompilerConfigurableTab.java @@ -67,6 +67,10 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co private JCheckBox keepAliveCheckBox; private JCheckBox enablePreciseIncrementalCheckBox; private JComboBox moduleKindComboBox; + private JTextField scriptTemplatesField; + private JTextField scriptTemplatesClasspathField; + private JLabel scriptTemplatesLabel; + private JLabel scriptTemplatesClasspathLabel; static { moduleKindDescriptions.put(K2JsArgumentConstants.MODULE_PLAIN, "Plain (put to global scope)"); @@ -143,6 +147,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co public boolean isModified() { return ComparingUtils.isModified(generateNoWarningsCheckBox, commonCompilerArguments.suppressWarnings) || ComparingUtils.isModified(additionalArgsOptionsField, compilerSettings.getAdditionalArguments()) || + ComparingUtils.isModified(scriptTemplatesField, compilerSettings.getScriptTemplates()) || + ComparingUtils.isModified(scriptTemplatesClasspathField, compilerSettings.getScriptTemplatesClasspath()) || ComparingUtils.isModified(copyRuntimeFilesCheckBox, compilerSettings.getCopyJsLibraryFiles()) || ComparingUtils.isModified(outputDirectory, compilerSettings.getOutputDirectoryForJsLibraryFiles()) || @@ -164,6 +170,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co public void apply() throws ConfigurationException { commonCompilerArguments.suppressWarnings = generateNoWarningsCheckBox.isSelected(); compilerSettings.setAdditionalArguments(additionalArgsOptionsField.getText()); + compilerSettings.setScriptTemplates(scriptTemplatesField.getText()); + compilerSettings.setScriptTemplatesClasspath(scriptTemplatesClasspathField.getText()); compilerSettings.setCopyJsLibraryFiles(copyRuntimeFilesCheckBox.isSelected()); compilerSettings.setOutputDirectoryForJsLibraryFiles(outputDirectory.getText()); @@ -195,6 +203,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co public void reset() { generateNoWarningsCheckBox.setSelected(commonCompilerArguments.suppressWarnings); additionalArgsOptionsField.setText(compilerSettings.getAdditionalArguments()); + scriptTemplatesField.setText(compilerSettings.getScriptTemplates()); + scriptTemplatesClasspathField.setText(compilerSettings.getScriptTemplatesClasspath()); copyRuntimeFilesCheckBox.setSelected(compilerSettings.getCopyJsLibraryFiles()); outputDirectory.setText(compilerSettings.getOutputDirectoryForJsLibraryFiles()); diff --git a/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt b/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt new file mode 100644 index 00000000000..29cfe5a2726 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/script/scriptTemplatesFromCompilerSettings.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.script + +import com.intellij.openapi.project.Project +import org.jetbrains.kotlin.idea.compiler.configuration.KotlinCompilerSettings +import org.jetbrains.kotlin.idea.core.script.topLevelSectionCodeTextTokens +import org.jetbrains.kotlin.script.ScriptTemplatesProvider +import java.io.File + +class ScriptTemplatesFromCompilerSettingsProvider(project: Project): ScriptTemplatesProvider +{ + private val kotlinSettings = KotlinCompilerSettings.getInstance(project).settings + + override val id: String = "KotlinCompilerScriptTemplatesSettings" + override val version: Int = 1 + override val isValid: Boolean = kotlinSettings.scriptTemplates.isNotBlank() + + override val templateClassNames: Iterable get() = kotlinSettings.scriptTemplates.split(',', ' ') + override val dependenciesClasspath: Iterable get() = kotlinSettings.scriptTemplatesClasspath.split(File.pathSeparator) + override val environment: Map? by lazy { mapOf( + "projectRoot" to (project.basePath ?: project.baseDir.canonicalPath)?.let(::File), + "getScriptSectionTokens" to ::topLevelSectionCodeTextTokens) + } +} +