FIR: fix type index computation during enhancement

1. in/out type parameters count;
2. star projections take up 1 space in the tree.
This commit is contained in:
pyos
2021-08-02 11:53:11 +02:00
committed by teamcityserver
parent 5fec9f34b1
commit 8e122397b0
30 changed files with 194 additions and 263 deletions
@@ -35,7 +35,8 @@ fun main(
a: A, b: B
): Unit {
a.bar(aNotNullNotNullNotNull)
a.bar(aNotNullNotNullNull)
// jspecify_nullness_mismatch
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNotNullNull<!>)
// jspecify_nullness_mismatch
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNotNull<!>)
// jspecify_nullness_mismatch
@@ -90,7 +90,8 @@ fun test2() {
// String in Foo is not null
isNotNullAndNullableStringInFoo(
UtilNullMarked.getFooOfString(),
UtilNullMarked.getFooOfString()
// jspecify_nullness_mismatch
<!ARGUMENT_TYPE_MISMATCH!>UtilNullMarked.getFooOfString()<!>
)
}
@@ -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..kotlin.String?!>")!>Foo.create()<!>
return <!DEBUG_INFO_EXPRESSION_TYPE("Foo<kotlin.String>")!>Foo.create()<!>
}
@@ -34,7 +34,7 @@ fun main(
a: A, b: B
): Unit {
a.bar(aNotNullNotNullNotNull)
a.bar(aNotNullNotNullNull)
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNotNullNull<!>)
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNotNull<!>)
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNull<!>)
@@ -77,7 +77,7 @@ import test.L
fun main(a: test.A, l: L<Map<String, Int>, Int?>, l1: L<Map<String, Int>, Int>) {
a.foo(l)
a.foo(l as L<Map<String, Int>, Int>)
a.foo(<!ARGUMENT_TYPE_MISMATCH!>l as L<Map<String, Int>, Int><!>)
a.foo(l as L<Map<String, Int?>, Int?>)
a.bar(l1)
@@ -32,23 +32,23 @@ fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
fun <K> takeArrayOfNullableK(x: Array<K?>) {}
fun <R> main(a: ReturnType<R>) {
val x1 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String?, R..R?!>..ReturnType.A<kotlin.String?, R..R?!>?!")!>a.foo1()<!>
val x1 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String?, R?>..ReturnType.A<kotlin.String?, R?>?!")!>a.foo1()<!>
takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndKNullable(x1)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNotNullString(a.foo41.foo411)
takeNotNullString(<!ARGUMENT_TYPE_MISMATCH!>a.foo41.foo411<!>)
val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String, R..R?!>..ReturnType.A<kotlin.String, R..R?!>?!")!>a.foo2()<!>
takeNotNullStringAndKNullable(x2)
val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String?, R!!>..ReturnType.A<kotlin.String?, R!!>?!")!>a.foo2()<!>
takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndNotNullK(x2)
val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String, R..R?!>..ReturnType.A<kotlin.String, R..R?!>?!")!>a.foo3<!>
takeNotNullStringAndKNullable(x3)
val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String, R!!>..ReturnType.A<kotlin.String, R!!>?!")!>a.foo3<!>
takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNotNullStringAndNotNullK(x3)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R..R?!>..kotlin.Array<out R..R?!>")!>a.foo4<!>
@@ -1,31 +0,0 @@
// SOURCE_RETENTION_ANNOTATIONS
// FILE: Base.java
public interface Base<T> {}
// FILE: A.java
import org.checkerframework.checker.nullness.qual.*;
public class A {
@Nullable Base<@NonNull String> foo() { return null; }
}
// FILE: a.kt
interface Derived<E> : Base<E> {}
fun bar1(): Derived<String> = null!!
fun bar2(): Derived<String?> = null!!
class B : A() {
override fun foo(): Base<String> { return bar1(); }
}
class C1 : A() {
override fun foo(): Derived<String> { return bar1(); }
}
class C2 : A() {
override fun foo(): Derived<String>? { return bar1(); }
}
class C3 : A() {
override fun foo(): Derived<String?> { return bar2(); }
}
@@ -1,3 +1,4 @@
// FIR_IDENTICAL
// SOURCE_RETENTION_ANNOTATIONS
// FILE: Base.java
public interface Base<T> {}
@@ -34,23 +34,23 @@ fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
fun <K> takeArrayOfNullableK(x: Array<K?>) {}
fun <R> main(a: ReturnTypeWithWarnings<R>) {
val x1 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String?, R..R?!>..ReturnTypeWithWarnings.A<kotlin.String?, R..R?!>?!")!>a.foo1()<!>
val x1 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String?, R?>..ReturnTypeWithWarnings.A<kotlin.String?, R?>?!")!>a.foo1()<!>
takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndKNullable(x1)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNotNullString(a.foo41.foo411)
takeNotNullString(<!ARGUMENT_TYPE_MISMATCH!>a.foo41.foo411<!>)
val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String, R..R?!>..ReturnTypeWithWarnings.A<kotlin.String, R..R?!>?!")!>a.foo2()<!>
takeNotNullStringAndKNullable(x2)
val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String?, R!!>..ReturnTypeWithWarnings.A<kotlin.String?, R!!>?!")!>a.foo2()<!>
takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndNotNullK(x2)
val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String, R..R?!>..ReturnTypeWithWarnings.A<kotlin.String, R..R?!>?!")!>a.foo3<!>
takeNotNullStringAndKNullable(x3)
val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String, R!!>..ReturnTypeWithWarnings.A<kotlin.String, R!!>?!")!>a.foo3<!>
takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNotNullStringAndNotNullK(x3)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R..R?!>..kotlin.Array<out R..R?!>")!>a.foo4<!>
@@ -37,14 +37,14 @@ fun <R> main(a: ValueParameter<R>) {
a.foo1(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>)
a.foo1(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo2(getNotNullStringAndKNullable())
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndKNullable()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndKNullable()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo2(getNullableStringAndNotNullK())
a.foo3(getNotNullStringAndKNullable())
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndKNullable()<!>)
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndKNullable()<!>)
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>)
a.foo3(getNotNullStringAndNotNullK())
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo4(<!ARGUMENT_TYPE_MISMATCH!>getArrayOfNotNullString()<!>)
@@ -39,14 +39,14 @@ fun <R> main(a: ValueParameterWithWarnings<R>) {
a.foo1(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>)
a.foo1(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo2(getNotNullStringAndKNullable())
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndKNullable()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndKNullable()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo2(getNullableStringAndNotNullK())
a.foo3(getNotNullStringAndKNullable())
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndKNullable()<!>)
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndKNullable()<!>)
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>)
a.foo3(getNotNullStringAndNotNullK())
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo4(<!ARGUMENT_TYPE_MISMATCH!>getArrayOfNotNullString()<!>)