From 107d804945bc4843e448ec4e5859869829925fe7 Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Wed, 23 Oct 2013 17:19:35 +0400 Subject: [PATCH] Added "Additional command line parameters" to the Kotlin Compiler Settings tab. Original commit: faa82317b64fb6f215d096e96739a4a8170454f4 --- .../jet/jps/JpsKotlinCompilerSettings.java | 13 +++++ .../jet/jps/build/KotlinBuilder.java | 8 +++- ...nAdditionalCompilerSettingsSerializer.java | 48 +++++++++++++++++++ .../model/KotlinModelSerializerService.java | 3 +- 4 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinAdditionalCompilerSettingsSerializer.java diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/JpsKotlinCompilerSettings.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/JpsKotlinCompilerSettings.java index 29cbeb5a775..908e237c3a6 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/JpsKotlinCompilerSettings.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/JpsKotlinCompilerSettings.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.cli.common.arguments.CommonCompilerArguments; import org.jetbrains.jet.cli.common.arguments.K2JSCompilerArguments; 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.JpsProject; import org.jetbrains.jps.model.ex.JpsElementBase; @@ -34,6 +35,8 @@ public class JpsKotlinCompilerSettings extends JpsElementBase 1) { @@ -141,7 +143,8 @@ public class KotlinBuilder extends ModuleLevelBuilder { List libraryFiles = JpsJsModuleUtils.getLibraryFilesAndDependencies(representativeTarget); 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 { if (chunk.getModules().size() > 1) { @@ -160,7 +163,8 @@ public class KotlinBuilder extends ModuleLevelBuilder { 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 diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinAdditionalCompilerSettingsSerializer.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinAdditionalCompilerSettingsSerializer.java new file mode 100644 index 00000000000..ccb86bae311 --- /dev/null +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinAdditionalCompilerSettingsSerializer.java @@ -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) { + } +} diff --git a/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinModelSerializerService.java b/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinModelSerializerService.java index 7ce881cc715..e7885d2f643 100644 --- a/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinModelSerializerService.java +++ b/jps/jps-plugin/src/org/jetbrains/jet/jps/model/KotlinModelSerializerService.java @@ -29,6 +29,7 @@ public class KotlinModelSerializerService extends JpsModelSerializerExtension { public List getProjectExtensionSerializers() { return Arrays.asList(new KotlinCommonCompilerSettingsSerializer(), new Kotlin2JvmCompilerSettingsSerializer(), - new Kotlin2JsCompilerSettingsSerializer()); + new Kotlin2JsCompilerSettingsSerializer(), + new KotlinAdditionalCompilerSettingsSerializer()); } }