From 6bf23d5e02855be06d4d620a62f7af1274ac4e56 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 3 Apr 2017 17:20:58 +0300 Subject: [PATCH] Kotlin Facet: Convert paths to OS-independent form #KT-17223 Fixed --- .../kotlin/config/facetSerialization.kt | 40 +++++++++++++++++-- .../idea/maven/KotlinMavenImporterTest.kt | 2 +- .../jetbrains/kotlin/idea/facet/facetUtils.kt | 3 ++ .../gradle/GradleFacetImportTest.kt | 2 +- 4 files changed, 41 insertions(+), 6 deletions(-) diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index eb2b094b2d8..1aab95c697b 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -16,12 +16,12 @@ package org.jetbrains.kotlin.config +import com.intellij.util.PathUtil import com.intellij.util.xmlb.SkipDefaultsSerializationFilter import com.intellij.util.xmlb.XmlSerializer import org.jdom.DataConversionException import org.jdom.Element -import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments -import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.* fun Element.getOption(name: String) = getChildren("option").firstOrNull { it.getAttribute("name").value == name } @@ -116,6 +116,36 @@ fun deserializeFacetSettings(element: Element): KotlinFacetSettings { } } +fun CommonCompilerArguments.convertPathsToSystemIndependent() { + pluginClasspaths?.forEachIndexed { index, s -> pluginClasspaths[index] = PathUtil.toSystemIndependentName(s) } + + when (this) { + is K2JVMCompilerArguments -> { + destination = PathUtil.toSystemIndependentName(destination) + classpath = PathUtil.toSystemIndependentName(classpath) + jdkHome = PathUtil.toSystemIndependentName(jdkHome) + kotlinHome = PathUtil.toSystemIndependentName(kotlinHome) + friendPaths?.forEachIndexed { index, s -> friendPaths[index] = PathUtil.toSystemIndependentName(s) } + declarationsOutputPath = PathUtil.toSystemIndependentName(declarationsOutputPath) + } + + is K2JSCompilerArguments -> { + outputFile = PathUtil.toSystemIndependentName(outputFile) + libraries = PathUtil.toSystemIndependentName(libraries) + } + + is K2MetadataCompilerArguments -> { + destination = PathUtil.toSystemIndependentName(destination) + classpath = PathUtil.toSystemIndependentName(classpath) + } + } +} + +fun CompilerSettings.convertPathsToSystemIndependent() { + scriptTemplatesClasspath = PathUtil.toSystemIndependentName(scriptTemplatesClasspath) + outputDirectoryForJsLibraryFiles = PathUtil.toSystemIndependentName(outputDirectoryForJsLibraryFiles) +} + fun KotlinFacetSettings.serializeFacetSettings(element: Element) { val filter = SkipDefaultsSerializationFilter() @@ -126,13 +156,15 @@ fun KotlinFacetSettings.serializeFacetSettings(element: Element) { if (!useProjectSettings) { element.setAttribute("useProjectSettings", useProjectSettings.toString()) } - compilerSettings?.let { + compilerSettings?.let { copyBean(it) }?.let { + it.convertPathsToSystemIndependent() Element("compilerSettings").apply { XmlSerializer.serializeInto(it, this, filter) element.addContent(this) } } - compilerArguments?.let { + compilerArguments?.let { copyBean(it) }?.let { + it.convertPathsToSystemIndependent() Element("compilerArguments").apply { XmlSerializer.serializeInto(it, this, filter) element.addContent(this) diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt index 4740f11738e..617ae629716 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/KotlinMavenImporterTest.kt @@ -653,7 +653,7 @@ class KotlinMavenImporterTest : MavenImportingTestCase() { Assert.assertEquals("1.8", (compilerArguments as K2JVMCompilerArguments).jvmTarget) Assert.assertEquals(LanguageFeature.State.ENABLED, coroutineSupport) Assert.assertEquals( - listOf("-jdk-home", "c:\\program files\\jdk1.8"), + listOf("-jdk-home", "c:/program files/jdk1.8"), compilerSettings!!.additionalArgumentsAsList ) } diff --git a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt index f5577d15544..c4428c74137 100644 --- a/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/facet/facetUtils.kt @@ -178,6 +178,7 @@ fun parseCompilerArgumentsToFacet(arguments: List, defaultArguments: Lis val defaultCompilerArguments = compilerArguments::class.java.newInstance() parseArguments(defaultArguments.toTypedArray(), defaultCompilerArguments, true) + defaultCompilerArguments.convertPathsToSystemIndependent() val oldCoroutineSupport = CoroutineSupport.byCompilerArguments(compilerArguments) compilerArguments.coroutinesEnable = false @@ -186,6 +187,8 @@ fun parseCompilerArgumentsToFacet(arguments: List, defaultArguments: Lis parseArguments(argumentArray, compilerArguments, true) + compilerArguments.convertPathsToSystemIndependent() + val restoreCoroutineSupport = !compilerArguments.coroutinesEnable && !compilerArguments.coroutinesWarn && !compilerArguments.coroutinesError diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt index 01f2b8dabde..548cd8dd092 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleFacetImportTest.kt @@ -624,7 +624,7 @@ class GradleFacetImportTest : GradleImportingTestCase() { with (facetSettings) { Assert.assertEquals( - listOf("-jdk-home", "c:\\program files\\jdk1.8", "-Xmulti-platform"), + listOf("-jdk-home", "c:/program files/jdk1.8", "-Xmulti-platform"), compilerSettings!!.additionalArgumentsAsList ) }