[NI] Automatically squash equal diagnostics in OI and NI in testdata

This commit is contained in:
Dmitriy Novozhilov
2019-04-18 13:54:47 +03:00
parent 642f8ecaf8
commit e70bdb51c5
30 changed files with 82 additions and 80 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ fun foo(c: Consumer<Int>, p: Producer<Int>, u: Usual<Int>) {
val <!UNUSED_VARIABLE!>p2<!>: Producer<Int> = <!TYPE_MISMATCH!>p1<!> val <!UNUSED_VARIABLE!>p2<!>: Producer<Int> = <!TYPE_MISMATCH!>p1<!>
val u1: Usual<Any> = <!TYPE_MISMATCH!>u<!> val u1: Usual<Any> = <!TYPE_MISMATCH!>u<!>
val <!UNUSED_VARIABLE!>u2<!>: Usual<Int> = <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH!>u1<!> val <!UNUSED_VARIABLE!>u2<!>: Usual<Int> = <!TYPE_MISMATCH!>u1<!>
} }
//Arrays copy example //Arrays copy example
@@ -34,6 +34,6 @@ val bbb = null ?: ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>)
val bbbb = ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>) ?: ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>) val bbbb = ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>) ?: ( l() <!USELESS_ELVIS_RIGHT_IS_NULL!>?: null<!>)
fun f(x : Long?): Long { fun f(x : Long?): Long {
var a = x ?: (<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_MISMATCH!>fun() {}<!> <!USELESS_ELVIS!>?: <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_MISMATCH!>fun() {}<!><!>) var a = x ?: (<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>fun() {}<!> <!USELESS_ELVIS!>?: <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>fun() {}<!><!>)
return <!OI;DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a<!> return <!OI;DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>a<!>
} }
@@ -108,7 +108,7 @@ fun testImplicitCoercion() {
val <!UNUSED_VARIABLE!>h<!> = if (false) <!IMPLICIT_CAST_TO_ANY!>4<!> else <!IMPLICIT_CAST_TO_ANY!>{}<!> val <!UNUSED_VARIABLE!>h<!> = if (false) <!IMPLICIT_CAST_TO_ANY!>4<!> else <!IMPLICIT_CAST_TO_ANY!>{}<!>
bar(<!NI;TYPE_MISMATCH!>if (true) { bar(<!NI;TYPE_MISMATCH!>if (true) {
<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, NI;CONSTANT_EXPECTED_TYPE_MISMATCH, OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!> <!CONSTANT_EXPECTED_TYPE_MISMATCH, NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>4<!>
} }
else { else {
<!UNUSED_VALUE!>z =<!> 342 <!UNUSED_VALUE!>z =<!> 342
@@ -24,7 +24,7 @@ fun foo(x: MC<out Open>) {
x.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Derived>()<!>) x.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Derived>()<!>)
x.addAllMC(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Derived>()<!>) x.addAllMC(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<Derived>()<!>)
x.addAll(<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>c<!>()) x.addAll(<!IMPLICIT_NOTHING_AS_TYPE_PARAMETER, NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>c<!>())
x.addAll(c<Nothing>()) x.addAll(c<Nothing>())
x.<!OI;MEMBER_PROJECTED_OUT!>addAllInv<!>(<!NI;TYPE_MISMATCH!>mc<Open>()<!>) x.<!OI;MEMBER_PROJECTED_OUT!>addAllInv<!>(<!NI;TYPE_MISMATCH!>mc<Open>()<!>)
@@ -17,7 +17,7 @@ fun test(a: A<out CharSequence>, z: Out<CharSequence>) {
<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>""<!> <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>""<!>
} }
a.bar { <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>Out<CharSequence>()<!> } a.bar { <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>Out<CharSequence>()<!> }
a.bar { <!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>Out<!>() } a.bar { <!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>Out<!>() }
a.bar { <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>z.id()<!> } a.bar { <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>z.id()<!> }
a.foo { a.foo {
@@ -16,7 +16,7 @@ fun foo2(a: A<out CharSequence>, b: A<in CharSequence>) {
a.<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Out<CharSequence>()<!>) a.<!OI;TYPE_INFERENCE_UPPER_BOUND_VIOLATED!>foo1<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>Out<CharSequence>()<!>)
a.foo1<<!UPPER_BOUND_VIOLATED!>Out<CharSequence><!>>(<!NI;TYPE_MISMATCH!><!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>Out<!>()<!>) a.foo1<<!UPPER_BOUND_VIOLATED!>Out<CharSequence><!>>(<!NI;TYPE_MISMATCH!><!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>Out<!>()<!>)
a.foo1(<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>Out<!>()) a.foo1(<!IMPLICIT_NOTHING_AS_TYPE_PARAMETER, NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>Out<!>())
a.foo1(Out<Nothing>()) a.foo1(Out<Nothing>())
a.<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;TYPE_INFERENCE_INCORPORATION_ERROR!>foo2<!>(<!NI;TYPE_MISMATCH!><!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Inv<!>()<!>) a.<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;TYPE_INFERENCE_INCORPORATION_ERROR!>foo2<!>(<!NI;TYPE_MISMATCH!><!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>Inv<!>()<!>)
@@ -17,7 +17,7 @@ fun main(a: A<*>, j: JavaClass<*>, i2: Inv2<*>) {
j.foo() checkType { _<Any?>() } j.foo() checkType { _<Any?>() }
i2.x checkType { _<Any?>() } i2.x checkType { _<Any?>() }
j.bar(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, <!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, OI;CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>, <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>Any()<!>) j.bar(<!CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, <!CONSTANT_EXPECTED_TYPE_MISMATCH!>2<!>, <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>Any()<!>)
j.bar(null) j.bar(null)
} }
@@ -7,6 +7,6 @@ fun foo1() {
<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>fooT22<!>() <!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>fooT22<!>()
} }
val n : Nothing = null.<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>sure<!>() val n : Nothing = null.<!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>sure<!>()
fun <T : Any> T?.sure() : T = this!! fun <T : Any> T?.sure() : T = this!!
@@ -9,8 +9,8 @@ inline fun <reified T> foo2(f: (T) -> Unit): Foo<T> = Foo()
fun test1() { fun test1() {
val f1: Foo<out Int> = foo1 { it checkType { _<Int>() } } val f1: Foo<out Int> = foo1 { it checkType { _<Int>() } }
val f2: Foo<in Nothing> = <!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>foo1<!> { it <!UNREACHABLE_CODE!><!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>checkType<!> { _<Nothing>() }<!> } val f2: Foo<in Nothing> = <!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>foo1<!> { it <!UNREACHABLE_CODE!><!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>checkType<!> { _<Nothing>() }<!> }
val f3: Foo<out Int> = foo2 { it checkType { _<Int>() } } val f3: Foo<out Int> = foo2 { it checkType { _<Int>() } }
val f4: Foo<in Nothing> = <!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo2<!> { it <!UNREACHABLE_CODE!><!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>checkType<!> { _<Nothing>() }<!> } val f4: Foo<in Nothing> = <!IMPLICIT_NOTHING_AS_TYPE_PARAMETER, REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo2<!> { it <!UNREACHABLE_CODE!><!IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>checkType<!> { _<Nothing>() }<!> }
} }
@@ -14,6 +14,6 @@ fun <T, G> A<T>.foo(x: (T)-> G): G {
fun main() { fun main() {
val a = A(1) val a = A(1)
val t: String = <!NI;TYPE_MISMATCH!>a.<!OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>foo({p -> <!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH!>p<!>})<!><!> val t: String = <!NI;TYPE_MISMATCH!>a.<!OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>foo({p -> <!TYPE_MISMATCH!>p<!>})<!><!>
checkSubtype<String>(t) checkSubtype<String>(t)
} }
@@ -11,9 +11,9 @@ public class A {
// FILE: k.kt // FILE: k.kt
fun test() { fun test() {
A.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>bar<!>(<!NI;NULL_FOR_NONNULL_TYPE, OI;NULL_FOR_NONNULL_TYPE!>null<!>, "") A.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>bar<!>(<!NULL_FOR_NONNULL_TYPE!>null<!>, "")
A.bar<String>(<!NULL_FOR_NONNULL_TYPE!>null<!>, "") A.bar<String>(<!NULL_FOR_NONNULL_TYPE!>null<!>, "")
A.bar<String?>(<!NI;NULL_FOR_NONNULL_TYPE, OI;NULL_FOR_NONNULL_TYPE!>null<!>, "") A.bar<String?>(<!NULL_FOR_NONNULL_TYPE!>null<!>, "")
A.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>bar<!>(<!NI;NULL_FOR_NONNULL_TYPE, OI;NULL_FOR_NONNULL_TYPE!>null<!>, A.platformString()) A.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>bar<!>(<!NULL_FOR_NONNULL_TYPE!>null<!>, A.platformString())
} }
@@ -2,7 +2,7 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER // !DIAGNOSTICS: -UNUSED_PARAMETER
fun test(a: Int, b: Boolean) { fun test(a: Int, b: Boolean) {
<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(a.<!OI;TYPE_INFERENCE_PARAMETER_CONSTRAINT_ERROR!>foo<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_MISMATCH!>b<!>)) <!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>bar<!>(a.<!OI;TYPE_INFERENCE_PARAMETER_CONSTRAINT_ERROR!>foo<!>(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, TYPE_MISMATCH!>b<!>))
} }
fun <T, R> T.foo(l: (T) -> R): R = TODO() fun <T, R> T.foo(l: (T) -> R): R = TODO()
@@ -41,7 +41,7 @@ fun test() {
baz { baz {
y() y()
<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;FUNCTION_EXPECTED, OI;FUNCTION_EXPECTED, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>x<!>() <!FUNCTION_EXPECTED, NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>x<!>()
with(D()) { with(D()) {
x() x()
@@ -37,7 +37,7 @@ fun test() {
baz { baz {
y() y()
<!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;FUNCTION_EXPECTED, OI;FUNCTION_EXPECTED, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>x<!>() <!FUNCTION_EXPECTED, NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, UNRESOLVED_REFERENCE_WRONG_RECEIVER!>x<!>()
with(D()) { with(D()) {
x() x()
@@ -1,15 +1,15 @@
// !WITH_NEW_INFERENCE // !WITH_NEW_INFERENCE
fun test(mc: MutableCollection<out CharSequence>) { fun test(mc: MutableCollection<out CharSequence>) {
mc.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<!>) mc.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>mc<!>)
mc.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>arrayListOf<CharSequence>()<!>) mc.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>arrayListOf<CharSequence>()<!>)
mc.addAll(<!OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>arrayListOf<!>()) mc.addAll(<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>arrayListOf<!>())
mc.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>listOf("")<!>) mc.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>listOf("")<!>)
mc.addAll(<!NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>listOf<String>("")<!>) mc.addAll(<!TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>listOf<String>("")<!>)
mc.addAll(<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, OI;TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>listOf<CharSequence>("")<!>) mc.addAll(<!NI;TYPE_MISMATCH, TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS!>listOf<CharSequence>("")<!>)
mc.addAll(<!OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>emptyList<!>()) mc.addAll(<!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, IMPLICIT_NOTHING_AS_TYPE_PARAMETER!>emptyList<!>())
mc.addAll(emptyList<Nothing>()) mc.addAll(emptyList<Nothing>())
} }
@@ -6,6 +6,6 @@ public @interface A {
} }
// FILE: b.kt // FILE: b.kt
@A(*<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH("Array<out String>", "IGNORE")!>arrayOf(1, "b")<!>) @A(*<!NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>arrayOf(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, "b")<!>)
fun test() { fun test() {
} }
@@ -2,6 +2,6 @@
annotation class B(vararg val args: String) annotation class B(vararg val args: String)
@B(*<!TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH("Array<out String>", "IGNORE")!>arrayOf(1, "b")<!>) @B(*<!NI;TYPE_MISMATCH, OI;TYPE_INFERENCE_EXPECTED_TYPE_MISMATCH!>arrayOf(<!NI;CONSTANT_EXPECTED_TYPE_MISMATCH, NI;CONSTANT_EXPECTED_TYPE_MISMATCH!>1<!>, "b")<!>)
fun test() { fun test() {
} }
@@ -38,7 +38,7 @@ fun test() {
severalParams("", 89) checkType { _<Double>() } severalParams("", 89) checkType { _<Double>() }
// TODO: should we allow somehow to call with passing continuation explicitly? // TODO: should we allow somehow to call with passing continuation explicitly?
severalParams("", 89, <!TOO_MANY_ARGUMENTS!>6.9<!>) checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;TYPE_MISMATCH!>_<!><Unit>() } severalParams("", 89, <!TOO_MANY_ARGUMENTS!>6.9<!>) checkType { <!TYPE_MISMATCH!>_<!><Unit>() }
severalParams("", 89, <!TOO_MANY_ARGUMENTS!>this <!CAST_NEVER_SUCCEEDS!>as<!> Continuation<Double><!>) checkType { <!NI;DEBUG_INFO_UNRESOLVED_WITH_TARGET, NI;UNRESOLVED_REFERENCE_WRONG_RECEIVER, OI;TYPE_MISMATCH!>_<!><Unit>() } severalParams("", 89, <!TOO_MANY_ARGUMENTS!>this <!CAST_NEVER_SUCCEEDS!>as<!> Continuation<Double><!>) checkType { <!TYPE_MISMATCH!>_<!><Unit>() }
} }
} }
@@ -13,7 +13,7 @@ fun <T> test3(t1: @kotlin.internal.NoInfer T): T = t1
fun usage() { fun usage() {
<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>test1<!>(1, <!TYPE_MISMATCH!>"312"<!>) <!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>test1<!>(1, <!TYPE_MISMATCH!>"312"<!>)
<!OI;TYPE_MISMATCH!>1<!>.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>test2<!>("") <!OI;TYPE_MISMATCH!>1<!>.<!OI;TYPE_INFERENCE_INCORPORATION_ERROR!>test2<!>("")
<!OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>("") <!NI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, OI;TYPE_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>test3<!>("")
} }
@Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") @Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE")
@@ -14,10 +14,10 @@ fun foo() {
x[0] = <!TYPE_MISMATCH!>bar()<!> x[0] = <!TYPE_MISMATCH!>bar()<!>
x[0] = "" x[0] = ""
val b1: MutableList<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableList<String?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableList<String> = x val b2: MutableList<String> = x
val b3: List<String?> = x val b3: List<String?> = x
val b4: Collection<String?> = x val b4: Collection<String?> = x
val b6: MutableCollection<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b6: MutableCollection<String?> = <!TYPE_MISMATCH!>x<!>
} }
@@ -15,7 +15,7 @@ fun foo() {
x[0] = "" x[0] = ""
val b1: MutableList<String?> = x val b1: MutableList<String?> = x
val b2: MutableList<String> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b2: MutableList<String> = <!TYPE_MISMATCH!>x<!>
val b3: List<String?> = x val b3: List<String?> = x
val b4: Collection<String?> = x val b4: Collection<String?> = x
@@ -29,5 +29,5 @@ fun foo() {
x.add("") x.add("")
val b1: Collection<String?> = x val b1: Collection<String?> = x
val b2: MutableCollection<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b2: MutableCollection<String?> = <!TYPE_MISMATCH!>x<!>
} }
@@ -32,10 +32,10 @@ fun foo() {
x[0] = <!TYPE_MISMATCH!>bar()<!> x[0] = <!TYPE_MISMATCH!>bar()<!>
x[0] = "" x[0] = ""
val b1: MutableList<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableList<String?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableList<String> = x val b2: MutableList<String> = x
val b3: List<String?> = x val b3: List<String?> = x
val b4: Collection<String?> = x val b4: Collection<String?> = x
val b6: MutableCollection<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b6: MutableCollection<String?> = <!TYPE_MISMATCH!>x<!>
} }
@@ -18,14 +18,14 @@ fun hashMapTest() {
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!> <!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!>
x[""] = 1 x[""] = 1
val b1: MutableMap<String, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String, Int?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String, Int> = x val b2: MutableMap<String, Int> = x
val b3: Map<String?, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b3: Map<String?, Int> = <!TYPE_MISMATCH!>x<!>
val b4: Map<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b4: Map<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b5: Map<String, Int?> = x val b5: Map<String, Int?> = x
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b7: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b8: Int? = x.get("") val b8: Int? = x.get("")
} }
@@ -42,14 +42,14 @@ fun treeMapTest() {
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!> <!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!>
x[""] = 1 x[""] = 1
val b1: MutableMap<String, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String, Int?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String, Int> = x val b2: MutableMap<String, Int> = x
val b3: Map<String?, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b3: Map<String?, Int> = <!TYPE_MISMATCH!>x<!>
val b4: Map<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b4: Map<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b5: Map<String, Int?> = x val b5: Map<String, Int?> = x
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b7: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b8: Int? = x.get("") val b8: Int? = x.get("")
} }
@@ -66,14 +66,14 @@ fun concurrentHashMapTest() {
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!> <!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!>
x[""] = 1 x[""] = 1
val b1: MutableMap<String, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String, Int?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String, Int> = x val b2: MutableMap<String, Int> = x
val b3: Map<String?, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b3: Map<String?, Int> = <!TYPE_MISMATCH!>x<!>
val b4: Map<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b4: Map<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b5: Map<String, Int?> = x val b5: Map<String, Int?> = x
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b7: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b8: Int? = x.get("") val b8: Int? = x.get("")
} }
@@ -17,15 +17,15 @@ fun hashMapTest() {
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!> <!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!>
x[""] = 1 x[""] = 1
val b1: MutableMap<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String?, Int> = x val b2: MutableMap<String?, Int> = x
val b3: Map<String?, Int> = x val b3: Map<String?, Int> = x
val b4: Map<String?, Int?> = x val b4: Map<String?, Int?> = x
val b5: Map<String, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b5: Map<String, Int?> = <!TYPE_MISMATCH!>x<!>
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[null]<!> val b7: Int = <!TYPE_MISMATCH!>x[null]<!>
val b8: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b8: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b9: Int? = x.get("") val b9: Int? = x.get("")
} }
@@ -42,14 +42,14 @@ fun treeMapTest() {
<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!> <!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>x[""]<!> = <!NI;TYPE_MISMATCH!>nullableInt<!>
x[""] = 1 x[""] = 1
val b1: MutableMap<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String?, Int> = x val b2: MutableMap<String?, Int> = x
val b3: Map<String?, Int> = x val b3: Map<String?, Int> = x
val b4: Map<String?, Int?> = x val b4: Map<String?, Int?> = x
val b5: Map<String, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b5: Map<String, Int?> = <!TYPE_MISMATCH!>x<!>
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b7: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b8: Int? = x.get("") val b8: Int? = x.get("")
} }
@@ -17,14 +17,14 @@ fun hashMapTest() {
x[""] = nullableInt x[""] = nullableInt
x[""] = 1 x[""] = 1
val b1: MutableMap<String, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String, Int> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String, Int?> = x val b2: MutableMap<String, Int?> = x
val b3: Map<String, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b3: Map<String, Int> = <!TYPE_MISMATCH!>x<!>
val b4: Map<String, Int?> = x val b4: Map<String, Int?> = x
val b5: Map<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b5: Map<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b7: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b8: Int? = x.get("") val b8: Int? = x.get("")
} }
@@ -41,14 +41,14 @@ fun treeMapTest() {
x[""] = nullableInt x[""] = nullableInt
x[""] = 1 x[""] = 1
val b1: MutableMap<String, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableMap<String, Int> = <!TYPE_MISMATCH!>x<!>
val b2: MutableMap<String, Int?> = x val b2: MutableMap<String, Int?> = x
val b3: Map<String, Int> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b3: Map<String, Int> = <!TYPE_MISMATCH!>x<!>
val b4: Map<String, Int?> = x val b4: Map<String, Int?> = x
val b5: Map<String?, Int?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b5: Map<String?, Int?> = <!TYPE_MISMATCH!>x<!>
val b6: Int = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x[""]<!> val b6: Int = <!TYPE_MISMATCH!>x[""]<!>
val b7: Int = <!TYPE_MISMATCH!>x.<!NI;TYPE_MISMATCH!>get("")<!><!> val b7: Int = <!TYPE_MISMATCH!>x.get("")<!>
val b8: Int? = x.get("") val b8: Int? = x.get("")
} }
@@ -10,12 +10,12 @@ fun fooHashSet() {
x.add(<!TYPE_MISMATCH!>bar()<!>) x.add(<!TYPE_MISMATCH!>bar()<!>)
x.add("") x.add("")
val b1: MutableSet<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableSet<String?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableSet<String> = x val b2: MutableSet<String> = x
val b3: Set<String?> = x val b3: Set<String?> = x
val b4: Collection<String?> = x val b4: Collection<String?> = x
val b6: MutableCollection<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b6: MutableCollection<String?> = <!TYPE_MISMATCH!>x<!>
} }
fun fooTreeSet() { fun fooTreeSet() {
@@ -24,12 +24,12 @@ fun fooTreeSet() {
x.add(<!TYPE_MISMATCH!>bar()<!>) x.add(<!TYPE_MISMATCH!>bar()<!>)
x.add("") x.add("")
val b1: MutableSet<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableSet<String?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableSet<String> = x val b2: MutableSet<String> = x
val b3: Set<String?> = x val b3: Set<String?> = x
val b4: Collection<String?> = x val b4: Collection<String?> = x
val b6: MutableCollection<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b6: MutableCollection<String?> = <!TYPE_MISMATCH!>x<!>
} }
fun fooLinkedHashSet() { fun fooLinkedHashSet() {
@@ -38,10 +38,10 @@ fun fooLinkedHashSet() {
x.add(<!TYPE_MISMATCH!>bar()<!>) x.add(<!TYPE_MISMATCH!>bar()<!>)
x.add("") x.add("")
val b1: MutableSet<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b1: MutableSet<String?> = <!TYPE_MISMATCH!>x<!>
val b2: MutableSet<String> = x val b2: MutableSet<String> = x
val b3: Set<String?> = x val b3: Set<String?> = x
val b4: Collection<String?> = x val b4: Collection<String?> = x
val b6: MutableCollection<String?> = <!NI;TYPE_MISMATCH, TYPE_MISMATCH!>x<!> val b6: MutableCollection<String?> = <!TYPE_MISMATCH!>x<!>
} }
@@ -6,11 +6,11 @@ inline fun<reified T> foo(block: () -> T): String = block().toString()
inline fun <reified T: Any> javaClass(): Class<T> = T::class.java inline fun <reified T: Any> javaClass(): Class<T> = T::class.java
fun box() { fun box() {
val a = <!OI;IMPLICIT_NOTHING_AS_TYPE_PARAMETER, REIFIED_TYPE_FORBIDDEN_SUBSTITUTION, UNSUPPORTED!>arrayOf<!>(null!!) val a = <!IMPLICIT_NOTHING_AS_TYPE_PARAMETER, REIFIED_TYPE_FORBIDDEN_SUBSTITUTION, UNSUPPORTED!>arrayOf<!>(null!!)
val b = <!UNSUPPORTED!>Array<!><<!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>Nothing?<!>>(5) { null!! } val b = <!UNSUPPORTED!>Array<!><<!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>Nothing?<!>>(5) { null!! }
val c = <!OI;REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!>() { null!! } val c = <!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!>() { null!! }
val d = foo<Any> { null!! } val d = foo<Any> { null!! }
val e = <!OI;REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!> { "1" <!CAST_NEVER_SUCCEEDS!>as<!> Nothing } val e = <!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!> { "1" <!CAST_NEVER_SUCCEEDS!>as<!> Nothing }
val e1 = <!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!> { "1" <!CAST_NEVER_SUCCEEDS!>as<!> Nothing? } val e1 = <!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>foo<!> { "1" <!CAST_NEVER_SUCCEEDS!>as<!> Nothing? }
val f = javaClass<<!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>Nothing<!>>() val f = javaClass<<!REIFIED_TYPE_FORBIDDEN_SUBSTITUTION!>Nothing<!>>()
@@ -10,7 +10,7 @@ fun main() {
val pi = 4.0.toDouble() * delta <!OI;OVERLOAD_RESOLUTION_AMBIGUITY!>*<!> (1..n).<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>reduce<!>( val pi = 4.0.toDouble() * delta <!OI;OVERLOAD_RESOLUTION_AMBIGUITY!>*<!> (1..n).<!OI;TYPE_INFERENCE_CONFLICTING_SUBSTITUTIONS!>reduce<!>(
{t, i -> {t, i ->
val x = (i - 0.5) * delta val x = (i - 0.5) * delta
<!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>t + 1.0 / (1.0 + x * x)<!> <!NI;TYPE_MISMATCH, NI;TYPE_MISMATCH, NI;TYPE_MISMATCH!>t + 1.0 / (1.0 + x * x)<!>
}) })
// !!! pi has error type here // !!! pi has error type here
@@ -195,7 +195,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
exceptionFromDynamicCallDescriptorsValidation = e exceptionFromDynamicCallDescriptorsValidation = e
} }
KotlinTestUtils.assertEqualsToFile(getExpectedDiagnosticsFile(testDataFile), actualText.toString()) { s -> KotlinTestUtils.assertEqualsToFile(getExpectedDiagnosticsFile(testDataFile), actualText.cleanupInferenceDiagnostics()) { s ->
s.replace("COROUTINES_PACKAGE", coroutinesPackage) s.replace("COROUTINES_PACKAGE", coroutinesPackage)
} }
@@ -211,6 +211,8 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
) )
} }
private fun StringBuilder.cleanupInferenceDiagnostics(): String = replace(Regex("NI;([\\S]*), OI;\\1([,!])")) { it.groupValues[1] + it.groupValues[2] }
protected open fun getExpectedDiagnosticsFile(testDataFile: File): File { protected open fun getExpectedDiagnosticsFile(testDataFile: File): File {
return testDataFile return testDataFile
} }