JS backend: add option 'output library runtime fiies' for Kotlin Compiler

This commit is contained in:
Michael Nedzelsky
2014-11-20 16:15:28 +03:00
parent a026f6d25e
commit 73db22ae20
5 changed files with 59 additions and 1 deletions
@@ -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"
}
}
@@ -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
@@ -73,7 +73,7 @@
</component>
</children>
</grid>
<grid id="98e8a" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<grid id="98e8a" layout-manager="GridLayoutManager" row-count="5" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<grid row="2" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
@@ -126,6 +126,32 @@
</constraints>
<properties/>
</component>
<component id="b93a8" class="javax.swing.JLabel" binding="labelForOutputDirectory">
<constraints>
<grid row="4" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text resource-bundle="org/jetbrains/jet/plugin/JetBundle" key="kotlin.compiler.js.option.output.copy.dir"/>
</properties>
</component>
<component id="f1f6b" class="javax.swing.JTextField" binding="outputDirectory">
<constraints>
<grid row="4" column="1" row-span="1" col-span="1" vsize-policy="0" hsize-policy="6" anchor="8" fill="1" indent="0" use-parent-layout="false">
<preferred-size width="150" height="-1"/>
</grid>
</constraints>
<properties>
<text value="lib"/>
</properties>
</component>
<component id="bb4ef" class="javax.swing.JCheckBox" binding="copyRuntimeFilesCheckBox">
<constraints>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<text resource-bundle="org/jetbrains/jet/plugin/JetBundle" key="kotlin.compiler.js.option.output.copy.files"/>
</properties>
</component>
</children>
</grid>
</children>
@@ -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());
@@ -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<String>()
JpsJsModuleUtils.getLibraryFiles(representativeTarget, libraryFilesToCopy)
LibraryUtils.copyJsFilesFromLibraries(libraryFilesToCopy, outputLibraryRuntimeDirectory)
}
return outputItemCollector
}