Improved parsing of internal compiler arguments with boolean state in

case when the argument is listed twice in the list of command line
arguments. The last value will be used.
#KT-27181 Fixed
This commit is contained in:
Andrey Uskov
2019-04-27 22:48:59 +03:00
parent affe8baf74
commit 998a24414a
6 changed files with 52 additions and 1 deletions
@@ -135,7 +135,15 @@ private fun <A : CommonToolArguments> parsePreprocessedCommandLineArguments(args
if (parser == null) {
errors.unknownExtraFlags += arg
} else {
internalArguments.add(parser.parseInternalArgument(arg, errors) ?: continue)
val newInternalArgument = parser.parseInternalArgument(arg, errors) ?: continue
val argumentWillBeOverridden = when (newInternalArgument) {
is ManualLanguageFeatureSetting -> internalArguments.firstOrNull { (it is ManualLanguageFeatureSetting) && (it.languageFeature == newInternalArgument.languageFeature) }
else -> null
}
if (argumentWillBeOverridden != null) {
internalArguments.remove(argumentWillBeOverridden)
}
internalArguments.add(newInternalArgument)
}
continue
@@ -0,0 +1,5 @@
$TESTDATA_DIR$/inlineClass.kt
-d
$TEMP_DIR$
-XXLanguage:-InlineClasses
-XXLanguage:+InlineClasses
@@ -0,0 +1,10 @@
warning: ATTENTION!
This build uses unsafe internal compiler arguments:
-XXLanguage;+InlineClasses
This mode is not recommended for production use,
as no stability/compatibility guarantees are given on
compiler or generated code. Use it at your own risk!
OK
@@ -0,0 +1,5 @@
$TESTDATA_DIR$/inlineClass.kt
-d
$TEMP_DIR$
-XXLanguage:+InlineClasses
-XXLanguage:-InlineClasses
@@ -0,0 +1,13 @@
warning: ATTENTION!
This build uses unsafe internal compiler arguments:
-XXLanguage;-InlineClasses
This mode is not recommended for production use,
as no stability/compatibility guarantees are given on
compiler or generated code. Use it at your own risk!
compiler/testData/cli/jvm/inlineClass.kt:1:1: error: the feature "inline classes" is disabled
inline class Foo(val x: Int)
^
COMPILATION_ERROR
@@ -296,6 +296,16 @@ public class CliTestGenerated extends AbstractCliTest {
runTest("compiler/testData/cli/jvm/internalArgNoWarningForEnablingBugfix.args");
}
@TestMetadata("internalArgOverrideLanguageFeature.args")
public void testInternalArgOverrideLanguageFeature() throws Exception {
runTest("compiler/testData/cli/jvm/internalArgOverrideLanguageFeature.args");
}
@TestMetadata("internalArgOverrideOffLanguageFeature.args")
public void testInternalArgOverrideOffLanguageFeature() throws Exception {
runTest("compiler/testData/cli/jvm/internalArgOverrideOffLanguageFeature.args");
}
@TestMetadata("internalArgUnrecognizedFeature.args")
public void testInternalArgUnrecognizedFeature() throws Exception {
runTest("compiler/testData/cli/jvm/internalArgUnrecognizedFeature.args");