Add enable / disable feature in JPS

#KT-26775 Fixed
#KT-26774 Fixed
This commit is contained in:
Mikhail Glukhikh
2018-09-18 20:09:49 +03:00
parent 8a7ff4cd24
commit f6b805a973
7 changed files with 40 additions and 33 deletions
@@ -8,7 +8,7 @@ package org.jetbrains.kotlin.cli.common.arguments
import org.jetbrains.kotlin.config.LanguageFeature
object CliArgumentStringBuilder {
const val languagePrefix = "-XXLanguage:"
private const val languagePrefix = "-XXLanguage:"
private val LanguageFeature.State.sign: String
get() = when (this) {
@@ -21,4 +21,30 @@ object CliArgumentStringBuilder {
fun LanguageFeature.buildArgumentString(state: LanguageFeature.State): String {
return "$languagePrefix${state.sign}$name"
}
fun String.replaceLanguageFeature(
feature: LanguageFeature,
state: LanguageFeature.State,
prefix: String = "",
postfix: String = "",
separator: String = ", ",
quoted: Boolean = true
): String {
val existingFeatureIndex = indexOf(feature.name)
val languagePrefixIndex = lastIndexOf(languagePrefix, existingFeatureIndex)
val featureArgumentString = feature.buildArgumentString(state)
val quote = if (quoted) "\"" else ""
return if (languagePrefixIndex != -1) {
replaceRange(languagePrefixIndex, existingFeatureIndex + feature.name.length, featureArgumentString)
} else {
val splitText = if (postfix.isNotEmpty()) split(postfix) else listOf(this, "")
if (splitText.size != 2) {
"$prefix$quote$featureArgumentString$quote$postfix"
} else {
val (mainPart, commentPart) = splitText
// In Groovy / Kotlin DSL, we can have comment after [...] or listOf(...)
mainPart + "$separator$quote$featureArgumentString$quote$postfix" + commentPart
}
}
}
}