Kotlin Facet: Escape additional compiler arguments when converting them to string and unescape before parsing

#KT-16700 Fixed

Original commit: 811b8978c2
This commit is contained in:
Alexey Sedunov
2017-03-07 21:21:51 +03:00
parent e24fd4e986
commit 9759f1e067
2 changed files with 9 additions and 1 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.config
import com.intellij.openapi.util.text.StringUtil
class CompilerSettings {
@JvmField var additionalArguments: String = DEFAULT_ADDITIONAL_ARGUMENTS
@JvmField var scriptTemplates: String = ""
@@ -28,3 +30,8 @@ class CompilerSettings {
private val DEFAULT_OUTPUT_DIRECTORY = "lib"
}
}
val CompilerSettings.additionalArgumentsAsList: List<String>
get() = StringUtil.splitHonorQuotes(additionalArguments, ' ').map {
if (it.startsWith('"')) StringUtil.unescapeChar(StringUtil.unquoteString(it), '"') else it
}
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.cli.common.arguments.mergeBeans
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageLocation
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
import org.jetbrains.kotlin.config.CompilerSettings
import org.jetbrains.kotlin.config.additionalArgumentsAsList
import org.jetbrains.kotlin.daemon.common.*
import org.jetbrains.kotlin.jps.build.KotlinBuilder
import java.io.ByteArrayOutputStream
@@ -129,7 +130,7 @@ class JpsKotlinCompilerRunner : KotlinCompilerRunner<JpsCompilerEnvironment>() {
private fun withAdditionalCompilerArgs(compilerArgs: CommonCompilerArguments): Array<String> {
val allArgs = ArgumentUtils.convertArgumentsToStringList(compilerArgs) +
(compilerSettings?.additionalArguments?.split(" ") ?: emptyList())
(compilerSettings?.additionalArgumentsAsList ?: emptyList())
return allArgs.toTypedArray()
}