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
@@ -22,5 +22,5 @@ FILE: main.kt
public final fun test_1(b: R|B<kotlin/Int>|, x: R|kotlin/Int|, inv: R|Inv<kotlin/Int>|): R|kotlin/Unit| { public final fun test_1(b: R|B<kotlin/Int>|, x: R|kotlin/Int|, inv: R|Inv<kotlin/Int>|): R|kotlin/Unit| {
R|<local>/b|.<Ambiguity: take, [/B.take, /B.take]>#(R|<local>/x|) R|<local>/b|.<Ambiguity: take, [/B.take, /B.take]>#(R|<local>/x|)
R|<local>/b|.<Ambiguity: take, [/B.take, /B.take]>#(Null(null)) R|<local>/b|.<Ambiguity: take, [/B.take, /B.take]>#(Null(null))
R|<local>/b|.R|SubstitutionOverride</B.takeInv: R|kotlin/String|>|(R|<local>/inv|) R|<local>/b|.<Ambiguity: takeInv, [/B.takeInv, /B.takeInv]>#(R|<local>/inv|)
} }
+2 -2
View File
@@ -21,11 +21,11 @@ open <!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class B<!><V> : A<Any, V>() {
return "" return ""
} }
override fun takeInv(value: Inv<V>): String = "" <!NOTHING_TO_OVERRIDE!>override<!> fun takeInv(value: Inv<V>): String = ""
} }
fun test_1(b: B<Int>, x: Int, inv: Inv<Int>) { fun test_1(b: B<Int>, x: Int, inv: Inv<Int>) {
b.<!OVERLOAD_RESOLUTION_AMBIGUITY!>take<!>(x) b.<!OVERLOAD_RESOLUTION_AMBIGUITY!>take<!>(x)
b.<!NONE_APPLICABLE!>take<!>(null) b.<!NONE_APPLICABLE!>take<!>(null)
b.takeInv(inv) b.<!OVERLOAD_RESOLUTION_AMBIGUITY!>takeInv<!>(inv)
} }
@@ -8,5 +8,5 @@ FILE: test.kt
} }
public final fun test(some: R|kotlin/collections/Iterable<kotlin/String>|): R|kotlin/Unit| { public final fun test(some: R|kotlin/collections/Iterable<kotlin/String>|): R|kotlin/Unit| {
lval it: R|kotlin/collections/Iterator<kotlin/String>| = R|<local>/some|.R|SubstitutionOverride<kotlin/collections/Iterable.iterator: R|kotlin/collections/Iterator<kotlin/String>|>|() lval it: R|kotlin/collections/Iterator<kotlin/String>| = R|<local>/some|.R|SubstitutionOverride<kotlin/collections/Iterable.iterator: R|kotlin/collections/Iterator<kotlin/String>|>|()
lval split: R|java/util/Spliterator<ft<kotlin/String, kotlin/String?>>| = R|<local>/some|.R|SubstitutionOverride<kotlin/collections/Iterable.spliterator: R|@EnhancedNullability java/util/Spliterator<ft<kotlin/String, kotlin/String?>>|>|() lval split: R|java/util/Spliterator<kotlin/String>| = R|<local>/some|.R|SubstitutionOverride<kotlin/collections/Iterable.spliterator: R|@EnhancedNullability java/util/Spliterator<kotlin/String>|>|()
} }
@@ -1,4 +1,4 @@
FILE: useSite.kt FILE: useSite.kt
public final fun foo(holder: R|U|, box: R|Box<kotlin/Int>|): R|kotlin/Int| { public final fun foo(holder: R|U|, box: R|Box<kotlin/Int>|): R|kotlin/Int| {
^foo R|<local>/holder|.R|/U.getValue|<R|ft<kotlin/Int, kotlin/Int?>|>(R|<local>/box|) ^foo R|<local>/holder|.R|/U.getValue|<R|kotlin/Int|>(R|<local>/box|)
} }
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.java.toConeKotlinTypeWithoutEnhancement
import org.jetbrains.kotlin.fir.java.toFirJavaTypeRef import org.jetbrains.kotlin.fir.java.toFirJavaTypeRef
import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType import org.jetbrains.kotlin.load.java.AnnotationQualifierApplicabilityType
import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers
@@ -94,32 +95,27 @@ internal class EnhancementSignatureParts(
val list = ArrayList<TypeAndDefaultQualifiers>(1) val list = ArrayList<TypeAndDefaultQualifiers>(1)
fun add(type: FirTypeRef?) { fun add(type: FirTypeRef?) {
// TODO: should use the context from parent type
val c = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, type?.annotations.orEmpty()) val c = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, type?.annotations.orEmpty())
list.add(TypeAndDefaultQualifiers(type, c.defaultTypeQualifiers?.get(AnnotationQualifierApplicabilityType.TYPE_USE)))
list.add( when (type) {
TypeAndDefaultQualifiers( is FirJavaTypeRef -> {
type, for (arg in type.type.typeArguments()) {
c.defaultTypeQualifiers add(arg.takeIf { it !is JavaWildcardType }?.toFirJavaTypeRef(context.session, javaTypeParameterStack))
?.get(AnnotationQualifierApplicabilityType.TYPE_USE)
)
)
if (type is FirJavaTypeRef) {
for (arg in type.type.typeArguments()) {
if (arg is JavaWildcardType || arg == null) {
add(null)
} else {
add(arg.toFirJavaTypeRef(context.session, javaTypeParameterStack))
} }
} }
} else if (type != null) { is FirUserTypeRef -> {
for (arg in type.typeArguments()) { for (arg in type.qualifier.lastOrNull()?.typeArgumentList?.typeArguments.orEmpty()) {
if (arg is FirStarProjection) { add((arg as? FirTypeProjectionWithVariance)?.typeRef)
add(null)
} else if (arg is FirTypeProjectionWithVariance) {
add(arg.typeRef)
} }
} }
is FirResolvedTypeRef -> {
for (arg in type.type.typeArguments) {
add(arg.type?.let { buildResolvedTypeRef { this.type = it } })
}
}
else -> Unit
} }
} }
@@ -28,8 +28,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl
import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.typeContext
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
import org.jetbrains.kotlin.fir.types.builder.buildStarProjection
import org.jetbrains.kotlin.fir.types.builder.buildTypeProjectionWithVariance
import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef import org.jetbrains.kotlin.fir.types.jvm.FirJavaTypeRef
import org.jetbrains.kotlin.load.java.* import org.jetbrains.kotlin.load.java.*
import org.jetbrains.kotlin.load.java.structure.JavaClassifierType import org.jetbrains.kotlin.load.java.structure.JavaClassifierType
@@ -40,7 +38,6 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker
import org.jetbrains.kotlin.types.ConstantValueKind import org.jetbrains.kotlin.types.ConstantValueKind
import org.jetbrains.kotlin.types.Variance
import org.jetbrains.kotlin.utils.extractRadix import org.jetbrains.kotlin.utils.extractRadix
internal class IndexedJavaTypeQualifiers(private val data: Array<JavaTypeQualifiers>) { internal class IndexedJavaTypeQualifiers(private val data: Array<JavaTypeQualifiers>) {
@@ -55,42 +52,43 @@ internal fun FirJavaTypeRef.enhance(
session: FirSession, session: FirSession,
qualifiers: IndexedJavaTypeQualifiers, qualifiers: IndexedJavaTypeQualifiers,
typeWithoutEnhancement: ConeKotlinType, typeWithoutEnhancement: ConeKotlinType,
): FirResolvedTypeRef { ): FirResolvedTypeRef =
return typeWithoutEnhancement.enhancePossiblyFlexible(session, annotations, qualifiers, 0) buildResolvedTypeRef {
} val subtreeSizes = mutableListOf<Int>().apply { typeWithoutEnhancement.computeSubtreeSizes(this) }
type = typeWithoutEnhancement.enhanceConeKotlinType(session, qualifiers, 0, subtreeSizes)
// The index in the lambda is the position of the type component: annotations += this@enhance.annotations
// Example: for `A<B, C<D, E>>`, indices go as follows: `0 - A<...>, 1 - B, 2 - C<D, E>, 3 - D, 4 - E`,
// which corresponds to the left-to-right breadth-first walk of the tree representation of the type.
// For flexible types, both bounds are indexed in the same way: `(A<B>..C<D>)` gives `0 - (A<B>..C<D>), 1 - B and D`.
private fun ConeKotlinType.enhancePossiblyFlexible(
session: FirSession,
annotations: List<FirAnnotationCall>,
qualifiers: IndexedJavaTypeQualifiers,
index: Int
): FirResolvedTypeRef {
val enhanced = enhanceConeKotlinType(session, qualifiers, index)
return buildResolvedTypeRef {
this.type = enhanced
this.annotations += annotations
} }
// The index in the lambda is the position of the type component in a depth-first walk of the tree.
// Example: A<B<C, D>, E<F>> - 0<1<2, 3>, 4<5>>. For flexible types, the number of nodes in the lower
// and upper bounds should be the same, and their indices match: (A<B>..C<D>) -> (0<1>..0<1>).
// This function precomputes the size of each subtree so that we can quickly skip to the next
// type argument; e.g. subtreeSizes[1] will give 3 for B<C, D>, indicating that E<F> is at 1 + 3 = 4.
private fun ConeKotlinType.computeSubtreeSizes(result: MutableList<Int>): Int {
val index = result.size
result.add(0) // reserve space at index
result[index] = 1 + typeArguments.sumOf {
// Star projections take up one (empty) entry.
it.type?.computeSubtreeSizes(result) ?: 1.also { result.add(1) }
}
return result[index]
} }
private fun ConeKotlinType.enhanceConeKotlinType( private fun ConeKotlinType.enhanceConeKotlinType(
session: FirSession, session: FirSession,
qualifiers: IndexedJavaTypeQualifiers, qualifiers: IndexedJavaTypeQualifiers,
index: Int index: Int,
subtreeSizes: List<Int>
): ConeKotlinType { ): ConeKotlinType {
return when (this) { return when (this) {
is ConeFlexibleType -> { is ConeFlexibleType -> {
val isRawType = this is ConeRawType val isRawType = this is ConeRawType
val lowerResult = lowerBound.enhanceInflexibleType( val lowerResult = lowerBound.enhanceInflexibleType(
session, TypeComponentPosition.FLEXIBLE_LOWER, qualifiers, index, isRawType session, TypeComponentPosition.FLEXIBLE_LOWER, qualifiers, index, subtreeSizes, isRawType
) )
val upperResult = upperBound.enhanceInflexibleType( val upperResult = upperBound.enhanceInflexibleType(
session, TypeComponentPosition.FLEXIBLE_UPPER, qualifiers, index, isRawType session, TypeComponentPosition.FLEXIBLE_UPPER, qualifiers, index, subtreeSizes, isRawType
) )
when { when {
@@ -102,16 +100,12 @@ private fun ConeKotlinType.enhanceConeKotlinType(
} }
} }
is ConeSimpleKotlinType -> enhanceInflexibleType( is ConeSimpleKotlinType -> enhanceInflexibleType(
session, TypeComponentPosition.INFLEXIBLE, qualifiers, index, isBoundOfRawType = false session, TypeComponentPosition.INFLEXIBLE, qualifiers, index, subtreeSizes, isBoundOfRawType = false
) )
else -> this else -> this
} }
} }
private fun ConeKotlinType.subtreeSize(): Int {
return 1 + typeArguments.sumOf { ((it as? ConeKotlinType)?.subtreeSize() ?: 0) + 1 }
}
private fun coneFlexibleOrSimpleType( private fun coneFlexibleOrSimpleType(
session: FirSession, session: FirSession,
lowerBound: ConeKotlinType, lowerBound: ConeKotlinType,
@@ -163,6 +157,7 @@ private fun ConeKotlinType.enhanceInflexibleType(
position: TypeComponentPosition, position: TypeComponentPosition,
qualifiers: IndexedJavaTypeQualifiers, qualifiers: IndexedJavaTypeQualifiers,
index: Int, index: Int,
subtreeSizes: List<Int>,
@Suppress("UNUSED_PARAMETER") isBoundOfRawType: Boolean, @Suppress("UNUSED_PARAMETER") isBoundOfRawType: Boolean,
): ConeKotlinType { ): ConeKotlinType {
require(this !is ConeFlexibleType) { "$this should not be flexible" } require(this !is ConeFlexibleType) { "$this should not be flexible" }
@@ -185,9 +180,8 @@ private fun ConeKotlinType.enhanceInflexibleType(
arg arg
} else { } else {
require(arg is ConeKotlinType) { "Should be invariant type: $arg" } require(arg is ConeKotlinType) { "Should be invariant type: $arg" }
globalArgIndex += arg.subtreeSize() val enhanced = arg.enhanceConeKotlinType(session, qualifiers, globalArgIndex, subtreeSizes)
globalArgIndex += subtreeSizes[globalArgIndex]
val enhanced = arg.enhanceConeKotlinType(session, qualifiers, globalArgIndex)
wereChangesInArgs = wereChangesInArgs || enhanced !== arg wereChangesInArgs = wereChangesInArgs || enhanced !== arg
enhanced.type enhanced.type
} }
@@ -261,35 +255,6 @@ internal data class TypeAndDefaultQualifiers(
val defaultQualifiers: JavaDefaultQualifiers? val defaultQualifiers: JavaDefaultQualifiers?
) )
internal fun FirTypeRef.typeArguments(): List<FirTypeProjection> = when (this) {
is FirUserTypeRef -> qualifier.lastOrNull()?.typeArgumentList?.typeArguments.orEmpty()
is FirResolvedTypeRef -> type.typeArguments.map {
when (it) {
is ConeStarProjection -> buildStarProjection {}
else -> {
val kind = it.kind
val type = when (it) {
is ConeKotlinTypeProjection -> it.type
is ConeKotlinType -> it
else -> error("Should not be here")
}
buildTypeProjectionWithVariance {
variance = when (kind) {
ProjectionKind.IN -> Variance.IN_VARIANCE
ProjectionKind.OUT -> Variance.OUT_VARIANCE
ProjectionKind.INVARIANT -> Variance.INVARIANT
else -> error("Should not be here")
}
typeRef = buildResolvedTypeRef {
this.type = type
}
}
}
}
}
else -> emptyList()
}
internal fun JavaType.typeArguments(): List<JavaType?> = (this as? JavaClassifierType)?.typeArguments.orEmpty() internal fun JavaType.typeArguments(): List<JavaType?> = (this as? JavaClassifierType)?.typeArguments.orEmpty()
internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String): FirExpression? { internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String): FirExpression? {
@@ -1,7 +1,6 @@
// !LANGUAGE: +StrictJavaNullabilityAssertions // !LANGUAGE: +StrictJavaNullabilityAssertions
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM, JVM_IR // IGNORE_BACKEND: JVM, JVM_IR
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,6 +1,5 @@
// !LANGUAGE: +StrictJavaNullabilityAssertions // !LANGUAGE: +StrictJavaNullabilityAssertions
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND_FIR: JVM_IR
// IGNORE_BACKEND: JVM, JVM_IR // IGNORE_BACKEND: JVM, JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,7 +1,6 @@
// !LANGUAGE: +StrictJavaNullabilityAssertions // !LANGUAGE: +StrictJavaNullabilityAssertions
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM, JVM_IR // IGNORE_BACKEND: JVM, JVM_IR
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,7 +1,6 @@
// !LANGUAGE: +StrictJavaNullabilityAssertions // !LANGUAGE: +StrictJavaNullabilityAssertions
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM, JVM_IR // IGNORE_BACKEND: JVM, JVM_IR
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -1,7 +1,6 @@
// !LANGUAGE: +StrictJavaNullabilityAssertions // !LANGUAGE: +StrictJavaNullabilityAssertions
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// IGNORE_BACKEND: JVM, JVM_IR // IGNORE_BACKEND: JVM, JVM_IR
// IGNORE_BACKEND_FIR: JVM_IR
// WITH_RUNTIME // WITH_RUNTIME
// JVM_TARGET: 1.8 // JVM_TARGET: 1.8
@@ -35,7 +35,8 @@ fun main(
a: A, b: B a: A, b: B
): Unit { ): Unit {
a.bar(aNotNullNotNullNotNull) a.bar(aNotNullNotNullNotNull)
a.bar(aNotNullNotNullNull) // jspecify_nullness_mismatch
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNotNullNull<!>)
// jspecify_nullness_mismatch // jspecify_nullness_mismatch
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNotNull<!>) a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNotNull<!>)
// jspecify_nullness_mismatch // jspecify_nullness_mismatch
@@ -90,7 +90,8 @@ fun test2() {
// String in Foo is not null // String in Foo is not null
isNotNullAndNullableStringInFoo( isNotNullAndNullableStringInFoo(
UtilNullMarked.getFooOfString(), 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 // FILE: main.kt
fun test(): Foo<String> { 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 a: A, b: B
): Unit { ): Unit {
a.bar(aNotNullNotNullNotNull) a.bar(aNotNullNotNullNotNull)
a.bar(aNotNullNotNullNull) a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNotNullNull<!>)
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNotNull<!>) a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNotNull<!>)
a.bar(<!ARGUMENT_TYPE_MISMATCH!>aNotNullNullNull<!>) 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>) { fun main(a: test.A, l: L<Map<String, Int>, Int?>, l1: L<Map<String, Int>, Int>) {
a.foo(l) 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.foo(l as L<Map<String, Int?>, Int?>)
a.bar(l1) a.bar(l1)
@@ -32,23 +32,23 @@ fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
fun <K> takeArrayOfNullableK(x: Array<K?>) {} fun <K> takeArrayOfNullableK(x: Array<K?>) {}
fun <R> main(a: ReturnType<R>) { 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<!>) takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndKNullable(x1) takeNullableStringAndKNullable(x1)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>) takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndNotNullK(<!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()<!> val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String?, R!!>..ReturnType.A<kotlin.String?, R!!>?!")!>a.foo2()<!>
takeNotNullStringAndKNullable(x2) takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>) takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNotNullStringAndNotNullK(<!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<!> val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnType.A<kotlin.String, R!!>..ReturnType.A<kotlin.String, R!!>?!")!>a.foo3<!>
takeNotNullStringAndKNullable(x3) takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>) takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>) takeNotNullStringAndNotNullK(x3)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>) takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R..R?!>..kotlin.Array<out R..R?!>")!>a.foo4<!> 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 // SOURCE_RETENTION_ANNOTATIONS
// FILE: Base.java // FILE: Base.java
public interface Base<T> {} public interface Base<T> {}
@@ -34,23 +34,23 @@ fun <K: Any> takeArrayOfNotNullK(x: Array<K>) {}
fun <K> takeArrayOfNullableK(x: Array<K?>) {} fun <K> takeArrayOfNullableK(x: Array<K?>) {}
fun <R> main(a: ReturnTypeWithWarnings<R>) { 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<!>) takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndKNullable(x1) takeNullableStringAndKNullable(x1)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>) takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x1<!>)
takeNullableStringAndNotNullK(<!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()<!> val x2 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String?, R!!>..ReturnTypeWithWarnings.A<kotlin.String?, R!!>?!")!>a.foo2()<!>
takeNotNullStringAndKNullable(x2) takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>) takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x2<!>)
takeNotNullStringAndNotNullK(<!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<!> val x3 = <!DEBUG_INFO_EXPRESSION_TYPE("ReturnTypeWithWarnings.A<kotlin.String, R!!>..ReturnTypeWithWarnings.A<kotlin.String, R!!>?!")!>a.foo3<!>
takeNotNullStringAndKNullable(x3) takeNotNullStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>) takeNullableStringAndKNullable(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
takeNotNullStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>) takeNotNullStringAndNotNullK(x3)
takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>) takeNullableStringAndNotNullK(<!ARGUMENT_TYPE_MISMATCH!>x3<!>)
val x4 = <!DEBUG_INFO_EXPRESSION_TYPE("kotlin.Array<R..R?!>..kotlin.Array<out R..R?!>")!>a.foo4<!> 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!>getNotNullStringAndNotNullK()<!>)
a.foo1(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>) 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!>getNullableStringAndKNullable()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>) 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!>getNullableStringAndKNullable()<!>)
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>) a.foo3(getNotNullStringAndNotNullK())
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>) a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo4(<!ARGUMENT_TYPE_MISMATCH!>getArrayOfNotNullString()<!>) 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!>getNotNullStringAndNotNullK()<!>)
a.foo1(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>) 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!>getNullableStringAndKNullable()<!>)
a.foo2(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>) 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!>getNullableStringAndKNullable()<!>)
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNotNullStringAndNotNullK()<!>) a.foo3(getNotNullStringAndNotNullK())
a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>) a.foo3(<!ARGUMENT_TYPE_MISMATCH!>getNullableStringAndNotNullK()<!>)
a.foo4(<!ARGUMENT_TYPE_MISMATCH!>getArrayOfNotNullString()<!>) a.foo4(<!ARGUMENT_TYPE_MISMATCH!>getArrayOfNotNullString()<!>)
@@ -19,7 +19,7 @@ public interface SLRUMap<V> {
fun <V> SLRUMap<V>.getOrPut(value: V, l: List<V>) { fun <V> SLRUMap<V>.getOrPut(value: V, l: List<V>) {
takeV(<!ARGUMENT_TYPE_MISMATCH!>value<!>) takeV(<!ARGUMENT_TYPE_MISMATCH!>value<!>)
takeVList(l) takeVList(<!ARGUMENT_TYPE_MISMATCH!>l<!>)
takeE(value) takeE(value)
takeEList(l) takeEList(l)
@@ -19,7 +19,7 @@ public interface SLRUMap<V> {
fun <V> SLRUMap<V>.getOrPut(value: V, l: List<V>) { fun <V> SLRUMap<V>.getOrPut(value: V, l: List<V>) {
takeV(<!ARGUMENT_TYPE_MISMATCH!>value<!>) takeV(<!ARGUMENT_TYPE_MISMATCH!>value<!>)
takeVList(l) takeVList(<!ARGUMENT_TYPE_MISMATCH!>l<!>)
takeE(value) takeE(value)
takeEList(l) takeEList(l)
@@ -116,9 +116,9 @@ FILE fqName:<root> fileName:/ImplicitReceiverStack.kt
public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] T of kotlin.collections.Iterable?>?): kotlin.Unit declared in kotlin.collections.Iterable public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] T of kotlin.collections.Iterable?>?): kotlin.Unit declared in kotlin.collections.Iterable
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.ImplicitReceiverValue<*>?>? VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.ImplicitReceiverValue<*>?>?
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<T of kotlin.collections.Iterable>) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.ImplicitReceiverValue<*>?> [fake_override] FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<T of kotlin.collections.Iterable>) returnType:@[EnhancedNullability] java.util.Spliterator<<root>.ImplicitReceiverValue<*>> [fake_override]
overridden: overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] T of kotlin.collections.Iterable?> declared in kotlin.collections.Iterable public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<T of kotlin.collections.Iterable> declared in kotlin.collections.Iterable
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden: overridden:
@@ -176,9 +176,9 @@ FILE fqName:<root> fileName:/ImplicitReceiverStack.kt
public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.ImplicitReceiverValue<*>?>?): kotlin.Unit [fake_override] declared in <root>.ImplicitReceiverStack public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.ImplicitReceiverValue<*>?>?): kotlin.Unit [fake_override] declared in <root>.ImplicitReceiverStack
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable>
VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.ImplicitReceiverValue<*>?>? VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.ImplicitReceiverValue<*>?>?
FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<T of kotlin.collections.Iterable>) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.ImplicitReceiverValue<*>?> [fake_override] FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<T of kotlin.collections.Iterable>) returnType:@[EnhancedNullability] java.util.Spliterator<<root>.ImplicitReceiverValue<*>> [fake_override]
overridden: overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.ImplicitReceiverValue<*>?> [fake_override] declared in <root>.ImplicitReceiverStack public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<<root>.ImplicitReceiverValue<*>> [fake_override] declared in <root>.ImplicitReceiverStack
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Iterable<T of kotlin.collections.Iterable>
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden: overridden:
+12 -12
View File
@@ -162,13 +162,13 @@ FILE fqName:<root> fileName:/MultiList.kt
overridden: overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] E of kotlin.collections.List?> [fake_override] declared in kotlin.collections.List public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] E of kotlin.collections.List?> [fake_override] declared in kotlin.collections.List
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.MyList>?> [fake_override] FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.MyList>> [fake_override]
overridden: overridden:
public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] E of kotlin.collections.List?> [fake_override] declared in kotlin.collections.List public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<E of kotlin.collections.List> [fake_override] declared in kotlin.collections.List
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.MyList>?> [fake_override] FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.MyList>> [fake_override]
overridden: overridden:
public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] E of kotlin.collections.List?> [fake_override] declared in kotlin.collections.List public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<E of kotlin.collections.List> [fake_override] declared in kotlin.collections.List
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<T of kotlin.collections.Iterable>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.MyList>?>?) returnType:kotlin.Unit [fake_override] FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable<T of kotlin.collections.Iterable>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.MyList>?>?) returnType:kotlin.Unit [fake_override]
overridden: overridden:
@@ -257,13 +257,13 @@ FILE fqName:<root> fileName:/MultiList.kt
overridden: overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] E of java.util.ArrayList?> declared in java.util.ArrayList public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] E of java.util.ArrayList?> declared in java.util.ArrayList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<E of java.util.ArrayList> $this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<E of java.util.ArrayList>
FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override] FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.SomeList>> [fake_override]
overridden: overridden:
public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.MyList>?> [fake_override] declared in <root>.MyList public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.MyList>> [fake_override] declared in <root>.MyList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override] FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.SomeList>> [fake_override]
overridden: overridden:
public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.MyList>?> [fake_override] declared in <root>.MyList public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.MyList>> [fake_override] declared in <root>.MyList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList<E of java.util.ArrayList>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>?) returnType:kotlin.Unit [fake_override] FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList<E of java.util.ArrayList>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<T of <root>.SomeList>?>?) returnType:kotlin.Unit [fake_override]
overridden: overridden:
@@ -451,13 +451,13 @@ FILE fqName:<root> fileName:/MultiList.kt
overridden: overridden:
public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override] declared in <root>.SomeList public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override] declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<E of java.util.ArrayList> $this: VALUE_PARAMETER name:<this> type:java.util.ArrayList<E of java.util.ArrayList>
FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<kotlin.String>?> [fake_override] FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<<root>.Some<kotlin.String>> [fake_override]
overridden: overridden:
public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override] declared in <root>.SomeList public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.SomeList>> [fake_override] declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<kotlin.String>?> [fake_override] FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection<E of kotlin.collections.Collection>) returnType:@[EnhancedNullability] java.util.stream.Stream<<root>.Some<kotlin.String>> [fake_override]
overridden: overridden:
public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] <root>.Some<T of <root>.SomeList>?> [fake_override] declared in <root>.SomeList public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<<root>.Some<T of <root>.SomeList>> [fake_override] declared in <root>.SomeList
$this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection> $this: VALUE_PARAMETER name:<this> type:kotlin.collections.Collection<E of kotlin.collections.Collection>
FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList<E of java.util.ArrayList>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<kotlin.String>?>?) returnType:kotlin.Unit [fake_override] FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList<E of java.util.ArrayList>, p0:@[FlexibleNullability] java.util.function.Consumer<in @[FlexibleNullability] <root>.Some<kotlin.String>?>?) returnType:kotlin.Unit [fake_override]
overridden: overridden:
@@ -59,30 +59,30 @@ fun test1() {
} }
fun test2() { fun test2() {
val <destruct>: @FlexibleNullability Q<@EnhancedNullability String, @FlexibleNullability String?>? = notNullComponents() val <destruct>: @FlexibleNullability Q<@EnhancedNullability String, @EnhancedNullability String>? = notNullComponents()
val x: String = <destruct>.component1() /*!! String */ val x: String = <destruct>.component1() /*!! String */
val y: @FlexibleNullability String? = <destruct>.component2() val y: String = <destruct>.component2() /*!! String */
use(x = x, y = y /*!! @FlexibleNullability String */) use(x = x, y = y)
} }
fun test2Desugared() { fun test2Desugared() {
val tmp: @FlexibleNullability Q<@EnhancedNullability String, @FlexibleNullability String?>? = notNullComponents() val tmp: @FlexibleNullability Q<@EnhancedNullability String, @EnhancedNullability String>? = notNullComponents()
val x: String = tmp.component1() /*!! String */ val x: String = tmp.component1() /*!! String */
val y: @FlexibleNullability String? = tmp.component2() val y: String = tmp.component2() /*!! String */
use(x = x, y = y /*!! @FlexibleNullability String */) use(x = x, y = y)
} }
fun test3() { fun test3() {
val <destruct>: Q<@EnhancedNullability String, @FlexibleNullability String?> = notNullQAndComponents() /*!! Q<@EnhancedNullability String, @FlexibleNullability String?> */ val <destruct>: Q<@EnhancedNullability String, @EnhancedNullability String> = notNullQAndComponents() /*!! Q<@EnhancedNullability String, @EnhancedNullability String> */
val x: String = <destruct>.component1() /*!! String */ val x: String = <destruct>.component1() /*!! String */
val y: @FlexibleNullability String? = <destruct>.component2() val y: String = <destruct>.component2() /*!! String */
use(x = x, y = y /*!! @FlexibleNullability String */) use(x = x, y = y)
} }
fun test4() { fun test4() {
val <destruct>: IndexedValue<@FlexibleNullability P?> = listOfNotNull() /*!! @FlexibleNullability List<@FlexibleNullability P?> */.withIndex<@FlexibleNullability P?>().first<IndexedValue<@FlexibleNullability P?>>() val <destruct>: IndexedValue<@EnhancedNullability P> = listOfNotNull() /*!! @FlexibleNullability List<@EnhancedNullability P> */.withIndex<@EnhancedNullability P>().first<IndexedValue<@EnhancedNullability P>>()
val x: Int = <destruct>.component1() val x: Int = <destruct>.component1()
val y: @FlexibleNullability P? = <destruct>.component2() val y: P = <destruct>.component2() /*!! P */
use(x = x, y = y /*!! @FlexibleNullability P */) use(x = x, y = y)
} }
@@ -131,66 +131,66 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
y: GET_VAR 'val y: kotlin.Int [val] declared in <root>.test1' type=kotlin.Int origin=null y: GET_VAR 'val y: kotlin.Int [val] declared in <root>.test1' type=kotlin.Int origin=null
FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val]
CALL 'public open fun notNullComponents (): @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? declared in <root>.J' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null CALL 'public open fun notNullComponents (): @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? declared in <root>.J' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
VAR name:x type:kotlin.String [val] VAR name:x type:kotlin.String [val]
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_VAR 'val tmp_1: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in <root>.test2' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null $this: GET_VAR 'val tmp_1: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in <root>.test2' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
VAR name:y type:@[FlexibleNullability] kotlin.String? [val] VAR name:y type:kotlin.String [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[FlexibleNullability] kotlin.String? origin=null TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
$this: GET_VAR 'val tmp_1: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in <root>.test2' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_VAR 'val tmp_1: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in <root>.test2' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
x: GET_VAR 'val x: kotlin.String [val] declared in <root>.test2' type=kotlin.String origin=null x: GET_VAR 'val x: kotlin.String [val] declared in <root>.test2' type=kotlin.String origin=null
y: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String y: GET_VAR 'val y: kotlin.String [val] declared in <root>.test2' type=kotlin.String origin=null
GET_VAR 'val y: @[FlexibleNullability] kotlin.String? [val] declared in <root>.test2' type=@[FlexibleNullability] kotlin.String? origin=null
FUN name:test2Desugared visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:test2Desugared visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR name:tmp type:@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] VAR name:tmp type:@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val]
CALL 'public open fun notNullComponents (): @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? declared in <root>.J' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null CALL 'public open fun notNullComponents (): @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? declared in <root>.J' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
VAR name:x type:kotlin.String [val] VAR name:x type:kotlin.String [val]
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_VAR 'val tmp: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in <root>.test2Desugared' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null $this: GET_VAR 'val tmp: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in <root>.test2Desugared' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
VAR name:y type:@[FlexibleNullability] kotlin.String? [val] VAR name:y type:kotlin.String [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[FlexibleNullability] kotlin.String? origin=null TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
$this: GET_VAR 'val tmp: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in <root>.test2Desugared' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_VAR 'val tmp: @[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in <root>.test2Desugared' type=@[FlexibleNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
x: GET_VAR 'val x: kotlin.String [val] declared in <root>.test2Desugared' type=kotlin.String origin=null x: GET_VAR 'val x: kotlin.String [val] declared in <root>.test2Desugared' type=kotlin.String origin=null
y: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String y: GET_VAR 'val y: kotlin.String [val] declared in <root>.test2Desugared' type=kotlin.String origin=null
GET_VAR 'val y: @[FlexibleNullability] kotlin.String? [val] declared in <root>.test2Desugared' type=@[FlexibleNullability] kotlin.String? origin=null
FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> [val] VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val]
TYPE_OP type=<root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> TYPE_OP type=<root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>
CALL 'public open fun notNullQAndComponents (): @[EnhancedNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> declared in <root>.J' type=@[EnhancedNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=null CALL 'public open fun notNullQAndComponents (): @[EnhancedNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> declared in <root>.J' type=@[EnhancedNullability] <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null
VAR name:x type:kotlin.String [val] VAR name:x type:kotlin.String [val]
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_VAR 'val tmp_2: <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> [val] declared in <root>.test3' type=<root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=null $this: GET_VAR 'val tmp_2: <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val] declared in <root>.test3' type=<root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null
VAR name:y type:@[FlexibleNullability] kotlin.String? [val] VAR name:y type:kotlin.String [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[FlexibleNullability] kotlin.String? origin=null TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
$this: GET_VAR 'val tmp_2: <root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> [val] declared in <root>.test3' type=<root>.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=null CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_VAR 'val tmp_2: <root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val] declared in <root>.test3' type=<root>.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
x: GET_VAR 'val x: kotlin.String [val] declared in <root>.test3' type=kotlin.String origin=null x: GET_VAR 'val x: kotlin.String [val] declared in <root>.test3' type=kotlin.String origin=null
y: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String y: GET_VAR 'val y: kotlin.String [val] declared in <root>.test3' type=kotlin.String origin=null
GET_VAR 'val y: @[FlexibleNullability] kotlin.String? [val] declared in <root>.test3' type=@[FlexibleNullability] kotlin.String? origin=null
FUN name:test4 visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:test4 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> [val] VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> [val]
CALL 'public final fun first <T> (): T of kotlin.collections.CollectionsKt.first declared in kotlin.collections.CollectionsKt' type=kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> origin=null CALL 'public final fun first <T> (): T of kotlin.collections.CollectionsKt.first declared in kotlin.collections.CollectionsKt' type=kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> origin=null
<T>: kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> <T>: kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P>
$receiver: CALL 'public final fun withIndex <T> (): kotlin.collections.Iterable<kotlin.collections.IndexedValue<T of kotlin.collections.CollectionsKt.withIndex>> declared in kotlin.collections.CollectionsKt' type=kotlin.collections.Iterable<kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?>> origin=null $receiver: CALL 'public final fun withIndex <T> (): kotlin.collections.Iterable<kotlin.collections.IndexedValue<T of kotlin.collections.CollectionsKt.withIndex>> declared in kotlin.collections.CollectionsKt' type=kotlin.collections.Iterable<kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P>> origin=null
<T>: @[FlexibleNullability] <root>.P? <T>: @[EnhancedNullability] <root>.P
$receiver: TYPE_OP type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?> $receiver: TYPE_OP type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>
CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? origin=null CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
VAR name:x type:kotlin.Int [val] VAR name:x type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int [operator] declared in kotlin.collections.IndexedValue' type=kotlin.Int origin=null CALL 'public final fun component1 (): kotlin.Int [operator] declared in kotlin.collections.IndexedValue' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> origin=null
VAR name:y type:@[FlexibleNullability] <root>.P? [val] VAR name:y type:<root>.P [val]
CALL 'public final fun component2 (): T of kotlin.collections.IndexedValue [operator] declared in kotlin.collections.IndexedValue' type=@[FlexibleNullability] <root>.P? origin=null TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[FlexibleNullability] <root>.P?> origin=null CALL 'public final fun component2 (): T of kotlin.collections.IndexedValue [operator] declared in kotlin.collections.IndexedValue' type=@[EnhancedNullability] <root>.P origin=null
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[EnhancedNullability] <root>.P> origin=null
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
x: GET_VAR 'val x: kotlin.Int [val] declared in <root>.test4' type=kotlin.Int origin=null x: GET_VAR 'val x: kotlin.Int [val] declared in <root>.test4' type=kotlin.Int origin=null
y: TYPE_OP type=@[FlexibleNullability] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] <root>.P y: GET_VAR 'val y: <root>.P [val] declared in <root>.test4' type=<root>.P origin=null
GET_VAR 'val y: @[FlexibleNullability] <root>.P? [val] declared in <root>.test4' type=@[FlexibleNullability] <root>.P? origin=null
@@ -3,18 +3,18 @@ fun use(s: P) {
fun testForInListUnused() { fun testForInListUnused() {
{ // BLOCK { // BLOCK
val <iterator>: MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() val <iterator>: MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator()
while (<iterator>.hasNext()) { // BLOCK while (<iterator>.hasNext()) { // BLOCK
val x: @FlexibleNullability P? = <iterator>.next() val x: P = <iterator>.next() /*!! P */
} }
} }
} }
fun testForInListDestructured() { fun testForInListDestructured() {
{ // BLOCK { // BLOCK
val <iterator>: MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() val <iterator>: MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator()
while (<iterator>.hasNext()) { // BLOCK while (<iterator>.hasNext()) { // BLOCK
val <destruct>: @FlexibleNullability P? = <iterator>.next() val <destruct>: P = <iterator>.next() /*!! P */
{ // BLOCK { // BLOCK
val x: Int = <destruct>.component1() val x: Int = <destruct>.component1()
val y: Int = <destruct>.component2() val y: Int = <destruct>.component2()
@@ -24,9 +24,9 @@ fun testForInListDestructured() {
} }
fun testDesugaredForInList() { fun testDesugaredForInList() {
val iterator: MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() val iterator: MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator()
while (iterator.hasNext()) { // BLOCK while (iterator.hasNext()) { // BLOCK
val x: @FlexibleNullability P? = iterator.next() val x: P = iterator.next() /*!! P */
} }
} }
@@ -41,11 +41,11 @@ fun testForInArrayUnused(j: J) {
fun testForInListUse() { fun testForInListUse() {
{ // BLOCK { // BLOCK
val <iterator>: MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() val <iterator>: MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator()
while (<iterator>.hasNext()) { // BLOCK while (<iterator>.hasNext()) { // BLOCK
val x: @FlexibleNullability P? = <iterator>.next() val x: P = <iterator>.next() /*!! P */
{ // BLOCK { // BLOCK
use(s = x /*!! @FlexibleNullability P */) use(s = x)
use(s = x) use(s = x)
} }
} }
@@ -66,7 +66,7 @@ fun testForInArrayUse(j: J) {
} }
interface K { interface K {
abstract fun arrayOfNotNull(): Array<P> abstract fun arrayOfNotNull(): Array<P>
} }
@@ -5,48 +5,51 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
FUN name:testForInListUnused visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testForInListUnused visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
BLOCK type=kotlin.Unit origin=FOR_LOOP BLOCK type=kotlin.Unit origin=FOR_LOOP
VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=FOR_LOOP_ITERATOR CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? origin=null $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:x type:@[FlexibleNullability] <root>.P? [val] VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] <root>.P? origin=FOR_LOOP_NEXT TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] <root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
FUN name:testForInListDestructured visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testForInListDestructured visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
BLOCK type=kotlin.Unit origin=FOR_LOOP BLOCK type=kotlin.Unit origin=FOR_LOOP
VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=FOR_LOOP_ITERATOR CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? origin=null $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:<destruct> type:@[FlexibleNullability] <root>.P? [val] VAR FOR_LOOP_VARIABLE name:<destruct> type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] <root>.P? origin=FOR_LOOP_NEXT TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] <root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
BLOCK type=kotlin.Unit origin=null BLOCK type=kotlin.Unit origin=null
VAR name:x type:kotlin.Int [val] VAR name:x type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=null CALL 'public final fun component1 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=null
$this: GET_VAR 'val <destruct>: @[FlexibleNullability] <root>.P? [val] declared in <root>.testForInListDestructured' type=@[FlexibleNullability] <root>.P? origin=null $this: GET_VAR 'val <destruct>: <root>.P [val] declared in <root>.testForInListDestructured' type=<root>.P origin=null
VAR name:y type:kotlin.Int [val] VAR name:y type:kotlin.Int [val]
CALL 'public final fun component2 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=null CALL 'public final fun component2 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=null
$this: GET_VAR 'val <destruct>: @[FlexibleNullability] <root>.P? [val] declared in <root>.testForInListDestructured' type=@[FlexibleNullability] <root>.P? origin=null $this: GET_VAR 'val <destruct>: <root>.P [val] declared in <root>.testForInListDestructured' type=<root>.P origin=null
FUN name:testDesugaredForInList visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testDesugaredForInList visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR name:iterator type:kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] VAR name:iterator type:kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? origin=null $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=null
VAR name:x type:@[FlexibleNullability] <root>.P? [val] VAR name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] <root>.P? origin=null TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] <root>.P origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
FUN name:testForInArrayUnused visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit FUN name:testForInArrayUnused visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J VALUE_PARAMETER name:j index:0 type:<root>.J
BLOCK_BODY BLOCK_BODY
@@ -65,22 +68,22 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
FUN name:testForInListUse visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testForInListUse visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
BLOCK type=kotlin.Unit origin=FOR_LOOP BLOCK type=kotlin.Unit origin=FOR_LOOP
VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=FOR_LOOP_ITERATOR CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<E of kotlin.collections.MutableList> [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=FOR_LOOP_ITERATOR
$this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] <root>.P?>? origin=null $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? declared in <root>.J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] <root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:x type:@[FlexibleNullability] <root>.P? [val] VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] <root>.P? origin=FOR_LOOP_NEXT TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
$this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[FlexibleNullability] <root>.P?> origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] <root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[EnhancedNullability] <root>.P> origin=null
BLOCK type=kotlin.Unit origin=null BLOCK type=kotlin.Unit origin=null
CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
s: TYPE_OP type=@[FlexibleNullability] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] <root>.P s: GET_VAR 'val x: <root>.P [val] declared in <root>.testForInListUse' type=<root>.P origin=null
GET_VAR 'val x: @[FlexibleNullability] <root>.P? [val] declared in <root>.testForInListUse' type=@[FlexibleNullability] <root>.P? origin=null
CALL 'public open fun use (s: @[EnhancedNullability] <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null CALL 'public open fun use (s: @[EnhancedNullability] <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: @[FlexibleNullability] <root>.P? [val] declared in <root>.testForInListUse' type=@[FlexibleNullability] <root>.P? origin=null s: GET_VAR 'val x: <root>.P [val] declared in <root>.testForInListUse' type=<root>.P origin=null
FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J VALUE_PARAMETER name:j index:0 type:<root>.J
BLOCK_BODY BLOCK_BODY