Support single quotation marks in argfiles

#KT-26122 Fixed
This commit is contained in:
Alexander Udalov
2018-09-07 14:26:51 +03:00
parent 9311ea5d25
commit e996513044
3 changed files with 9 additions and 6 deletions
@@ -12,7 +12,8 @@ import java.io.Reader
private const val EXPERIMENTAL_ARGFILE_ARGUMENT = "-Xargfile" private const val EXPERIMENTAL_ARGFILE_ARGUMENT = "-Xargfile"
private const val QUOTATION_MARK = '"' private const val SINGLE_QUOTE = '\''
private const val DOUBLE_QUOTE = '"'
private const val BACKSLASH = '\\' private const val BACKSLASH = '\\'
private const val WHITESPACE = ' ' private const val WHITESPACE = ' '
private const val NEWLINE = '\n' private const val NEWLINE = '\n'
@@ -56,7 +57,7 @@ private fun Reader.parseNextArgument(): String? {
loop@ while (r != null) { loop@ while (r != null) {
when (r) { when (r) {
WHITESPACE, NEWLINE -> break@loop WHITESPACE, NEWLINE -> break@loop
QUOTATION_MARK -> consumeRestOfEscapedSequence(sb) DOUBLE_QUOTE, SINGLE_QUOTE -> consumeRestOfEscapedSequence(sb, r)
BACKSLASH -> nextChar()?.apply(sb::append) BACKSLASH -> nextChar()?.apply(sb::append)
else -> sb.append(r) else -> sb.append(r)
} }
@@ -67,9 +68,9 @@ private fun Reader.parseNextArgument(): String? {
return sb.toString().takeIf { it.isNotEmpty() } return sb.toString().takeIf { it.isNotEmpty() }
} }
private fun Reader.consumeRestOfEscapedSequence(sb: StringBuilder) { private fun Reader.consumeRestOfEscapedSequence(sb: StringBuilder, quote: Char) {
var ch = nextChar() var ch = nextChar()
while (ch != null && ch != QUOTATION_MARK) { while (ch != null && ch != quote) {
if (ch == BACKSLASH) nextChar()?.apply(sb::append) else sb.append(ch) if (ch == BACKSLASH) nextChar()?.apply(sb::append) else sb.append(ch)
ch = nextChar() ch = nextChar()
} }
+2 -1
View File
@@ -1,4 +1,5 @@
-X"some escaped \" sequence \\" -X"double \' quote ' escaped \" sequence \\"
-X'single \" quote " escaped \' sequence \\'
$TESTDATA_DIR$/apiVersion.kt $TESTDATA_DIR$/apiVersion.kt
-d -d
$TEMP_DIR$ -api-version 1.2 -language-version 1.3 $TEMP_DIR$ -api-version 1.2 -language-version 1.3
+2 -1
View File
@@ -1,4 +1,5 @@
warning: flag is not supported by this version of the compiler: -Xsome escaped " sequence / warning: flag is not supported by this version of the compiler: -Xdouble ' quote ' escaped " sequence /
warning: flag is not supported by this version of the compiler: -Xsingle " quote " escaped ' sequence /
compiler/testData/cli/jvm/apiVersion.kt:2:15: error: unresolved reference: sealedSubclasses compiler/testData/cli/jvm/apiVersion.kt:2:15: error: unresolved reference: sealedSubclasses
""::class.sealedSubclasses ""::class.sealedSubclasses
^ ^