FIR checker: support DUPLICATE_LABEL_IN_WHEN
Changes from FE1.0: 1. As discussed previously, no expression evaluation happens during this check. 2. FE1.0 doesn't check redundant object comparisons.
This commit is contained in:
committed by
Mikhail Glukhikh
parent
7c6326856b
commit
4915d8dda3
@@ -15,10 +15,10 @@ const val four = 4
|
||||
fun first(arg: Int) = when (arg) {
|
||||
1 -> 2
|
||||
2 -> 3
|
||||
1 -> 4
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>1<!> -> 4
|
||||
4 -> 5
|
||||
1 -> 6
|
||||
2 -> 7
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>1<!> -> 6
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>2<!> -> 7
|
||||
// Error should be here: see KT-11971
|
||||
four -> 8
|
||||
else -> 0
|
||||
@@ -28,8 +28,8 @@ fun second(arg: String): Int {
|
||||
when (arg) {
|
||||
"ABC" -> return 0
|
||||
"DEF" -> return 1
|
||||
"ABC" -> return -1
|
||||
"DEF" -> return -2
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>"ABC"<!> -> return -1
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>"DEF"<!> -> return -2
|
||||
}
|
||||
return 42
|
||||
}
|
||||
@@ -39,8 +39,9 @@ fun third(arg: Any?): Int {
|
||||
null -> return -1
|
||||
is String -> return 0
|
||||
is Double -> return 1
|
||||
is Double -> return 2
|
||||
null -> return 3
|
||||
is <!DUPLICATE_LABEL_IN_WHEN!>Double<!> -> return 2
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>null<!> -> return 3
|
||||
!is String -> return 4
|
||||
else -> return 5
|
||||
}
|
||||
}
|
||||
@@ -50,7 +51,7 @@ enum class Color { RED, GREEN, BLUE }
|
||||
fun fourth(arg: Color) = when (arg) {
|
||||
Color.RED -> "RED"
|
||||
Color.GREEN -> "GREEN"
|
||||
Color.RED -> "BLUE"
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>Color.RED<!> -> "BLUE"
|
||||
Color.BLUE -> "BLUE"
|
||||
}
|
||||
|
||||
@@ -59,3 +60,11 @@ fun fifth(arg: Any?) = when (arg) {
|
||||
<!ELSE_MISPLACED_IN_WHEN!>else<!> -> ""
|
||||
else -> null
|
||||
}
|
||||
|
||||
object Foo
|
||||
|
||||
fun sixth(arg: Any?) = when (arg) {
|
||||
Foo -> ""
|
||||
<!DUPLICATE_LABEL_IN_WHEN!>Foo<!> -> ""
|
||||
else -> null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user