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,21 +0,0 @@
// FILE: f1.kt
// SKIP_TXT
package kotlin
class Unit
// FILE: f2.kt
class C: MutableIterator<Int> {
override fun remove(): Unit {
throw UnsupportedOperationException()
}
override fun next(): Int {
throw UnsupportedOperationException()
}
override fun hasNext(): Boolean {
throw UnsupportedOperationException()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// FILE: f1.kt
// SKIP_TXT
@@ -1,32 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE
// MODULE: m1
// FILE: a.kt
package p
public class A
public class B {
public val a: A = A()
}
// MODULE: m2
// FILE: b.kt
package p
public class A {
val x = 1
}
public fun foo(a: A) {
a.x + 1
}
// MODULE: m3(m1, m2)
// FILE: b.kt
import p.*
fun test() {
foo(B().a)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE
// MODULE: m1
// FILE: a.kt
@@ -1,30 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// MODULE: m1
// FILE: a.kt
package p
public interface A
public class B : A
public class M1 {
public val b: B = B()
}
// MODULE: m2
// FILE: b.kt
package p
public interface A
public fun foo(a: A) {
}
// MODULE: m3(m1, m2)
// FILE: b.kt
import p.*
fun test() {
foo(M1().b)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// MODULE: m1
// FILE: a.kt
@@ -1,23 +0,0 @@
// MODULE: m1
// FILE: a.kt
package p
public class A
public class B {
public val a: A = A()
}
// MODULE: m2(m1)
// FILE: b.kt
package p
class A {
fun foo() {}
}
fun test() {
val a: A = B().a
a.foo()
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: a.kt
@@ -1,29 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// MODULE: m1
// FILE: a.kt
package p
public class A<T>
public class M1 {
public val a: A<Int> = A()
}
// MODULE: m2
// FILE: b.kt
package p
public class A<T>
public fun foo(a: A<Int>) {
}
// MODULE: m3(m1, m2)
// FILE: b.kt
import p.*
fun test() {
foo(M1().a)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// MODULE: m1
// FILE: a.kt
@@ -1,36 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B<T> {
public fun foo(a: T)
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C<X> : B<X> {
override fun foo(a: X)
}
// MODULE: m3
// FILE: b.kt
package p
public interface B<T> {
public fun foo(a: T)
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B<String>?) {
if (b is C) {
b?.foo("")
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,38 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B<T> {
public fun foo(a: T?)
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C<X> : B<X> {
override fun foo(a: X?)
}
// MODULE: m3
// FILE: b.kt
package p
public interface Tr
public interface B<T: Tr?> {
public fun foo(a: T?)
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B<Tr>?) {
if (b is C) {
b?.foo(null)
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,36 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B<T> {
public fun foo(a: T)
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C<X> : B<X> {
override fun foo(a: X)
}
// MODULE: m3
// FILE: b.kt
package p
public interface B<T1> {
public fun foo(a: T1)
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun <Y> test(b: B<Y>?, y: Y) {
if (b is C) {
b?.foo(y)
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,36 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B<T> {
public fun foo(): T
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C<X> : B<X> {
override fun foo(): X
}
// MODULE: m3
// FILE: b.kt
package p
public interface B<T> {
public fun foo(): T
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B<String>?) {
if (b is C) {
b?.foo()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,36 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun foo(a: Int, b: String): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun foo(a: Int, b: String): B?
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun foo(a1: Int, b1: String): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b is C) {
b?.foo(1, "")
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,36 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun String.getParent(): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public class C : B {
override fun String.getParent(): B? = null
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun String.getParent(): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun B.test() {
if (this is C) {
"".getParent()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,42 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun <T> foo(a: T): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun <T> foo(a: T): B?
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun <T> foo(a: T): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b is C) {
b?.foo<String>("")
}
}
fun test1(b: B?) {
if (b is C) {
b?.foo("")
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,52 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun <T> foo(a: T): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun <T> foo(a: T): B?
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun <T> foo(a: T): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b == null) return
b?.foo<String>("")
}
fun test1(b: B?) {
if (b != null) {
b?.foo<String>("")
}
}
fun test2(b: B?) {
if (b == null) return
b?.foo("")
}
fun test3(b: B?) {
if (b != null) {
b?.foo("")
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,40 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun <T> foo(a: T): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun <T> foo(a: T): B?
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun <T> foo(a: T): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b !is C) return
b?.foo("")
}
fun test1(b: B?) {
if (b !is C) return
b?.foo<String>("")
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,44 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface Foo<T>
public interface B {
public fun <T> foo(a: T): Foo<T>
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun <T> foo(a: T): Foo<T>
}
// MODULE: m3
// FILE: b.kt
package p
public interface Foo<T>
public interface B {
public fun <T> foo(a: T): Foo<T>
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b !is C) return
b?.foo("")
}
fun test1(b: B?) {
if (b !is C) return
b?.foo<String>("")
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,40 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun <T> foo(a: T): T
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun <T> foo(a: T): T
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun <T> foo(a: T): T
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b !is C) return
b?.foo("")
}
fun test1(b: B?) {
if (b !is C) return
b?.foo<String>("")
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,35 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun foo(a: Int, b: String): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public interface C : B {
override fun foo(a: Int, b: String): B?
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun foo(a: Int, b: String): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b is C) {
b?.foo(1, "")
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
@@ -1,36 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
// FILE: a.kt
package p
public interface B {
public fun getParent(): B?
}
// MODULE: m2(m1)
// FILE: b.kt
package p
public class C : B {
override fun getParent(): B? = null
}
// MODULE: m3
// FILE: b.kt
package p
public interface B {
public fun getParent(): B?
}
// MODULE: m4(m3, m2)
// FILE: c.kt
import p.*
fun test(b: B?) {
if (b is C) {
b?.getParent()
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m1
@@ -1,43 +0,0 @@
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m0
// FILE: a.kt
package p
public interface G1<T>
public interface G2<A, B>
// MODULE: m1(m0)
// FILE: a.kt
package p
public interface B {
public fun foo(a: G1<Int>, b: G2<B, String>): B?
}
// MODULE: m2(m1, m0)
// FILE: b.kt
package p
public interface C : B {
override fun foo(a: G1<Int>, b: G2<B, String>): B?
}
// MODULE: m3(m0)
// FILE: b.kt
package p
public interface B {
public fun foo(a: G1<Int>, b: G2<B, String>): B?
}
// MODULE: m4(m3, m2, m0)
// FILE: c.kt
import p.*
fun test(b: B?, a: G1<Int>, b1: G2<B, String>) {
if (b is C) {
b?.foo(a, b1)
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNNECESSARY_SAFE_CALL
// MODULE: m0
@@ -1,31 +0,0 @@
// MODULE: m1
// FILE: x.kt
package p
public interface Base {
public fun foo() {}
}
public interface A : Base {
override fun foo() {}
}
public interface C : A
// MODULE: m2
// FILE: x.kt
package p
public interface Base {
public fun foo() {}
}
public interface B : Base
// MODULE: m3(m1, m2)
// FILE: x.kt
import p.*
class Foo: C, B
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: x.kt
package p
@@ -1,26 +0,0 @@
// MODULE: m1
// FILE: x.kt
package p
public interface Base {
public fun foo() {}
}
public interface A : Base
// MODULE: m2
// FILE: x.kt
package p
public interface Base {
public fun foo() {}
}
public interface B : Base
// MODULE: m3(m1, m2)
// FILE: x.kt
import p.*
class Foo: A, B
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: x.kt
package p
@@ -1,29 +0,0 @@
// MODULE: m1
// FILE: x.kt
package p
public interface Base {
public fun <T> foo(t: Array<T>) {}
}
public interface A : Base
// MODULE: m2
// FILE: x.kt
package p
public interface Base {
public fun <T: Base> foo(t: Array<T>) {}
}
public interface B : Base
// MODULE: m3(m1, m2)
// FILE: x.kt
import p.*
class Foo: A, B {
override fun <T> foo(t: Array<T>) {}
override fun <T: Base> foo(t: Array<T>) {}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: x.kt
package p
@@ -1,26 +0,0 @@
// MODULE: m1
// FILE: x.kt
package p
public interface Base<T> {
public fun foo(t: T) {}
}
public interface A<T> : Base<T>
// MODULE: m2
// FILE: x.kt
package p
public interface Base<T> {
public fun foo(t: T) {}
}
public interface B : Base<String>
// MODULE: m3(m1, m2)
// FILE: x.kt
import p.*
class Foo: A<String>, B
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: x.kt
package p
@@ -1,20 +0,0 @@
// MODULE: m1
// FILE: test/Foo.java
package test;
class Foo {
static Foo create() { return Foo(); }
void takeFoo(Foo f) {}
}
// MODULE: m2(m1)
// FILE: test.kt
package test
fun test() {
Foo()
val a: Foo = Foo.create()
Foo().takeFoo(a)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// MODULE: m1
// FILE: test/Foo.java
@@ -1,26 +0,0 @@
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// MODULE: m1
// FILE: a.kt
package p
public fun foo(a: Int) {}
public fun foo(vararg values: Int) {}
// MODULE: m2
// FILE: b.kt
package p
public fun foo(a: Int) {}
public fun foo(vararg values: Int) {}
// MODULE: m3(m1, m2)
// FILE: c.kt
package m
import p.foo
fun main() {
foo(12)
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -UNUSED_VARIABLE -UNUSED_PARAMETER
// MODULE: m1
// FILE: a.kt