FIR: use frontend-independent Java type qualifier computation

This commit is contained in:
pyos
2021-08-11 21:20:15 +02:00
committed by teamcityserver
parent e385484994
commit e2a48d3945
14 changed files with 149 additions and 249 deletions
@@ -15,23 +15,19 @@ public class Test {}
// FILE: main.kt
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<Any?>, x: Test): Unit {
// jspecify_nullness_mismatch
a1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
a1.foo(null)
a1.foo(1)
// jspecify_nullness_mismatch
a2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
a2.foo(null)
a2.foo(1)
// jspecify_nullness_mismatch, jspecify_nullness_mismatch
a1.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
// jspecify_nullness_mismatch
a1.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
a1.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, null)
a1.bar(x, null)
a1.bar(x, 1)
// jspecify_nullness_mismatch, jspecify_nullness_mismatch
a2.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
// jspecify_nullness_mismatch
a2.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
a2.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, null)
a2.bar(x, null)
a2.bar(x, 1)
}
@@ -39,15 +39,12 @@ public class CKN extends C<@Nullable CK> {}
// FILE: main.kt
fun main(ak: AK, akn: AKN, bk: BK, ck: CK, ckn: CKN): Unit {
ak.foo(ak)
// jspecify_nullness_mismatch
ak.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
ak.foo(null)
// jspecify_nullness_mismatch
akn.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
akn.foo(null)
bk.foo(bk)
// jspecify_nullness_mismatch
bk.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
bk.foo(null)
ck.foo(ck)
ck.foo(null)
@@ -30,13 +30,11 @@ fun <T : Test> main(a1: A<Any?>, a2: A<Test>, b1: B<Any?>, b2: B<Test>, x: T): U
a2.bar<T?>(null)
a2.bar<T>(x)
// jspecify_nullness_mismatch
b1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
b1.foo(null)
b1.bar<T?>(null)
b1.bar<T>(x)
// jspecify_nullness_mismatch
b2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
b2.foo(null)
b2.bar<T?>(null)
b2.bar<T>(x)
}
@@ -14,5 +14,5 @@ public class Foo<T extends @Nullable Object> {
// FILE: main.kt
fun test(): Foo<String> {
return <!DEBUG_INFO_EXPRESSION_TYPE("Foo<kotlin.String>")!>Foo.create()<!>
return <!DEBUG_INFO_EXPRESSION_TYPE("Foo<kotlin.String..kotlin.String?!>")!>Foo.create()<!>
}
@@ -14,17 +14,17 @@ public class Test {}
// FILE: main.kt
fun main(a1: NullnessUnspecifiedTypeParameter<Any>, a2: NullnessUnspecifiedTypeParameter<Any?>, x: Test): Unit {
a1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
a1.foo(null)
a1.foo(1)
a2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
a2.foo(null)
a2.foo(1)
a1.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
a1.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
a1.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, null)
a1.bar(x, null)
a1.bar(x, 1)
a2.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, <!NULL_FOR_NONNULL_TYPE!>null<!>)
a2.bar(x, <!NULL_FOR_NONNULL_TYPE!>null<!>)
a2.bar(<!NULL_FOR_NONNULL_TYPE!>null<!>, null)
a2.bar(x, null)
a2.bar(x, 1)
}
@@ -40,12 +40,12 @@ public class CKN extends C<@Nullable CK> {}
// FILE: main.kt
fun main(ak: AK, akn: AKN, bk: BK, ck: CK, ckn: CKN): Unit {
ak.foo(ak)
ak.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
ak.foo(null)
akn.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>) // the corresponding warning/error is present on the Java side
akn.foo(null) // the corresponding warning/error is present on the Java side
bk.foo(bk)
bk.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
bk.foo(null)
ck.foo(ck)
ck.foo(null)
@@ -29,11 +29,11 @@ fun <T : Test> main(a1: A<Any?>, a2: A<Test>, b1: B<Any?>, b2: B<Test>, x: T): U
a2.bar<T?>(null)
a2.bar<T>(x)
b1.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
b1.foo(null)
b1.bar<T?>(null)
b1.bar<T>(x)
b2.foo(<!NULL_FOR_NONNULL_TYPE!>null<!>)
b2.foo(null)
b2.bar<T?>(null)
b2.bar<T>(x)
}
@@ -51,15 +51,15 @@ fun <R> main(a: ReturnType<R>) {
takeNotNullStringAndNotNullK(x3)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R!!>..kotlin.Array<out R!!>")!>a.foo4<!>
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R!!>..kotlin.Array<out R!!>?!")!>a.foo4<!>
takeArrayOfNotNullString(<!ARGUMENT_TYPE_MISMATCH!>x4<!>)
takeArrayOfNullableString(<!ARGUMENT_TYPE_MISMATCH!>x4<!>)
takeArrayOfNotNullK(x4)
takeArrayOfNullableK(<!ARGUMENT_TYPE_MISMATCH!>x4<!>)
val x5 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<kotlin.String?>?..kotlin.Array<out kotlin.String?>??")!>a.foo5()<!>
val x5 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<kotlin.String?>..kotlin.Array<out kotlin.String?>?!")!>a.foo5()<!>
takeArrayOfNotNullString(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableString(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableString(x5)
takeArrayOfNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableK(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableK(x5)
}
@@ -53,15 +53,15 @@ fun <R> main(a: ReturnTypeWithWarnings<R>) {
takeNotNullStringAndNotNullK(x3)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R!!>..kotlin.Array<out R!!>")!>a.foo4<!>
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R!!>..kotlin.Array<out R!!>?!")!>a.foo4<!>
takeArrayOfNotNullString(<!ARGUMENT_TYPE_MISMATCH!>x4<!>)
takeArrayOfNullableString(<!ARGUMENT_TYPE_MISMATCH!>x4<!>)
takeArrayOfNotNullK(x4)
takeArrayOfNullableK(<!ARGUMENT_TYPE_MISMATCH!>x4<!>)
val x5 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<kotlin.String?>?..kotlin.Array<out kotlin.String?>??")!>a.foo5()<!>
val x5 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<kotlin.String?>..kotlin.Array<out kotlin.String?>?!")!>a.foo5()<!>
takeArrayOfNotNullString(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableString(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableString(x5)
takeArrayOfNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableK(<!ARGUMENT_TYPE_MISMATCH!>x5<!>)
takeArrayOfNullableK(x5)
}