Introduce FIR_IDENTICAL for FIR vs old frontend tests #KT-36879 Fixed

This commit is contained in:
Mikhail Glukhikh
2020-03-04 17:54:33 +03:00
parent 186e0b0cba
commit 8884cbe415
2268 changed files with 1175 additions and 19754 deletions
@@ -1,8 +0,0 @@
fun foo(a: Int) {
@ann
when (a) {
1 -> {}
}
}
annotation class ann
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo(a: Int) {
@ann
when (a) {
@@ -1,8 +0,0 @@
// EA-68871: empty when condition
fun foo(arg: Int): Int {
when (arg) {
0 -> return 0
<!SYNTAX!><!>-> return 4
else -> return -1
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// EA-68871: empty when condition
fun foo(arg: Int): Int {
when (arg) {
@@ -1,9 +0,0 @@
// EA-68871: empty when condition
enum class My { FIRST, SECOND }
fun foo(arg: My): Int {
when (arg) {
My.FIRST -> return 0
<!SYNTAX!><!>-> return 4
else -> return -1
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// EA-68871: empty when condition
enum class My { FIRST, SECOND }
fun foo(arg: My): Int {
@@ -1,8 +0,0 @@
// See also: KT-3743
fun foo(arg: Boolean): String {
// Must be exhaustive
return when(arg) {
true -> "truth"
false -> "falsehood"
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See also: KT-3743
fun foo(arg: Boolean): String {
// Must be exhaustive
@@ -1,7 +0,0 @@
fun foo(arg: Boolean): String {
// Must be exhaustive
return when(arg) {
(true) -> "truth"
((false)) -> "falsehood"
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo(arg: Boolean): String {
// Must be exhaustive
return when(arg) {
@@ -1,8 +0,0 @@
// See also: KT-3743
fun foo(arg: Boolean): String {
// Must be exhaustive
return when(arg) {
2 == 2 -> "truth"
2 == 1 -> "falsehood"
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See also: KT-3743
fun foo(arg: Boolean): String {
// Must be exhaustive
@@ -1,9 +0,0 @@
// See also: KT-3743
fun foo(arg: Boolean?): String {
// Must be exhaustive
return when(arg) {
true -> "truth"
false -> "falsehood"
null -> "unknown"
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See also: KT-3743
fun foo(arg: Boolean?): String {
// Must be exhaustive
@@ -1,23 +0,0 @@
// See KT-6399: exhaustive whens on platform enums
// FILE: J.java
import org.jetbrains.annotations.*;
public enum J {
A, B;
@NotNull public static J create() {
return J.A;
}
}
// FILE: K.kt
fun foo(): Int {
// When is exhaustive (count a platform enum as a special case)
return when (J.create()) {
J.A -> 1
J.B -> 2
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See KT-6399: exhaustive whens on platform enums
// FILE: J.java
@@ -1,21 +0,0 @@
// See KT-6399: exhaustive whens on platform enums
// FILE: J.java
public enum J {
A, B;
public static J create() {
return J.A;
}
}
// FILE: K.kt
fun foo(): Int {
return when (J.create()) {
J.A -> 1
J.B -> 2
else -> 0
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See KT-6399: exhaustive whens on platform enums
// FILE: J.java
@@ -1,22 +0,0 @@
// See KT-6399: exhaustive whens on platform enums
// FILE: J.java
public enum J {
A, B;
public static J create() {
return J.A;
}
}
// FILE: K.kt
fun foo(): Int {
// When is exhaustive including null
return when (J.create()) {
J.A -> 1
J.B -> 2
null -> 0
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// See KT-6399: exhaustive whens on platform enums
// FILE: J.java
@@ -1,6 +0,0 @@
fun foo(x: Int) {
when (x) {
2 -> {}
3 -> {}
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
fun foo(x: Int) {
when (x) {
2 -> {}
@@ -1,12 +0,0 @@
// Base for KT-6227
enum class X { A, B, C, D }
fun foo(arg: X): String {
val res: String
when (arg) {
X.A -> res = "A"
X.B -> res = "B"
else -> res = "CD"
}
return res
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// Base for KT-6227
enum class X { A, B, C, D }
@@ -1,14 +0,0 @@
// Base for KT-6227
enum class X { A, B, C, D }
fun foo(arg: X?): String {
var res = "XXX"
// Should we report something here? Probably not, null is not an enum entry
when (arg) {
X.A -> res = "A"
X.B -> res = "B"
X.C -> res = "C"
X.D -> res = "D"
}
return res
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// Base for KT-6227
enum class X { A, B, C, D }
-24
View File
@@ -1,24 +0,0 @@
interface Maybe<T>
class Some<T>(val value: T) : Maybe<T>
class None<T> : Maybe<T>
fun <T> none() : None<T> = TODO()
fun test1() : Maybe<String?> = if (true) none() else Some("")
fun test2() : Maybe<String?> = when {
true -> none()
else -> Some("")
}
fun test3() : Maybe<String?> = when {
true -> none()
else -> Some<String?>("")
}
fun test4() : Maybe<String?> {
when ("") {
"a" -> return none()
else -> return Some<String?>("")
}
}
+1
View File
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
interface Maybe<T>
class Some<T>(val value: T) : Maybe<T>
class None<T> : Maybe<T>
@@ -1,14 +0,0 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE
fun foo(): Any = 42
fun test(x: Any) {
val z1 = when (val y = foo()) {
42 -> "Magic: $y, $x"
else -> {
"Not magic: $y, $x"
}
}
val z2 = "Anyway, it was $<!UNRESOLVED_REFERENCE!>y<!>"
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE
@@ -1,10 +0,0 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
fun testNoSubjectVariableName(x: Int?) {
val y = when (val<!SYNTAX!><!> = 42) {
0 -> "0"
else -> "not 0"
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
@@ -1,7 +0,0 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
fun test(data: String) =
when (data.length) {
0 -> -1
else -> 42
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +VariableDeclarationInWhenSubject
fun test(data: String) =
@@ -1,8 +0,0 @@
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
fun test(x: Any) {
when (val y = x) {
is String -> {}
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !LANGUAGE: +VariableDeclarationInWhenSubject
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER