Fix handling Boolean? arguments
Boolean? arguments are seen through java reflection as having type
java.lang.Boolean::class.java, whereas Boolean arguments are seen as
kotlin.Boolean::class.java. This fix moves the type comparision back to
kotlin-types, since both map to kotlin.Boolean::class.
diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/parseCommandLineArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/parseCommandLineArguments.kt
index d2866ac..c72cc0e 100644
--- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/parseCommandLineArguments.kt
+++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/parseCommandLineArguments.kt
@@ -153,7 +153,7 @@
}
if (argument.value == arg) {
- if (argument.isAdvanced && getter.returnType != Boolean::class.java) {
+ if (argument.isAdvanced && getter.returnType.kotlin != Boolean::class) {
errors.value.extraArgumentsPassedInObsoleteForm.add(arg)
}
return true
@@ -211,7 +211,7 @@
val (getter, setter, argument) = argumentField
val value: Any = when {
- getter.returnType == Boolean::class.java -> {
+ getter.returnType.kotlin == Boolean::class -> {
if (arg.startsWith(argument.value + "=")) {
// Can't use toBooleanStrict yet because this part of the compiler is used in Gradle and needs API version 1.4.
when (arg.substring(argument.value.length + 1)) {
@@ -272,9 +272,9 @@
delimiter: String?,
overrideArguments: Boolean
) {
- when (getter.returnType) {
- Boolean::class.java, String::class.java -> setter(result, value)
- Array<String>::class.java -> {
+ when (getter.returnType.kotlin) {
+ Boolean::class, String::class -> setter(result, value)
+ Array<String>::class -> {
val newElements = if (delimiter.isNullOrEmpty()) {
arrayOf(value as String)
} else {