FIR checker: report COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH

This commit is contained in:
Jinseong Jeon
2021-04-06 16:45:45 -07:00
committed by Mikhail Glukhikh
parent e511eec90e
commit 87c50235ed
20 changed files with 194 additions and 74 deletions
@@ -33,5 +33,5 @@ fun <T> test(x: T) {
val s4: Pair<Int?, String> = bar(null, null, ::foo)
val s5: Pair<Int, String> = bar(1, "", ::foo)
val (a1: Int, b1: String) = bar(1, "", ::foo)
val (a1: Int, b1: String) = <!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>bar(1, "", ::foo)<!>
}
@@ -1,9 +0,0 @@
// !WITH_NEW_INFERENCE
class A {
operator fun component1() : Int = 1
operator fun component2() : Int = 2
}
fun a(aa : A) {
val (a: String, b1: String) = aa
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !WITH_NEW_INFERENCE
class A {
operator fun component1() : Int = 1
@@ -1,15 +0,0 @@
// !WITH_NEW_INFERENCE
class A {
operator fun component1() = 1
operator fun component2() = 1.0
}
class C {
operator fun iterator(): Iterator<A> = null!!
}
fun test() {
for ((x: Double, y: Int) in C()) {
}
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// !WITH_NEW_INFERENCE
class A {
operator fun component1() = 1
@@ -22,7 +22,7 @@ fun bar(aList: List<A>) {
b checkType { _<String>() }
}
aList.foo { (a: String, b) ->
aList.foo { (<!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>a: String<!>, b) ->
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
b checkType { _<String>() }
}
@@ -42,7 +42,7 @@ fun bar() {
d checkType { _<Short>() }
}
foo { (a: String, b) ->
foo { (<!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>a: String<!>, b) ->
a checkType { <!INAPPLICABLE_CANDIDATE!>_<!><Int>() }
b checkType { _<String>() }
}
@@ -0,0 +1,16 @@
// FIR_IDENTICAL
data class A<T>(val i: T)
fun <T> foo(block: (A<T>) -> Unit) {}
fun <T, R> bar() {
foo<R> { (<!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>i: T<!>) ->
i
}
}
data class C<T>(val x: Int, val y: T)
fun <T, S> foo(c: C<T>) {
val (x: Int, y: S) = <!COMPONENT_FUNCTION_RETURN_TYPE_MISMATCH!>c<!>
}
@@ -0,0 +1,27 @@
package
public fun </*0*/ T, /*1*/ R> bar(): kotlin.Unit
public fun </*0*/ T> foo(/*0*/ block: (A<T>) -> kotlin.Unit): kotlin.Unit
public fun </*0*/ T, /*1*/ S> foo(/*0*/ c: C<T>): kotlin.Unit
public final data class A</*0*/ T> {
public constructor A</*0*/ T>(/*0*/ i: T)
public final val i: T
public final operator /*synthesized*/ fun component1(): T
public final /*synthesized*/ fun copy(/*0*/ i: T = ...): A<T>
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}
public final data class C</*0*/ T> {
public constructor C</*0*/ T>(/*0*/ x: kotlin.Int, /*1*/ y: T)
public final val x: kotlin.Int
public final val y: T
public final operator /*synthesized*/ fun component1(): kotlin.Int
public final operator /*synthesized*/ fun component2(): T
public final /*synthesized*/ fun copy(/*0*/ x: kotlin.Int = ..., /*1*/ y: T = ...): C<T>
public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*synthesized*/ fun toString(): kotlin.String
}