From f67904392908bd3c5ec0b78bfb9e0e3e6a8510fe Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Fri, 19 May 2017 14:51:05 +0300 Subject: [PATCH] Kotlin Facet: Do not rewrite v2 configuration to latest version This causes unwanted changes in configuration files after plugin update Original commit: 151b512a6c5605139a6ec44b43df28dbd5da8c48 --- .../kotlin/config/KotlinFacetSettings.kt | 1 + .../kotlin/config/facetSerialization.kt | 39 +++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index cfcd52a3b9d..bf7d9b2e036 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -80,6 +80,7 @@ class KotlinFacetSettings { val DEFAULT_VERSION = 0 } + var version = CURRENT_VERSION var useProjectSettings: Boolean = true var compilerArguments: CommonCompilerArguments? = null diff --git a/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index d58533299e6..ae75fa519bd 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -132,8 +132,8 @@ fun deserializeFacetSettings(element: Element): KotlinFacetSettings { 1 -> readV1Config(element) 2 -> readV2Config(element) KotlinFacetSettings.CURRENT_VERSION -> readLatestConfig(element) - else -> KotlinFacetSettings() // Reset facet configuration if versions don't match - } + else -> return KotlinFacetSettings() // Reset facet configuration if versions don't match + }.apply { this.version = version } } fun CommonCompilerArguments.convertPathsToSystemIndependent() { @@ -166,10 +166,9 @@ fun CompilerSettings.convertPathsToSystemIndependent() { outputDirectoryForJsLibraryFiles = PathUtil.toSystemIndependentName(outputDirectoryForJsLibraryFiles) } -fun KotlinFacetSettings.serializeFacetSettings(element: Element) { +private fun KotlinFacetSettings.writeLatestConfig(element: Element) { val filter = SkipDefaultsSerializationFilter() - element.setAttribute("version", KotlinFacetSettings.CURRENT_VERSION.toString()) targetPlatformKind?.let { element.setAttribute("platform", it.description) } @@ -191,3 +190,35 @@ fun KotlinFacetSettings.serializeFacetSettings(element: Element) { } } } + +// Special treatment of v2 may be dropped after transition to IDEA 172 +private fun KotlinFacetSettings.writeV2Config(element: Element) { + writeLatestConfig(element) + element.getChild("compilerArguments")?.let { + it.getOption("coroutinesState")?.detach() + val coroutineOption = when (compilerArguments?.coroutinesState) { + CommonCompilerArguments.ENABLE -> "coroutinesEnable" + CommonCompilerArguments.WARN -> "coroutinesWarn" + CommonCompilerArguments.ERROR -> "coroutinesError" + else -> null + } + if (coroutineOption != null) { + Element("option").apply { + setAttribute("name", coroutineOption) + setAttribute("value", "true") + it.addContent(this) + } + } + } +} + +fun KotlinFacetSettings.serializeFacetSettings(element: Element) { + val versionToWrite = if (version == 2) version else KotlinFacetSettings.CURRENT_VERSION + element.setAttribute("version", versionToWrite.toString()) + if (versionToWrite == 2) { + writeV2Config(element) + } + else { + writeLatestConfig(element) + } +}