Configuration: Fix deserialization of immutable freeArgs collection
#KT-21363 Fixed
This commit is contained in:
@@ -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<T : Any>(
|
||||||
|
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) {
|
||||||
|
}
|
||||||
|
}
|
||||||
+4
-11
@@ -16,22 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jps.model
|
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.JpsProject
|
||||||
import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer
|
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
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.config.SettingConstants.KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION
|
||||||
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
||||||
|
|
||||||
internal class Kotlin2JsCompilerArgumentsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE,
|
internal class Kotlin2JsCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer<K2JSCompilerArguments>(
|
||||||
KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION) {
|
KOTLIN_TO_JS_COMPILER_ARGUMENTS_SECTION, ::K2JSCompilerArguments
|
||||||
override fun loadExtension(project: JpsProject, componentTag: Element) {
|
) {
|
||||||
val settings = XmlSerializer.deserialize(componentTag, K2JSCompilerArguments::class.java)
|
override fun onLoad(project: JpsProject, settings: K2JSCompilerArguments) {
|
||||||
JpsKotlinCompilerSettings.setK2JsCompilerArguments(project, settings)
|
JpsKotlinCompilerSettings.setK2JsCompilerArguments(project, settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveExtension(project: JpsProject, componentTag: Element) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-15
@@ -16,24 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jps.model
|
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.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.jps.JpsKotlinCompilerSettings
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE
|
internal class Kotlin2JvmCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer<K2JVMCompilerArguments>(
|
||||||
import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION
|
KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION, ::K2JVMCompilerArguments
|
||||||
|
) {
|
||||||
internal class Kotlin2JvmCompilerArgumentsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE,
|
override fun onLoad(project: JpsProject, settings: K2JVMCompilerArguments) {
|
||||||
KOTLIN_TO_JVM_COMPILER_ARGUMENTS_SECTION) {
|
|
||||||
|
|
||||||
override fun loadExtension(project: JpsProject, componentTag: Element) {
|
|
||||||
val settings = XmlSerializer.deserialize(componentTag, K2JVMCompilerArguments::class.java)
|
|
||||||
JpsKotlinCompilerSettings.setK2JvmCompilerArguments(project, settings)
|
JpsKotlinCompilerSettings.setK2JvmCompilerArguments(project, settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveExtension(project: JpsProject, componentTag: Element) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+4
-12
@@ -17,26 +17,18 @@
|
|||||||
package org.jetbrains.kotlin.jps.model
|
package org.jetbrains.kotlin.jps.model
|
||||||
|
|
||||||
import com.intellij.util.text.VersionComparatorUtil
|
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.JpsProject
|
||||||
import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer
|
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments
|
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_COMMON_COMPILER_ARGUMENTS_SECTION
|
||||||
import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE
|
|
||||||
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
import org.jetbrains.kotlin.jps.JpsKotlinCompilerSettings
|
||||||
|
|
||||||
internal class KotlinCommonCompilerArgumentsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE,
|
internal class KotlinCommonCompilerArgumentsSerializer : BaseJpsCompilerSettingsSerializer<CommonCompilerArguments.DummyImpl>(
|
||||||
KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION) {
|
KOTLIN_COMMON_COMPILER_ARGUMENTS_SECTION, CommonCompilerArguments::DummyImpl
|
||||||
|
) {
|
||||||
override fun loadExtension(project: JpsProject, componentTag: Element) {
|
override fun onLoad(project: JpsProject, settings: CommonCompilerArguments.DummyImpl) {
|
||||||
val settings = XmlSerializer.deserialize(componentTag, CommonCompilerArguments.DummyImpl::class.java)
|
|
||||||
if (VersionComparatorUtil.compare(settings.languageVersion, settings.apiVersion) < 0) {
|
if (VersionComparatorUtil.compare(settings.languageVersion, settings.apiVersion) < 0) {
|
||||||
settings.apiVersion = settings.languageVersion
|
settings.apiVersion = settings.languageVersion
|
||||||
}
|
}
|
||||||
JpsKotlinCompilerSettings.setCommonCompilerArguments(project, settings)
|
JpsKotlinCompilerSettings.setCommonCompilerArguments(project, settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveExtension(project: JpsProject, componentTag: Element) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,24 +16,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.jps.model
|
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.JpsProject
|
||||||
import org.jetbrains.jps.model.serialization.JpsProjectExtensionSerializer
|
|
||||||
import org.jetbrains.kotlin.config.CompilerSettings
|
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.jps.JpsKotlinCompilerSettings
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_FILE
|
internal class KotlinCompilerSettingsSerializer : BaseJpsCompilerSettingsSerializer<CompilerSettings>(
|
||||||
import org.jetbrains.kotlin.config.SettingConstants.KOTLIN_COMPILER_SETTINGS_SECTION
|
KOTLIN_COMPILER_SETTINGS_SECTION, ::CompilerSettings
|
||||||
|
) {
|
||||||
internal class KotlinCompilerSettingsSerializer : JpsProjectExtensionSerializer(KOTLIN_COMPILER_SETTINGS_FILE,
|
override fun onLoad(project: JpsProject, settings: CompilerSettings) {
|
||||||
KOTLIN_COMPILER_SETTINGS_SECTION) {
|
|
||||||
|
|
||||||
override fun loadExtension(project: JpsProject, componentTag: Element) {
|
|
||||||
val settings = XmlSerializer.deserialize(componentTag, CompilerSettings::class.java)
|
|
||||||
JpsKotlinCompilerSettings.setCompilerSettings(project, settings)
|
JpsKotlinCompilerSettings.setCompilerSettings(project, settings)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveExtension(project: JpsProject, componentTag: Element) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user