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)
+ }
+}
+