diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt new file mode 100644 index 00000000000..e77afb094f5 --- /dev/null +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/BaseJpsCompilerSettingsSerializer.kt @@ -0,0 +1,44 @@ +/* + * Copyright 2010-2017 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.jps.model + +import com.intellij.util.xmlb.XmlSerializer +import org.jdom.Element +import org.jetbrains.jps.model.JpsProject +import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer +import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments +import org.jetbrains.kotlin.config.SettingConstants + +abstract class BaseJpsCompilerSettingsSerializer( + componentName: String, + private val settingsFactory: () -> T +): JpsProjectExtensionSerializer(SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE, componentName) { + protected abstract fun onLoad(project: JpsProject, settings: T) + + override fun loadExtension(project: JpsProject, componentTag: Element) { + val settings = settingsFactory().apply { + if (this is CommonCompilerArguments) { + freeArgs = ArrayList() + } + } + XmlSerializer.deserializeInto(settings, componentTag) + onLoad(project, settings) + } + + override fun saveExtension(project: JpsProject, componentTag: Element) { + } +} \ No newline at end of file diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt index f8283134768..51a50843a4c 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JsCompilerArgumentsSerializer.kt @@ -16,22 +16,15 @@ package org.jetbrains.kotlin.jps.model -import com.intellij.util.xmlb.XmlSerializer -import org.jdom.Element import org.jetbrains.jps.model.JpsProject -import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -internal class Kotlin2JsCompilerArgumentsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE, - KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION) { - override fun loadExtension(project: JpsProject, componentTag: Element) { - val settings = XmlSerializer.deserialize(componentTag, K2JSCompilerArguments::class.java) +internal class Kotlin2JsCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( + KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION, ::K2JSCompilerArguments +) { + override fun onLoad(project: JpsProject, settings: K2JSCompilerArguments) { JpsKotlinCompilerSettings.setK2JsCompilerArguments(project, settings) } - - override fun saveExtension(project: JpsProject, componentTag: Element) { - } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt index 4c527f14c88..5f6b0886aec 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/Kotlin2JvmCompilerArgumentsSerializer.kt @@ -16,24 +16,15 @@ package org.jetbrains.kotlin.jps.model -import com.intellij.util.xmlb.XmlSerializer -import org.jdom.Element -import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.jetbrains.jps.model.JpsProject -import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer +import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments +import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION - -internal class Kotlin2JvmCompilerArgumentsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE, - KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION) { - - override fun loadExtension(project: JpsProject, componentTag: Element) { - val settings = XmlSerializer.deserialize(componentTag, K2JVMCompilerArguments::class.java) +internal class Kotlin2JvmCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( + KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION, ::K2JVMCompilerArguments +) { + override fun onLoad(project: JpsProject, settings: K2JVMCompilerArguments) { JpsKotlinCompilerSettings.setK2JvmCompilerArguments(project, settings) } - - override fun saveExtension(project: JpsProject, componentTag: Element) { - } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt index db41132e1ba..230fb208610 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCommonCompilerArgumentsSerializer.kt @@ -17,26 +17,18 @@ package org.jetbrains.kotlin.jps.model import com.intellij.util.text.VersionComparatorUtil -import com.intellij.util.xmlb.XmlSerializer -import org.jdom.Element import org.jetbrains.jps.model.JpsProject -import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -internal class KotlinCommonCompilerArgumentsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE, - KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION) { - - override fun loadExtension(project: JpsProject, componentTag: Element) { - val settings = XmlSerializer.deserialize(componentTag, CommonCompilerArguments.DummyImpl::class.java) +internal class KotlinCommonCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer( + KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION, CommonCompilerArguments::DummyImpl +) { + override fun onLoad(project: JpsProject, settings: CommonCompilerArguments.DummyImpl) { if (VersionComparatorUtil.compare(settings.languageVersion, settings.apiVersion) < 0) { settings.apiVersion = settings.languageVersion } JpsKotlinCompilerSettings.setCommonCompilerArguments(project, settings) } - - override fun saveExtension(project: JpsProject, componentTag: Element) { - } } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt index 71e3475bd2f..b22da528c70 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/model/KotlinCompilerSettingsSerializer.kt @@ -16,24 +16,15 @@ package org.jetbrains.kotlin.jps.model -import com.intellij.util.xmlb.XmlSerializer -import org.jdom.Element import org.jetbrains.jps.model.JpsProject -import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer import org.jetbrains.kotlin.config.CompilerSettings +import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_SECTION import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE -import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_SECTION - -internal class KotlinCompilerSettingsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE, - KOTLIN_COMPILER_SETTINGS_SECTION) { - - override fun loadExtension(project: JpsProject, componentTag: Element) { - val settings = XmlSerializer.deserialize(componentTag, CompilerSettings::class.java) +internal class KotlinCompilerSettingsSerializer : BaseJpsCompilerSettingsSerializer( + KOTLIN_COMPILER_SETTINGS_SECTION, ::CompilerSettings +) { + override fun onLoad(project: JpsProject, settings: CompilerSettings) { JpsKotlinCompilerSettings.setCompilerSettings(project, settings) } - - override fun saveExtension(project: JpsProject, componentTag: Element) { - } }