diff --git a/ide-compiler-runner/src/org/jetbrains/jet/compiler/CompilerSettings.kt b/ide-compiler-runner/src/org/jetbrains/jet/compiler/CompilerSettings.kt index eb7703176f3..dbb2fce5c2e 100644 --- a/ide-compiler-runner/src/org/jetbrains/jet/compiler/CompilerSettings.kt +++ b/ide-compiler-runner/src/org/jetbrains/jet/compiler/CompilerSettings.kt @@ -18,8 +18,11 @@ package org.jetbrains.jet.compiler public class CompilerSettings { public var additionalArguments: String = DEFAULT_ADDITIONAL_ARGUMENTS + public var copyJsLibraryFiles: Boolean = true + public var outputDirectoryForJsLibraryFiles: String = DEFAULT_OUTPUT_DIRECTORY class object { private val DEFAULT_ADDITIONAL_ARGUMENTS = "-version" + private val DEFAULT_OUTPUT_DIRECTORY = "lib" } } diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties index 799ec23d69b..66141731599 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -437,6 +437,8 @@ kotlin.compiler.js.option.output.prefix=Output file &prefix: kotlin.compiler.js.option.output.postfix=Output file p&ostfix: kotlin.compiler.js.option.output.prefix.browse.title=Choose output file prefix kotlin.compiler.js.option.output.postfix.browse.title=Choose output file postfix +kotlin.compiler.js.option.output.copy.files=&Copy library runtime files +kotlin.compiler.js.option.output.copy.dir=O&utput directory for library &runtime files: # Debugger debugger.filter.ignore.internal.classes=Do not step into specific Kotlin classes diff --git a/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.form b/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.form index 45092739810..205cfa97832 100644 --- a/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.form +++ b/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.form @@ -73,7 +73,7 @@ - + @@ -126,6 +126,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.java b/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.java index 7604a1c53f5..150884b877a 100644 --- a/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.java +++ b/idea/src/org/jetbrains/jet/plugin/compiler/configuration/KotlinCompilerConfigurableTab.java @@ -36,6 +36,8 @@ import org.jetbrains.jet.compiler.CompilerSettings; import org.jetbrains.jet.plugin.JetBundle; import javax.swing.*; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Configurable.NoScroll{ private final CommonCompilerArguments commonCompilerArguments; @@ -53,6 +55,9 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co private JLabel labelForOutputPrefixFile; private JLabel labelForOutputPostfixFile; private JCheckBox incrementalCompilationCheckBox; + private JLabel labelForOutputDirectory; + private JTextField outputDirectory; + private JCheckBox copyRuntimeFilesCheckBox; public KotlinCompilerConfigurableTab(ConfigurableEP ep) { this.extPoint = ep; @@ -67,6 +72,15 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co JetBundle.message("kotlin.compiler.js.option.output.prefix.browse.title")); setupFileChooser(labelForOutputPostfixFile, outputPostfixFile, JetBundle.message("kotlin.compiler.js.option.output.postfix.browse.title")); + + labelForOutputDirectory.setLabelFor(outputDirectory); + copyRuntimeFilesCheckBox.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(@NotNull ChangeEvent e) { + outputDirectory.setEnabled(copyRuntimeFilesCheckBox.isSelected()); + labelForOutputDirectory.setEnabled(copyRuntimeFilesCheckBox.isSelected()); + } + }); } @NotNull @@ -91,6 +105,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co public boolean isModified() { return ComparingUtils.isModified(generateNoWarningsCheckBox, commonCompilerArguments.suppressWarnings) || ComparingUtils.isModified(additionalArgsOptionsField, compilerSettings.getAdditionalArguments()) || + ComparingUtils.isModified(copyRuntimeFilesCheckBox, compilerSettings.getCopyJsLibraryFiles()) || + ComparingUtils.isModified(outputDirectory, compilerSettings.getOutputDirectoryForJsLibraryFiles()) || ComparingUtils.isModified(incrementalCompilationCheckBox, compilerWorkspaceSettings.getIncrementalCompilationEnabled()) || @@ -103,6 +119,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co public void apply() throws ConfigurationException { commonCompilerArguments.suppressWarnings = generateNoWarningsCheckBox.isSelected(); compilerSettings.setAdditionalArguments(additionalArgsOptionsField.getText()); + compilerSettings.setCopyJsLibraryFiles(copyRuntimeFilesCheckBox.isSelected()); + compilerSettings.setOutputDirectoryForJsLibraryFiles(outputDirectory.getText()); compilerWorkspaceSettings.setIncrementalCompilationEnabled(incrementalCompilationCheckBox.isSelected()); @@ -115,6 +133,8 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co public void reset() { generateNoWarningsCheckBox.setSelected(commonCompilerArguments.suppressWarnings); additionalArgsOptionsField.setText(compilerSettings.getAdditionalArguments()); + copyRuntimeFilesCheckBox.setSelected(compilerSettings.getCopyJsLibraryFiles()); + outputDirectory.setText(compilerSettings.getOutputDirectoryForJsLibraryFiles()); incrementalCompilationCheckBox.setSelected(compilerWorkspaceSettings.getIncrementalCompilationEnabled()); diff --git a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt index f396d4524e1..b4ddb05d95b 100644 --- a/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt +++ b/jps-plugin/src/org/jetbrains/jet/jps/build/KotlinBuilder.kt @@ -60,6 +60,7 @@ import org.jetbrains.jet.compiler.CompilerSettings import org.jetbrains.jps.model.JpsProject import org.jetbrains.jet.compiler.runner.OutputItemsCollector import org.jetbrains.jet.compiler.runner.SimpleOutputItem +import org.jetbrains.jet.utils.LibraryUtils public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR) { class object { @@ -308,6 +309,12 @@ public class KotlinBuilder : ModuleLevelBuilder(BuilderCategory.SOURCE_PROCESSOR val k2JsArguments = JpsKotlinCompilerSettings.getK2JsCompilerArguments(project) runK2JsCompiler(commonArguments, k2JsArguments, compilerSettings, messageCollector, environment, outputItemCollector, sourceFiles, libraryFiles, outputFile) + if (compilerSettings.copyJsLibraryFiles) { + val outputLibraryRuntimeDirectory = File(outputDir, compilerSettings.outputDirectoryForJsLibraryFiles).getAbsolutePath() + val libraryFilesToCopy = arrayListOf() + JpsJsModuleUtils.getLibraryFiles(representativeTarget, libraryFilesToCopy) + LibraryUtils.copyJsFilesFromLibraries(libraryFilesToCopy, outputLibraryRuntimeDirectory) + } return outputItemCollector }