Added "Additional command line parameters" to the Kotlin Compiler Settings tab.

This commit is contained in:
Zalim Bashorov
2013-10-23 17:19:35 +04:00
parent 5a28f4e158
commit faa82317b6
15 changed files with 229 additions and 25 deletions
+1
View File
@@ -38,6 +38,7 @@
<element id="module-output" name="util" /> <element id="module-output" name="util" />
<element id="module-output" name="preloader" /> <element id="module-output" name="preloader" />
<element id="file-copy" path="$PROJECT_DIR$/resources/manifest.properties" /> <element id="file-copy" path="$PROJECT_DIR$/resources/manifest.properties" />
<element id="extracted-dir" path="$PROJECT_DIR$/dependencies/cli-parser-1.1.1.jar" path-in-jar="/" />
</element> </element>
</element> </element>
<element id="library" level="project" name="kotlin-runtime" /> <element id="library" level="project" name="kotlin-runtime" />
@@ -0,0 +1,36 @@
/*
* Copyright 2010-2013 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.jet.compiler;
import org.jetbrains.annotations.NotNull;
public class AdditionalCompilerSettings {
private static final String DEFAULT_ADDITIONAL_ARGUMENTS = "-version -printArgs";
@NotNull
private String additionalArguments = DEFAULT_ADDITIONAL_ARGUMENTS;
@NotNull
public String getAdditionalArguments() {
return additionalArguments;
}
public void setAdditionalArguments(@NotNull String additionalArguments) {
this.additionalArguments = additionalArguments;
}
}
@@ -24,6 +24,7 @@ public class SettingConstants {
public static final String KOTLIN_COMMON_COMPILER_SETTINGS_SECTION = "KotlinCommonCompilerSettings"; public static final String KOTLIN_COMMON_COMPILER_SETTINGS_SECTION = "KotlinCommonCompilerSettings";
public static final String KOTLIN_TO_JS_COMPILER_SETTINGS_SECTION = "Kotlin2JsCompilerSettings"; public static final String KOTLIN_TO_JS_COMPILER_SETTINGS_SECTION = "Kotlin2JsCompilerSettings";
public static final String KOTLIN_TO_JVM_COMPILER_SETTINGS_SECTION = "Kotlin2JvmCompilerSettings"; public static final String KOTLIN_TO_JVM_COMPILER_SETTINGS_SECTION = "Kotlin2JvmCompilerSettings";
public static final String KOTLIN_ADDITIONAL_COMPILER_SETTINGS_SECTION = "KotlinAdditionalCompilerSettings";
public static final String KOTLIN_COMPILER_SETTINGS_FILE = "kotlinc.xml"; public static final String KOTLIN_COMPILER_SETTINGS_FILE = "kotlinc.xml";
public static final String KOTLIN_COMPILER_SETTINGS_PATH = PROJECT_CONFIG_DIR + "/" + KOTLIN_COMPILER_SETTINGS_FILE; public static final String KOTLIN_COMPILER_SETTINGS_PATH = PROJECT_CONFIG_DIR + "/" + KOTLIN_COMPILER_SETTINGS_FILE;
@@ -16,6 +16,7 @@
package org.jetbrains.jet.compiler.runner; package org.jetbrains.jet.compiler.runner;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.ArrayUtil; import com.intellij.util.ArrayUtil;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtil;
@@ -29,6 +30,7 @@ import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation;
import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.cli.common.messages.MessageCollectorUtil; import org.jetbrains.jet.cli.common.messages.MessageCollectorUtil;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import java.io.File; import java.io.File;
import java.io.PrintStream; import java.io.PrintStream;
@@ -43,6 +45,7 @@ public class KotlinCompilerRunner {
public static void runK2JvmCompiler( public static void runK2JvmCompiler(
CommonCompilerArguments commonArguments, CommonCompilerArguments commonArguments,
K2JVMCompilerArguments k2jvmArguments, K2JVMCompilerArguments k2jvmArguments,
AdditionalCompilerSettings additionalSettings,
MessageCollector messageCollector, MessageCollector messageCollector,
CompilerEnvironment environment, CompilerEnvironment environment,
File moduleFile, File moduleFile,
@@ -51,12 +54,14 @@ public class KotlinCompilerRunner {
K2JVMCompilerArguments arguments = mergeBeans(commonArguments, k2jvmArguments); K2JVMCompilerArguments arguments = mergeBeans(commonArguments, k2jvmArguments);
setupK2JvmSettings(moduleFile, arguments); setupK2JvmSettings(moduleFile, arguments);
runCompiler(K2JVM_COMPILER, arguments, DEFAULT_K2JVM_ARGUMENTS, messageCollector, collector, environment); runCompiler(K2JVM_COMPILER, arguments, additionalSettings.getAdditionalArguments(),
DEFAULT_K2JVM_ARGUMENTS, messageCollector, collector, environment);
} }
public static void runK2JsCompiler( public static void runK2JsCompiler(
CommonCompilerArguments commonArguments, CommonCompilerArguments commonArguments,
K2JSCompilerArguments k2jsArguments, K2JSCompilerArguments k2jsArguments,
AdditionalCompilerSettings additionalSettings,
MessageCollector messageCollector, MessageCollector messageCollector,
CompilerEnvironment environment, CompilerEnvironment environment,
OutputItemsCollector collector, OutputItemsCollector collector,
@@ -67,18 +72,21 @@ public class KotlinCompilerRunner {
K2JSCompilerArguments arguments = mergeBeans(commonArguments, k2jsArguments); K2JSCompilerArguments arguments = mergeBeans(commonArguments, k2jsArguments);
setupK2JsSettings(outputFile, sourceFiles, libraryFiles, arguments); setupK2JsSettings(outputFile, sourceFiles, libraryFiles, arguments);
runCompiler(K2JS_COMPILER, arguments, DEFAULT_K2JS_ARGUMENTS, messageCollector, collector, environment); runCompiler(K2JS_COMPILER, arguments, additionalSettings.getAdditionalArguments(),
DEFAULT_K2JS_ARGUMENTS, messageCollector, collector, environment);
} }
private static void runCompiler( private static void runCompiler(
final String compilerClassName, final String compilerClassName,
CommonCompilerArguments arguments, CommonCompilerArguments arguments,
String additionalArguments,
CommonCompilerArguments defaultArguments, CommonCompilerArguments defaultArguments,
final MessageCollector messageCollector, final MessageCollector messageCollector,
OutputItemsCollector collector, OutputItemsCollector collector,
final CompilerEnvironment environment final CompilerEnvironment environment
) { ) {
final List<String> argumentsList = ArgumentUtils.convertArgumentsToStringList(arguments, defaultArguments); final List<String> argumentsList = ArgumentUtils.convertArgumentsToStringList(arguments, defaultArguments);
argumentsList.addAll(StringUtil.split(additionalArguments, " "));
CompilerRunnerUtil.outputCompilerMessagesAndHandleExitCode(messageCollector, collector, new Function<PrintStream, Integer>() { CompilerRunnerUtil.outputCompilerMessagesAndHandleExitCode(messageCollector, collector, new Function<PrintStream, Integer>() {
@Override @Override
@@ -125,8 +133,6 @@ public class KotlinCompilerRunner {
private static void setupCommonSettings(CommonCompilerArguments settings) { private static void setupCommonSettings(CommonCompilerArguments settings) {
settings.tags = true; settings.tags = true;
settings.verbose = true; settings.verbose = true;
settings.version = true;
settings.printArgs = true;
} }
private static void setupK2JvmSettings( private static void setupK2JvmSettings(
+3
View File
@@ -128,6 +128,9 @@
<projectService serviceInterface="org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JsCompilerSettings" <projectService serviceInterface="org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JsCompilerSettings"
serviceImplementation="org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JsCompilerSettings"/> serviceImplementation="org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JsCompilerSettings"/>
<projectService serviceInterface="org.jetbrains.jet.plugin.compiler.configuration.KotlinAdditionalCompilerSettings"
serviceImplementation="org.jetbrains.jet.plugin.compiler.configuration.KotlinAdditionalCompilerSettings"/>
<errorHandler implementation="org.jetbrains.jet.plugin.reporter.KotlinReportSubmitter"/> <errorHandler implementation="org.jetbrains.jet.plugin.reporter.KotlinReportSubmitter"/>
<internalFileTemplate name="Kotlin File"/> <internalFileTemplate name="Kotlin File"/>
@@ -35,9 +35,11 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments;
import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments; import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments;
import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import org.jetbrains.jet.compiler.runner.*; import org.jetbrains.jet.compiler.runner.*;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JvmCompilerSettings; import org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JvmCompilerSettings;
import org.jetbrains.jet.plugin.compiler.configuration.KotlinAdditionalCompilerSettings;
import org.jetbrains.jet.plugin.compiler.configuration.KotlinCommonCompilerSettings; import org.jetbrains.jet.plugin.compiler.configuration.KotlinCommonCompilerSettings;
import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector; import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector;
@@ -142,8 +144,10 @@ public class JetCompiler implements TranslatingCompiler {
) { ) {
CommonCompilerArguments commonArguments = KotlinCommonCompilerSettings.getInstance(project).getSettings(); CommonCompilerArguments commonArguments = KotlinCommonCompilerSettings.getInstance(project).getSettings();
K2JVMCompilerArguments k2jvmArguments = Kotlin2JvmCompilerSettings.getInstance(project).getSettings(); K2JVMCompilerArguments k2jvmArguments = Kotlin2JvmCompilerSettings.getInstance(project).getSettings();
AdditionalCompilerSettings additionalSettings = KotlinAdditionalCompilerSettings.getInstance(project).getSettings();
KotlinCompilerRunner.runK2JvmCompiler(commonArguments, k2jvmArguments, messageCollector, environment, scriptFile, outputItemsCollector); KotlinCompilerRunner.runK2JvmCompiler(commonArguments, k2jvmArguments, additionalSettings,
messageCollector, environment, scriptFile, outputItemsCollector);
} }
public static File tryToWriteScriptFile( public static File tryToWriteScriptFile(
@@ -19,6 +19,7 @@ package org.jetbrains.jet.plugin.compiler;
import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.compiler.*; import com.intellij.openapi.compiler.*;
import com.intellij.openapi.module.Module; import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.roots.ModuleOrderEntry; import com.intellij.openapi.roots.ModuleOrderEntry;
import com.intellij.openapi.roots.ModuleRootManager; import com.intellij.openapi.roots.ModuleRootManager;
import com.intellij.openapi.roots.OrderEntry; import com.intellij.openapi.roots.OrderEntry;
@@ -33,11 +34,13 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments;
import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments; import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments;
import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import org.jetbrains.jet.compiler.runner.CompilerEnvironment; import org.jetbrains.jet.compiler.runner.CompilerEnvironment;
import org.jetbrains.jet.compiler.runner.KotlinCompilerRunner; import org.jetbrains.jet.compiler.runner.KotlinCompilerRunner;
import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl; import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
import org.jetbrains.jet.plugin.JetFileType; import org.jetbrains.jet.plugin.JetFileType;
import org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JsCompilerSettings; import org.jetbrains.jet.plugin.compiler.configuration.Kotlin2JsCompilerSettings;
import org.jetbrains.jet.plugin.compiler.configuration.KotlinAdditionalCompilerSettings;
import org.jetbrains.jet.plugin.compiler.configuration.KotlinCommonCompilerSettings; import org.jetbrains.jet.plugin.compiler.configuration.KotlinCommonCompilerSettings;
import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector; import org.jetbrains.jet.plugin.framework.KotlinFrameworkDetector;
@@ -97,10 +100,12 @@ public final class K2JSCompiler implements TranslatingCompiler {
OutputItemsCollectorImpl outputItemsCollector = new OutputItemsCollectorImpl(); OutputItemsCollectorImpl outputItemsCollector = new OutputItemsCollectorImpl();
CommonCompilerArguments commonArguments = KotlinCommonCompilerSettings.getInstance(module.getProject()).getSettings(); Project project = module.getProject();
K2JSCompilerArguments k2jsArguments = Kotlin2JsCompilerSettings.getInstance(module.getProject()).getSettings(); CommonCompilerArguments commonArguments = KotlinCommonCompilerSettings.getInstance(project).getSettings();
K2JSCompilerArguments k2jsArguments = Kotlin2JsCompilerSettings.getInstance(project).getSettings();
AdditionalCompilerSettings additionalSettings = KotlinAdditionalCompilerSettings.getInstance(project).getSettings();
KotlinCompilerRunner.runK2JsCompiler(commonArguments, k2jsArguments, messageCollector, environment, KotlinCompilerRunner.runK2JsCompiler(commonArguments, k2jsArguments, additionalSettings, messageCollector, environment,
outputItemsCollector, srcFiles, libraryFiles, outFile); outputItemsCollector, srcFiles, libraryFiles, outFile);
if (!ApplicationManager.getApplication().isUnitTestMode()) { if (!ApplicationManager.getApplication().isUnitTestMode()) {
@@ -22,9 +22,8 @@ import com.intellij.util.xmlb.XmlSerializer;
import org.jdom.Element; import org.jdom.Element;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments;
public abstract class BaseKotlinCompilerSettings<T extends CommonCompilerArguments> implements PersistentStateComponent<Element> { public abstract class BaseKotlinCompilerSettings<T> implements PersistentStateComponent<Element> {
private static final SkipDefaultValuesSerializationFilters SKIP_DEFAULT_VALUES = new SkipDefaultValuesSerializationFilters(); private static final SkipDefaultValuesSerializationFilters SKIP_DEFAULT_VALUES = new SkipDefaultValuesSerializationFilters();
@@ -0,0 +1,45 @@
/*
* Copyright 2010-2013 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.jet.plugin.compiler.configuration;
import com.intellij.openapi.components.*;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import static org.jetbrains.jet.compiler.SettingConstants.KOTLIN_ADDITIONAL_COMPILER_SETTINGS_SECTION;
import static org.jetbrains.jet.compiler.SettingConstants.KOTLIN_COMPILER_SETTINGS_PATH;
@State(
name = KOTLIN_ADDITIONAL_COMPILER_SETTINGS_SECTION,
storages = {
@Storage(file = StoragePathMacros.PROJECT_FILE),
@Storage(file = KOTLIN_COMPILER_SETTINGS_PATH, scheme = StorageScheme.DIRECTORY_BASED)
}
)
public class KotlinAdditionalCompilerSettings extends BaseKotlinCompilerSettings<AdditionalCompilerSettings> {
@NotNull
@Override
protected AdditionalCompilerSettings createSettings() {
return new AdditionalCompilerSettings();
}
public static KotlinAdditionalCompilerSettings getInstance(Project project) {
return ServiceManager.getService(project, KotlinAdditionalCompilerSettings.class);
}
}
@@ -1,27 +1,53 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.jet.plugin.compiler.configuration.KotlinCompilerConfigurableTab"> <form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="org.jetbrains.jet.plugin.compiler.configuration.KotlinCompilerConfigurableTab">
<grid id="27dc6" binding="contentPane" layout-manager="GridLayoutManager" row-count="2" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1"> <grid id="27dc6" binding="contentPane" layout-manager="GridLayoutManager" row-count="2" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/> <margin top="0" left="0" bottom="0" right="0"/>
<constraints> <constraints>
<xy x="20" y="20" width="332" height="102"/> <xy x="20" y="20" width="437" height="221"/>
</constraints> </constraints>
<properties/> <properties/>
<border type="none"/> <border type="none"/>
<children> <children>
<vspacer id="c5558"> <vspacer id="c5558">
<constraints> <constraints>
<grid row="1" column="0" row-span="1" col-span="2" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/> <grid row="1" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints> </constraints>
</vspacer> </vspacer>
<component id="f842a" class="javax.swing.JCheckBox" binding="generateNoWarningsCheckBox" default-binding="true"> <grid id="27e96" layout-manager="GridLayoutManager" row-count="2" 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> <constraints>
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="8" fill="0" indent="0" use-parent-layout="false"/> <grid row="0" column="0" row-span="1" col-span="1" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
</constraints> </constraints>
<properties> <properties/>
<selected value="false"/> <border type="none"/>
<text value="Generate no warnings"/> <children>
</properties> <component id="3b8d3" class="javax.swing.JCheckBox" binding="generateNoWarningsCheckBox" default-binding="true">
</component> <constraints>
<grid row="0" 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>
<selected value="false"/>
<text value="Generate no warnings"/>
</properties>
</component>
<component id="ba279" class="javax.swing.JLabel" binding="additionalArgsLabel">
<constraints>
<grid row="1" 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 value="Additional command line parameters:"/>
</properties>
</component>
<component id="7a827" class="com.intellij.ui.RawCommandLineEditor" binding="additionalArgsOptionsField">
<constraints>
<grid row="1" 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/>
</component>
</children>
</grid>
</children> </children>
</grid> </grid>
</form> </form>
@@ -21,10 +21,12 @@ import com.intellij.openapi.options.Configurable;
import com.intellij.openapi.options.ConfigurableEP; import com.intellij.openapi.options.ConfigurableEP;
import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.options.SearchableConfigurable;
import com.intellij.ui.RawCommandLineEditor;
import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import javax.swing.*; import javax.swing.*;
@@ -32,13 +34,20 @@ import static org.jetbrains.jet.cli.common.arguments.CommonArgumentConstants.SUP
public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Configurable.NoScroll{ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Configurable.NoScroll{
private final CommonCompilerArguments commonCompilerSettings; private final CommonCompilerArguments commonCompilerSettings;
private final AdditionalCompilerSettings additionalCompilerSettings;
private final ConfigurableEP extPoint; private final ConfigurableEP extPoint;
private JPanel contentPane; private JPanel contentPane;
private JCheckBox generateNoWarningsCheckBox; private JCheckBox generateNoWarningsCheckBox;
private RawCommandLineEditor additionalArgsOptionsField;
private JLabel additionalArgsLabel;
public KotlinCompilerConfigurableTab(ConfigurableEP ep) { public KotlinCompilerConfigurableTab(ConfigurableEP ep) {
this.extPoint = ep; this.extPoint = ep;
this.commonCompilerSettings = KotlinCommonCompilerSettings.getInstance(ep.getProject()).getSettings(); this.commonCompilerSettings = KotlinCommonCompilerSettings.getInstance(ep.getProject()).getSettings();
this.additionalCompilerSettings = KotlinAdditionalCompilerSettings.getInstance(ep.getProject()).getSettings();
additionalArgsOptionsField.attachLabel(additionalArgsLabel);
additionalArgsOptionsField.setDialogCaption(null);
} }
@NotNull @NotNull
@@ -61,17 +70,20 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
@Override @Override
public boolean isModified() { public boolean isModified() {
return ComparingUtils.isModified(generateNoWarningsCheckBox, isGenerateNoWarnings()); return ComparingUtils.isModified(generateNoWarningsCheckBox, isGenerateNoWarnings()) ||
ComparingUtils.isModified(additionalArgsOptionsField, additionalCompilerSettings.getAdditionalArguments());
} }
@Override @Override
public void apply() throws ConfigurationException { public void apply() throws ConfigurationException {
setGenerateNoWarnings(generateNoWarningsCheckBox.isSelected()); setGenerateNoWarnings(generateNoWarningsCheckBox.isSelected());
additionalCompilerSettings.setAdditionalArguments(additionalArgsOptionsField.getText());
} }
@Override @Override
public void reset() { public void reset() {
generateNoWarningsCheckBox.setSelected(isGenerateNoWarnings()); generateNoWarningsCheckBox.setSelected(isGenerateNoWarnings());
additionalArgsOptionsField.setText(additionalCompilerSettings.getAdditionalArguments());
} }
@Override @Override
@@ -95,6 +107,6 @@ public class KotlinCompilerConfigurableTab implements SearchableConfigurable, Co
} }
private void setGenerateNoWarnings(boolean selected) { private void setGenerateNoWarnings(boolean selected) {
commonCompilerSettings.suppress = selected ? SUPPRESS_WARNINGS : ""; commonCompilerSettings.suppress = selected ? SUPPRESS_WARNINGS : null;
} }
} }
@@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments;
import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments; import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments;
import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments; import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import org.jetbrains.jps.model.JpsElementChildRole; import org.jetbrains.jps.model.JpsElementChildRole;
import org.jetbrains.jps.model.JpsProject; import org.jetbrains.jps.model.JpsProject;
import org.jetbrains.jps.model.ex.JpsElementBase; import org.jetbrains.jps.model.ex.JpsElementBase;
@@ -34,6 +35,8 @@ public class JpsKotlinCompilerSettings extends JpsElementBase<JpsKotlinCompilerS
public K2JVMCompilerArguments k2JvmCompilerSettings = new K2JVMCompilerArguments(); public K2JVMCompilerArguments k2JvmCompilerSettings = new K2JVMCompilerArguments();
@NotNull @NotNull
public K2JSCompilerArguments k2JsCompilerSettings = new K2JSCompilerArguments(); public K2JSCompilerArguments k2JsCompilerSettings = new K2JSCompilerArguments();
@NotNull
public AdditionalCompilerSettings additionalCompilerSettings = new AdditionalCompilerSettings();
@NotNull @NotNull
@Override @Override
@@ -42,6 +45,7 @@ public class JpsKotlinCompilerSettings extends JpsElementBase<JpsKotlinCompilerS
copy.commonCompilerSettings = this.commonCompilerSettings; copy.commonCompilerSettings = this.commonCompilerSettings;
copy.k2JvmCompilerSettings = this.k2JvmCompilerSettings; copy.k2JvmCompilerSettings = this.k2JvmCompilerSettings;
copy.k2JsCompilerSettings = this.k2JsCompilerSettings; copy.k2JsCompilerSettings = this.k2JsCompilerSettings;
copy.additionalCompilerSettings = this.additionalCompilerSettings;
return copy; return copy;
} }
@@ -95,4 +99,13 @@ public class JpsKotlinCompilerSettings extends JpsElementBase<JpsKotlinCompilerS
public static void setK2JsSettings(@NotNull JpsProject project, @NotNull K2JSCompilerArguments k2JsCompilerSettings) { public static void setK2JsSettings(@NotNull JpsProject project, @NotNull K2JSCompilerArguments k2JsCompilerSettings) {
getOrCreateSettings(project).k2JsCompilerSettings = k2JsCompilerSettings; getOrCreateSettings(project).k2JsCompilerSettings = k2JsCompilerSettings;
} }
@NotNull
public static AdditionalCompilerSettings getAdditionalSettings(@NotNull JpsProject project) {
return getSettings(project).additionalCompilerSettings;
}
public static void setAdditionalSettings(@NotNull JpsProject project, @NotNull AdditionalCompilerSettings additionalCompilerSettings) {
getOrCreateSettings(project).additionalCompilerSettings = additionalCompilerSettings;
}
} }
@@ -27,6 +27,7 @@ import org.jetbrains.jet.cli.common.arguments.K2JVMCompilerArguments;
import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation; import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation;
import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity; import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity;
import org.jetbrains.jet.cli.common.messages.MessageCollector; import org.jetbrains.jet.cli.common.messages.MessageCollector;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import org.jetbrains.jet.compiler.runner.CompilerEnvironment; import org.jetbrains.jet.compiler.runner.CompilerEnvironment;
import org.jetbrains.jet.compiler.runner.CompilerRunnerConstants; import org.jetbrains.jet.compiler.runner.CompilerRunnerConstants;
import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl; import org.jetbrains.jet.compiler.runner.OutputItemsCollectorImpl;
@@ -117,6 +118,7 @@ public class KotlinBuilder extends ModuleLevelBuilder {
JpsProject project = representativeTarget.getModule().getProject(); JpsProject project = representativeTarget.getModule().getProject();
CommonCompilerArguments commonSettings = JpsKotlinCompilerSettings.getCommonSettings(project); CommonCompilerArguments commonSettings = JpsKotlinCompilerSettings.getCommonSettings(project);
AdditionalCompilerSettings additionalSettings = JpsKotlinCompilerSettings.getAdditionalSettings(project);
if (JpsUtils.isJsKotlinModule(representativeTarget)) { if (JpsUtils.isJsKotlinModule(representativeTarget)) {
if (chunk.getModules().size() > 1) { if (chunk.getModules().size() > 1) {
@@ -141,7 +143,8 @@ public class KotlinBuilder extends ModuleLevelBuilder {
List<String> libraryFiles = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget); List<String> libraryFiles = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget);
K2JSCompilerArguments k2JsSettings = JpsKotlinCompilerSettings.getK2JsSettings(project); K2JSCompilerArguments k2JsSettings = JpsKotlinCompilerSettings.getK2JsSettings(project);
runK2JsCompiler(commonSettings, k2JsSettings, messageCollector, environment, outputItemCollector, sourceFiles, libraryFiles, outputFile); runK2JsCompiler(commonSettings, k2JsSettings, additionalSettings, messageCollector, environment,
outputItemCollector, sourceFiles, libraryFiles, outputFile);
} }
else { else {
if (chunk.getModules().size() > 1) { if (chunk.getModules().size() > 1) {
@@ -160,7 +163,8 @@ public class KotlinBuilder extends ModuleLevelBuilder {
K2JVMCompilerArguments k2JvmSettings = JpsKotlinCompilerSettings.getK2JvmSettings(project); K2JVMCompilerArguments k2JvmSettings = JpsKotlinCompilerSettings.getK2JvmSettings(project);
runK2JvmCompiler(commonSettings, k2JvmSettings, messageCollector, environment, moduleFile, outputItemCollector); runK2JvmCompiler(commonSettings, k2JvmSettings, additionalSettings, messageCollector, environment,
moduleFile, outputItemCollector);
} }
// If there's only one target, this map is empty: get() always returns null, and the representativeTarget will be used below // If there's only one target, this map is empty: get() always returns null, and the representativeTarget will be used below
@@ -0,0 +1,48 @@
/*
* Copyright 2010-2013 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.jet.jps.model;
import com.intellij.util.xmlb.XmlSerializer;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.compiler.AdditionalCompilerSettings;
import org.jetbrains.jet.jps.JpsKotlinCompilerSettings;
import org.jetbrains.jps.model.JpsProject;
import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer;
import static org.jetbrains.jet.compiler.SettingConstants.KOTLIN_ADDITIONAL_COMPILER_SETTINGS_SECTION;
import static org.jetbrains.jet.compiler.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE;
class KotlinAdditionalCompilerSettingsSerializer extends JpsProjectExtensionSerializer {
KotlinAdditionalCompilerSettingsSerializer() {
super(KOTLIN_COMPILER_SETTINGS_FILE, KOTLIN_ADDITIONAL_COMPILER_SETTINGS_SECTION);
}
@Override
public void loadExtension(@NotNull JpsProject project, @NotNull Element componentTag) {
AdditionalCompilerSettings settings = XmlSerializer.deserialize(componentTag, AdditionalCompilerSettings.class);
if (settings == null) {
settings = new AdditionalCompilerSettings();
}
JpsKotlinCompilerSettings.setAdditionalSettings(project, settings);
}
@Override
public void saveExtension(@NotNull JpsProject project, @NotNull Element componentTag) {
}
}
@@ -29,6 +29,7 @@ public class KotlinModelSerializerService extends JpsModelSerializerExtension {
public List<? extends JpsProjectExtensionSerializer> getProjectExtensionSerializers() { public List<? extends JpsProjectExtensionSerializer> getProjectExtensionSerializers() {
return Arrays.asList(new KotlinCommonCompilerSettingsSerializer(), return Arrays.asList(new KotlinCommonCompilerSettingsSerializer(),
new Kotlin2JvmCompilerSettingsSerializer(), new Kotlin2JvmCompilerSettingsSerializer(),
new Kotlin2JsCompilerSettingsSerializer()); new Kotlin2JsCompilerSettingsSerializer(),
new KotlinAdditionalCompilerSettingsSerializer());
} }
} }