From 8e122397b02fbbd26f0ee7742607619e06249c0b Mon Sep 17 00:00:00 2001 From: pyos Date: Mon, 2 Aug 2021 11:53:11 +0200 Subject: [PATCH] FIR: fix type index computation during enhancement 1. in/out type parameters count; 2. star projections take up 1 space in the tree. --- .../testData/resolve/kt41984.fir.txt | 2 +- .../testData/resolve/kt41984.kt | 4 +- .../resolveWithStdlib/j+k/MyIterable.fir.txt | 2 +- .../j+k/typeParameterUse.fir.txt | 2 +- .../enhancement/EnhancementSignatureParts.kt | 36 ++++---- .../fir/java/enhancement/javaTypeUtils.kt | 89 ++++++------------- ...javaCollectionOfExplicitNotNullFailFast.kt | 1 - ...CollectionOfNotNullToTypedArrayFailFast.kt | 1 - .../javaIteratorOfNotNullFailFast.kt | 1 - ...ctionOfExplicitNotNullWithIndexFailFast.kt | 1 - .../javaIteratorOfNotNullWithIndexFailFast.kt | 1 - .../TypeArgumentsFromParameterBounds.fir.kt | 3 +- .../jspecify/strictMode/kt47422.fir.kt | 3 +- .../jspecify/strictMode/kt47437.fir.kt | 2 +- .../TypeArgumentsFromParameterBounds.fir.kt | 2 +- .../java8Tests/jsr305/typeArguments.fir.kt | 2 +- .../java8Tests/misc/returnType.fir.kt | 16 ++-- .../misc/returnTypeOverrideInKotlin.fir.kt | 31 ------- .../misc/returnTypeOverrideInKotlin.kt | 1 + .../misc/returnTypeWithWarnings.fir.kt | 16 ++-- .../java8Tests/misc/valueParameter.fir.kt | 8 +- .../misc/valueParameterWithWarnings.fir.kt | 8 +- ...NullTypeParameterWithKotlinNullable.fir.kt | 2 +- ...ParameterWithKotlinNullableWarnings.fir.kt | 2 +- .../firProblems/ImplicitReceiverStack.fir.txt | 8 +- .../ir/irText/firProblems/MultiList.fir.txt | 24 ++--- ...bilityInDestructuringAssignment.fir.kt.txt | 24 ++--- ...llabilityInDestructuringAssignment.fir.txt | 76 ++++++++-------- .../enhancedNullabilityInForLoop.fir.kt.txt | 20 ++--- .../enhancedNullabilityInForLoop.fir.txt | 69 +++++++------- 30 files changed, 194 insertions(+), 263 deletions(-) delete mode 100644 compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.fir.kt diff --git a/compiler/fir/analysis-tests/testData/resolve/kt41984.fir.txt b/compiler/fir/analysis-tests/testData/resolve/kt41984.fir.txt index fb68bb84095..c54371e292c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/kt41984.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/kt41984.fir.txt @@ -22,5 +22,5 @@ FILE: main.kt public final fun test_1(b: R|B|, x: R|kotlin/Int|, inv: R|Inv|): R|kotlin/Unit| { R|/b|.#(R|/x|) R|/b|.#(Null(null)) - R|/b|.R|SubstitutionOverride|(R|/inv|) + R|/b|.#(R|/inv|) } diff --git a/compiler/fir/analysis-tests/testData/resolve/kt41984.kt b/compiler/fir/analysis-tests/testData/resolve/kt41984.kt index ba80ec9f6ed..0f5e9a66823 100644 --- a/compiler/fir/analysis-tests/testData/resolve/kt41984.kt +++ b/compiler/fir/analysis-tests/testData/resolve/kt41984.kt @@ -21,11 +21,11 @@ open class B : A() { return "" } - override fun takeInv(value: Inv): String = "" + override fun takeInv(value: Inv): String = "" } fun test_1(b: B, x: Int, inv: Inv) { b.take(x) b.take(null) - b.takeInv(inv) + b.takeInv(inv) } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/MyIterable.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/MyIterable.fir.txt index 2f5e2333996..93555044d8f 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/MyIterable.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/MyIterable.fir.txt @@ -8,5 +8,5 @@ FILE: test.kt } public final fun test(some: R|kotlin/collections/Iterable|): R|kotlin/Unit| { lval it: R|kotlin/collections/Iterator| = R|/some|.R|SubstitutionOverride|>|() - lval split: R|java/util/Spliterator>| = R|/some|.R|SubstitutionOverride>|>|() + lval split: R|java/util/Spliterator| = R|/some|.R|SubstitutionOverride|>|() } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/typeParameterUse.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/typeParameterUse.fir.txt index 95513e37c10..e4f74861b68 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/typeParameterUse.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/typeParameterUse.fir.txt @@ -1,4 +1,4 @@ FILE: useSite.kt public final fun foo(holder: R|U|, box: R|Box|): R|kotlin/Int| { - ^foo R|/holder|.R|/U.getValue||>(R|/box|) + ^foo R|/holder|.R|/U.getValue|(R|/box|) } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt index 898b4963a5e..9e5bd544fde 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/EnhancementSignatureParts.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.fir.java.toConeKotlinTypeWithoutEnhancement import org.jetbrains.kotlin.fir.java.toFirJavaTypeRef import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag 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.load.java.AnnotationQualifierApplicabilityType import org.jetbrains.kotlin.load.java.JavaDefaultQualifiers @@ -94,32 +95,27 @@ internal class EnhancementSignatureParts( val list = ArrayList(1) fun add(type: FirTypeRef?) { + // TODO: should use the context from parent type val c = context.copyWithNewDefaultTypeQualifiers(typeQualifierResolver, type?.annotations.orEmpty()) + list.add(TypeAndDefaultQualifiers(type, c.defaultTypeQualifiers?.get(AnnotationQualifierApplicabilityType.TYPE_USE))) - list.add( - TypeAndDefaultQualifiers( - type, - c.defaultTypeQualifiers - ?.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)) + when (type) { + is FirJavaTypeRef -> { + for (arg in type.type.typeArguments()) { + add(arg.takeIf { it !is JavaWildcardType }?.toFirJavaTypeRef(context.session, javaTypeParameterStack)) } } - } else if (type != null) { - for (arg in type.typeArguments()) { - if (arg is FirStarProjection) { - add(null) - } else if (arg is FirTypeProjectionWithVariance) { - add(arg.typeRef) + is FirUserTypeRef -> { + for (arg in type.qualifier.lastOrNull()?.typeArgumentList?.typeArguments.orEmpty()) { + add((arg as? FirTypeProjectionWithVariance)?.typeRef) } } + is FirResolvedTypeRef -> { + for (arg in type.type.typeArguments) { + add(arg.type?.let { buildResolvedTypeRef { this.type = it } }) + } + } + else -> Unit } } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt index a86517de507..556c71f1cf4 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/javaTypeUtils.kt @@ -28,8 +28,6 @@ import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.typeContext import org.jetbrains.kotlin.fir.types.* 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.load.java.* 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.types.AbstractStrictEqualityTypeChecker import org.jetbrains.kotlin.types.ConstantValueKind -import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.utils.extractRadix internal class IndexedJavaTypeQualifiers(private val data: Array) { @@ -55,42 +52,43 @@ internal fun FirJavaTypeRef.enhance( session: FirSession, qualifiers: IndexedJavaTypeQualifiers, typeWithoutEnhancement: ConeKotlinType, -): FirResolvedTypeRef { - return typeWithoutEnhancement.enhancePossiblyFlexible(session, annotations, qualifiers, 0) -} - -// The index in the lambda is the position of the type component: -// Example: for `A>`, indices go as follows: `0 - A<...>, 1 - B, 2 - C, 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..C)` gives `0 - (A..C), 1 - B and D`. -private fun ConeKotlinType.enhancePossiblyFlexible( - session: FirSession, - annotations: List, - qualifiers: IndexedJavaTypeQualifiers, - index: Int -): FirResolvedTypeRef { - val enhanced = enhanceConeKotlinType(session, qualifiers, index) - - return buildResolvedTypeRef { - this.type = enhanced - this.annotations += annotations +): FirResolvedTypeRef = + buildResolvedTypeRef { + val subtreeSizes = mutableListOf().apply { typeWithoutEnhancement.computeSubtreeSizes(this) } + type = typeWithoutEnhancement.enhanceConeKotlinType(session, qualifiers, 0, subtreeSizes) + annotations += this@enhance.annotations } + +// The index in the lambda is the position of the type component in a depth-first walk of the tree. +// Example: A, E> - 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..C) -> (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, indicating that E is at 1 + 3 = 4. +private fun ConeKotlinType.computeSubtreeSizes(result: MutableList): 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( session: FirSession, qualifiers: IndexedJavaTypeQualifiers, - index: Int + index: Int, + subtreeSizes: List ): ConeKotlinType { return when (this) { is ConeFlexibleType -> { val isRawType = this is ConeRawType val lowerResult = lowerBound.enhanceInflexibleType( - session, TypeComponentPosition.FLEXIBLE_LOWER, qualifiers, index, isRawType + session, TypeComponentPosition.FLEXIBLE_LOWER, qualifiers, index, subtreeSizes, isRawType ) val upperResult = upperBound.enhanceInflexibleType( - session, TypeComponentPosition.FLEXIBLE_UPPER, qualifiers, index, isRawType + session, TypeComponentPosition.FLEXIBLE_UPPER, qualifiers, index, subtreeSizes, isRawType ) when { @@ -102,16 +100,12 @@ private fun ConeKotlinType.enhanceConeKotlinType( } } is ConeSimpleKotlinType -> enhanceInflexibleType( - session, TypeComponentPosition.INFLEXIBLE, qualifiers, index, isBoundOfRawType = false + session, TypeComponentPosition.INFLEXIBLE, qualifiers, index, subtreeSizes, isBoundOfRawType = false ) else -> this } } -private fun ConeKotlinType.subtreeSize(): Int { - return 1 + typeArguments.sumOf { ((it as? ConeKotlinType)?.subtreeSize() ?: 0) + 1 } -} - private fun coneFlexibleOrSimpleType( session: FirSession, lowerBound: ConeKotlinType, @@ -163,6 +157,7 @@ private fun ConeKotlinType.enhanceInflexibleType( position: TypeComponentPosition, qualifiers: IndexedJavaTypeQualifiers, index: Int, + subtreeSizes: List, @Suppress("UNUSED_PARAMETER") isBoundOfRawType: Boolean, ): ConeKotlinType { require(this !is ConeFlexibleType) { "$this should not be flexible" } @@ -185,9 +180,8 @@ private fun ConeKotlinType.enhanceInflexibleType( arg } else { require(arg is ConeKotlinType) { "Should be invariant type: $arg" } - globalArgIndex += arg.subtreeSize() - - val enhanced = arg.enhanceConeKotlinType(session, qualifiers, globalArgIndex) + val enhanced = arg.enhanceConeKotlinType(session, qualifiers, globalArgIndex, subtreeSizes) + globalArgIndex += subtreeSizes[globalArgIndex] wereChangesInArgs = wereChangesInArgs || enhanced !== arg enhanced.type } @@ -261,35 +255,6 @@ internal data class TypeAndDefaultQualifiers( val defaultQualifiers: JavaDefaultQualifiers? ) -internal fun FirTypeRef.typeArguments(): List = 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 = (this as? JavaClassifierType)?.typeArguments.orEmpty() internal fun ConeKotlinType.lexicalCastFrom(session: FirSession, value: String): FirExpression? { diff --git a/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfExplicitNotNullFailFast.kt b/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfExplicitNotNullFailFast.kt index 4ee8d6b25bc..99fb4ae5ba4 100644 --- a/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfExplicitNotNullFailFast.kt +++ b/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfExplicitNotNullFailFast.kt @@ -1,7 +1,6 @@ // !LANGUAGE: +StrictJavaNullabilityAssertions // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM, JVM_IR -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfNotNullToTypedArrayFailFast.kt b/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfNotNullToTypedArrayFailFast.kt index 930853557c8..7f199a744bc 100644 --- a/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfNotNullToTypedArrayFailFast.kt +++ b/compiler/testData/codegen/box/ranges/javaInterop/javaCollectionOfNotNullToTypedArrayFailFast.kt @@ -1,6 +1,5 @@ // !LANGUAGE: +StrictJavaNullabilityAssertions // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR // IGNORE_BACKEND: JVM, JVM_IR // WITH_RUNTIME // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/ranges/javaInterop/javaIteratorOfNotNullFailFast.kt b/compiler/testData/codegen/box/ranges/javaInterop/javaIteratorOfNotNullFailFast.kt index 7002ecb1953..a5b9a442cce 100644 --- a/compiler/testData/codegen/box/ranges/javaInterop/javaIteratorOfNotNullFailFast.kt +++ b/compiler/testData/codegen/box/ranges/javaInterop/javaIteratorOfNotNullFailFast.kt @@ -1,7 +1,6 @@ // !LANGUAGE: +StrictJavaNullabilityAssertions // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM, JVM_IR -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaCollectionOfExplicitNotNullWithIndexFailFast.kt b/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaCollectionOfExplicitNotNullWithIndexFailFast.kt index c2c80b32eb3..d4f1a82b3b7 100644 --- a/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaCollectionOfExplicitNotNullWithIndexFailFast.kt +++ b/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaCollectionOfExplicitNotNullWithIndexFailFast.kt @@ -1,7 +1,6 @@ // !LANGUAGE: +StrictJavaNullabilityAssertions // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM, JVM_IR -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaIteratorOfNotNullWithIndexFailFast.kt b/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaIteratorOfNotNullWithIndexFailFast.kt index 85de0b55bb2..260605885e6 100644 --- a/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaIteratorOfNotNullWithIndexFailFast.kt +++ b/compiler/testData/codegen/box/ranges/javaInterop/withIndex/javaIteratorOfNotNullWithIndexFailFast.kt @@ -1,7 +1,6 @@ // !LANGUAGE: +StrictJavaNullabilityAssertions // TARGET_BACKEND: JVM // IGNORE_BACKEND: JVM, JVM_IR -// IGNORE_BACKEND_FIR: JVM_IR // WITH_RUNTIME // JVM_TARGET: 1.8 diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/TypeArgumentsFromParameterBounds.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/TypeArgumentsFromParameterBounds.fir.kt index 7183ce03b0b..9a8a975a0fc 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/TypeArgumentsFromParameterBounds.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/TypeArgumentsFromParameterBounds.fir.kt @@ -35,7 +35,8 @@ fun main( a: A, b: B ): Unit { a.bar(aNotNullNotNullNotNull) - a.bar(aNotNullNotNullNull) + // jspecify_nullness_mismatch + a.bar(aNotNullNotNullNull) // jspecify_nullness_mismatch a.bar(aNotNullNullNotNull) // jspecify_nullness_mismatch diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47422.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47422.fir.kt index a59267ef2c9..ff90cc8b4d9 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47422.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47422.fir.kt @@ -90,7 +90,8 @@ fun test2() { // String in Foo is not null isNotNullAndNullableStringInFoo( UtilNullMarked.getFooOfString(), - UtilNullMarked.getFooOfString() + // jspecify_nullness_mismatch + UtilNullMarked.getFooOfString() ) } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47437.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47437.fir.kt index 9a9231a4cdb..f17605c72dc 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47437.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/strictMode/kt47437.fir.kt @@ -14,5 +14,5 @@ public class Foo { // FILE: main.kt fun test(): Foo { - return ")!>Foo.create() + return ")!>Foo.create() } diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/warnMode/TypeArgumentsFromParameterBounds.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/warnMode/TypeArgumentsFromParameterBounds.fir.kt index 0bebf2da605..3b635f34474 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/warnMode/TypeArgumentsFromParameterBounds.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/warnMode/TypeArgumentsFromParameterBounds.fir.kt @@ -34,7 +34,7 @@ fun main( a: A, b: B ): Unit { a.bar(aNotNullNotNullNotNull) - a.bar(aNotNullNotNullNull) + a.bar(aNotNullNotNullNull) a.bar(aNotNullNullNotNull) a.bar(aNotNullNullNull) diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jsr305/typeArguments.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jsr305/typeArguments.fir.kt index f62756e4074..3e4462f4cba 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jsr305/typeArguments.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jsr305/typeArguments.fir.kt @@ -77,7 +77,7 @@ import test.L fun main(a: test.A, l: L, Int?>, l1: L, Int>) { a.foo(l) - a.foo(l as L, Int>) + a.foo(l as L, Int>) a.foo(l as L, Int?>) a.bar(l1) diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnType.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnType.fir.kt index b5309bc9765..8986251c580 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnType.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnType.fir.kt @@ -32,23 +32,23 @@ fun takeArrayOfNotNullK(x: Array) {} fun takeArrayOfNullableK(x: Array) {} fun main(a: ReturnType) { - val x1 = ..ReturnType.A?!")!>a.foo1() + val x1 = ..ReturnType.A?!")!>a.foo1() takeNotNullStringAndKNullable(x1) takeNullableStringAndKNullable(x1) takeNotNullStringAndNotNullK(x1) takeNullableStringAndNotNullK(x1) - takeNotNullString(a.foo41.foo411) + takeNotNullString(a.foo41.foo411) - val x2 = ..ReturnType.A?!")!>a.foo2() - takeNotNullStringAndKNullable(x2) + val x2 = ..ReturnType.A?!")!>a.foo2() + takeNotNullStringAndKNullable(x2) takeNullableStringAndKNullable(x2) takeNotNullStringAndNotNullK(x2) - takeNullableStringAndNotNullK(x2) + takeNullableStringAndNotNullK(x2) - val x3 = ..ReturnType.A?!")!>a.foo3 - takeNotNullStringAndKNullable(x3) + val x3 = ..ReturnType.A?!")!>a.foo3 + takeNotNullStringAndKNullable(x3) takeNullableStringAndKNullable(x3) - takeNotNullStringAndNotNullK(x3) + takeNotNullStringAndNotNullK(x3) takeNullableStringAndNotNullK(x3) val x4 = ..kotlin.Array")!>a.foo4 diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.fir.kt deleted file mode 100644 index ce1c708d98f..00000000000 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.fir.kt +++ /dev/null @@ -1,31 +0,0 @@ -// SOURCE_RETENTION_ANNOTATIONS -// FILE: Base.java -public interface Base {} -// FILE: A.java -import org.checkerframework.checker.nullness.qual.*; - -public class A { - @Nullable Base<@NonNull String> foo() { return null; } -} - -// FILE: a.kt -interface Derived : Base {} - -fun bar1(): Derived = null!! -fun bar2(): Derived = null!! - -class B : A() { - override fun foo(): Base { return bar1(); } -} - -class C1 : A() { - override fun foo(): Derived { return bar1(); } -} - -class C2 : A() { - override fun foo(): Derived? { return bar1(); } -} - -class C3 : A() { - override fun foo(): Derived { return bar2(); } -} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.kt index 7c0c378dcc3..ef887c58864 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeOverrideInKotlin.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // SOURCE_RETENTION_ANNOTATIONS // FILE: Base.java public interface Base {} diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeWithWarnings.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeWithWarnings.fir.kt index 30beebed8b7..44dc2a88ff1 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeWithWarnings.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/returnTypeWithWarnings.fir.kt @@ -34,23 +34,23 @@ fun takeArrayOfNotNullK(x: Array) {} fun takeArrayOfNullableK(x: Array) {} fun main(a: ReturnTypeWithWarnings) { - val x1 = ..ReturnTypeWithWarnings.A?!")!>a.foo1() + val x1 = ..ReturnTypeWithWarnings.A?!")!>a.foo1() takeNotNullStringAndKNullable(x1) takeNullableStringAndKNullable(x1) takeNotNullStringAndNotNullK(x1) takeNullableStringAndNotNullK(x1) - takeNotNullString(a.foo41.foo411) + takeNotNullString(a.foo41.foo411) - val x2 = ..ReturnTypeWithWarnings.A?!")!>a.foo2() - takeNotNullStringAndKNullable(x2) + val x2 = ..ReturnTypeWithWarnings.A?!")!>a.foo2() + takeNotNullStringAndKNullable(x2) takeNullableStringAndKNullable(x2) takeNotNullStringAndNotNullK(x2) - takeNullableStringAndNotNullK(x2) + takeNullableStringAndNotNullK(x2) - val x3 = ..ReturnTypeWithWarnings.A?!")!>a.foo3 - takeNotNullStringAndKNullable(x3) + val x3 = ..ReturnTypeWithWarnings.A?!")!>a.foo3 + takeNotNullStringAndKNullable(x3) takeNullableStringAndKNullable(x3) - takeNotNullStringAndNotNullK(x3) + takeNotNullStringAndNotNullK(x3) takeNullableStringAndNotNullK(x3) val x4 = ..kotlin.Array")!>a.foo4 diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameter.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameter.fir.kt index 9f053cefa67..8ac2f1f072a 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameter.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameter.fir.kt @@ -37,14 +37,14 @@ fun main(a: ValueParameter) { a.foo1(getNotNullStringAndNotNullK()) a.foo1(getNullableStringAndNotNullK()) - a.foo2(getNotNullStringAndKNullable()) + a.foo2(getNotNullStringAndKNullable()) a.foo2(getNullableStringAndKNullable()) a.foo2(getNotNullStringAndNotNullK()) - a.foo2(getNullableStringAndNotNullK()) + a.foo2(getNullableStringAndNotNullK()) - a.foo3(getNotNullStringAndKNullable()) + a.foo3(getNotNullStringAndKNullable()) a.foo3(getNullableStringAndKNullable()) - a.foo3(getNotNullStringAndNotNullK()) + a.foo3(getNotNullStringAndNotNullK()) a.foo3(getNullableStringAndNotNullK()) a.foo4(getArrayOfNotNullString()) diff --git a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameterWithWarnings.fir.kt b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameterWithWarnings.fir.kt index 3f1d54ad521..acd64342226 100644 --- a/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameterWithWarnings.fir.kt +++ b/compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/misc/valueParameterWithWarnings.fir.kt @@ -39,14 +39,14 @@ fun main(a: ValueParameterWithWarnings) { a.foo1(getNotNullStringAndNotNullK()) a.foo1(getNullableStringAndNotNullK()) - a.foo2(getNotNullStringAndKNullable()) + a.foo2(getNotNullStringAndKNullable()) a.foo2(getNullableStringAndKNullable()) a.foo2(getNotNullStringAndNotNullK()) - a.foo2(getNullableStringAndNotNullK()) + a.foo2(getNullableStringAndNotNullK()) - a.foo3(getNotNullStringAndKNullable()) + a.foo3(getNotNullStringAndKNullable()) a.foo3(getNullableStringAndKNullable()) - a.foo3(getNotNullStringAndNotNullK()) + a.foo3(getNotNullStringAndNotNullK()) a.foo3(getNullableStringAndNotNullK()) a.foo4(getArrayOfNotNullString()) diff --git a/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullable.fir.kt b/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullable.fir.kt index 680e2244b3c..deed3dd92a9 100644 --- a/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullable.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullable.fir.kt @@ -19,7 +19,7 @@ public interface SLRUMap { fun SLRUMap.getOrPut(value: V, l: List) { takeV(value) - takeVList(l) + takeVList(l) takeE(value) takeEList(l) diff --git a/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullableWarnings.fir.kt b/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullableWarnings.fir.kt index 5d5d3c7b95c..4f437ea8c63 100644 --- a/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullableWarnings.fir.kt +++ b/compiler/testData/diagnostics/tests/j+k/types/notNullTypeParameterWithKotlinNullableWarnings.fir.kt @@ -19,7 +19,7 @@ public interface SLRUMap { fun SLRUMap.getOrPut(value: V, l: List) { takeV(value) - takeVList(l) + takeVList(l) takeE(value) takeEList(l) diff --git a/compiler/testData/ir/irText/firProblems/ImplicitReceiverStack.fir.txt b/compiler/testData/ir/irText/firProblems/ImplicitReceiverStack.fir.txt index fc3300a833a..f45856dcc96 100644 --- a/compiler/testData/ir/irText/firProblems/ImplicitReceiverStack.fir.txt +++ b/compiler/testData/ir/irText/firProblems/ImplicitReceiverStack.fir.txt @@ -116,9 +116,9 @@ FILE fqName: fileName:/ImplicitReceiverStack.kt public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer?): kotlin.Unit declared in kotlin.collections.Iterable $this: VALUE_PARAMETER name: type:kotlin.collections.Iterable VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer.ImplicitReceiverValue<*>?>? - FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] .ImplicitReceiverValue<*>?> [fake_override] + FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable) returnType:@[EnhancedNullability] java.util.Spliterator<.ImplicitReceiverValue<*>> [fake_override] 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 declared in kotlin.collections.Iterable $this: VALUE_PARAMETER name: type:kotlin.collections.Iterable FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: @@ -176,9 +176,9 @@ FILE fqName: fileName:/ImplicitReceiverStack.kt public open fun forEach (p0: @[FlexibleNullability] java.util.function.Consumer.ImplicitReceiverValue<*>?>?): kotlin.Unit [fake_override] declared in .ImplicitReceiverStack $this: VALUE_PARAMETER name: type:kotlin.collections.Iterable VALUE_PARAMETER name:p0 index:0 type:@[FlexibleNullability] java.util.function.Consumer.ImplicitReceiverValue<*>?>? - FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable) returnType:@[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] .ImplicitReceiverValue<*>?> [fake_override] + FUN FAKE_OVERRIDE name:spliterator visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable) returnType:@[EnhancedNullability] java.util.Spliterator<.ImplicitReceiverValue<*>> [fake_override] overridden: - public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] .ImplicitReceiverValue<*>?> [fake_override] declared in .ImplicitReceiverStack + public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<.ImplicitReceiverValue<*>> [fake_override] declared in .ImplicitReceiverStack $this: VALUE_PARAMETER name: type:kotlin.collections.Iterable FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: diff --git a/compiler/testData/ir/irText/firProblems/MultiList.fir.txt b/compiler/testData/ir/irText/firProblems/MultiList.fir.txt index 03e50d8d777..6fb9907f731 100644 --- a/compiler/testData/ir/irText/firProblems/MultiList.fir.txt +++ b/compiler/testData/ir/irText/firProblems/MultiList.fir.txt @@ -162,13 +162,13 @@ FILE fqName: fileName:/MultiList.kt overridden: 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: type:kotlin.collections.Collection - FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.MyList>?> [fake_override] + FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<.Some.MyList>> [fake_override] 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 [fake_override] declared in kotlin.collections.List $this: VALUE_PARAMETER name: type:kotlin.collections.Collection - FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.MyList>?> [fake_override] + FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<.Some.MyList>> [fake_override] 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 [fake_override] declared in kotlin.collections.List $this: VALUE_PARAMETER name: type:kotlin.collections.Collection FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:kotlin.collections.Iterable, p0:@[FlexibleNullability] java.util.function.Consumer.Some.MyList>?>?) returnType:kotlin.Unit [fake_override] overridden: @@ -257,13 +257,13 @@ FILE fqName: fileName:/MultiList.kt overridden: public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] E of java.util.ArrayList?> declared in java.util.ArrayList $this: VALUE_PARAMETER name: type:java.util.ArrayList - FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.SomeList>?> [fake_override] + FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<.Some.SomeList>> [fake_override] overridden: - public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.MyList>?> [fake_override] declared in .MyList + public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<.Some.MyList>> [fake_override] declared in .MyList $this: VALUE_PARAMETER name: type:kotlin.collections.Collection - FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.SomeList>?> [fake_override] + FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<.Some.SomeList>> [fake_override] overridden: - public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.MyList>?> [fake_override] declared in .MyList + public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<.Some.MyList>> [fake_override] declared in .MyList $this: VALUE_PARAMETER name: type:kotlin.collections.Collection FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList, p0:@[FlexibleNullability] java.util.function.Consumer.Some.SomeList>?>?) returnType:kotlin.Unit [fake_override] overridden: @@ -451,13 +451,13 @@ FILE fqName: fileName:/MultiList.kt overridden: public open fun spliterator (): @[EnhancedNullability] java.util.Spliterator<@[FlexibleNullability] .Some.SomeList>?> [fake_override] declared in .SomeList $this: VALUE_PARAMETER name: type:java.util.ArrayList - FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some?> [fake_override] + FUN FAKE_OVERRIDE name:parallelStream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<.Some> [fake_override] overridden: - public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.SomeList>?> [fake_override] declared in .SomeList + public open fun parallelStream (): @[EnhancedNullability] java.util.stream.Stream<.Some.SomeList>> [fake_override] declared in .SomeList $this: VALUE_PARAMETER name: type:kotlin.collections.Collection - FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some?> [fake_override] + FUN FAKE_OVERRIDE name:stream visibility:public modality:OPEN <> ($this:kotlin.collections.Collection) returnType:@[EnhancedNullability] java.util.stream.Stream<.Some> [fake_override] overridden: - public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<@[FlexibleNullability] .Some.SomeList>?> [fake_override] declared in .SomeList + public open fun stream (): @[EnhancedNullability] java.util.stream.Stream<.Some.SomeList>> [fake_override] declared in .SomeList $this: VALUE_PARAMETER name: type:kotlin.collections.Collection FUN FAKE_OVERRIDE name:forEach visibility:public modality:OPEN <> ($this:java.util.ArrayList, p0:@[FlexibleNullability] java.util.function.Consumer.Some?>?) returnType:kotlin.Unit [fake_override] overridden: diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.kt.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.kt.txt index 5e4ad76c2c5..dac1a70a37e 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.kt.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.kt.txt @@ -59,30 +59,30 @@ fun test1() { } fun test2() { - val : @FlexibleNullability Q<@EnhancedNullability String, @FlexibleNullability String?>? = notNullComponents() + val : @FlexibleNullability Q<@EnhancedNullability String, @EnhancedNullability String>? = notNullComponents() val x: String = .component1() /*!! String */ - val y: @FlexibleNullability String? = .component2() - use(x = x, y = y /*!! @FlexibleNullability String */) + val y: String = .component2() /*!! String */ + use(x = x, y = y) } 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 y: @FlexibleNullability String? = tmp.component2() - use(x = x, y = y /*!! @FlexibleNullability String */) + val y: String = tmp.component2() /*!! String */ + use(x = x, y = y) } fun test3() { - val : Q<@EnhancedNullability String, @FlexibleNullability String?> = notNullQAndComponents() /*!! Q<@EnhancedNullability String, @FlexibleNullability String?> */ + val : Q<@EnhancedNullability String, @EnhancedNullability String> = notNullQAndComponents() /*!! Q<@EnhancedNullability String, @EnhancedNullability String> */ val x: String = .component1() /*!! String */ - val y: @FlexibleNullability String? = .component2() - use(x = x, y = y /*!! @FlexibleNullability String */) + val y: String = .component2() /*!! String */ + use(x = x, y = y) } fun test4() { - val : IndexedValue<@FlexibleNullability P?> = listOfNotNull() /*!! @FlexibleNullability List<@FlexibleNullability P?> */.withIndex<@FlexibleNullability P?>().first>() + val : IndexedValue<@EnhancedNullability P> = listOfNotNull() /*!! @FlexibleNullability List<@EnhancedNullability P> */.withIndex<@EnhancedNullability P>().first>() val x: Int = .component1() - val y: @FlexibleNullability P? = .component2() - use(x = x, y = y /*!! @FlexibleNullability P */) + val y: P = .component2() /*!! P */ + use(x = x, y = y) } diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt index dc41af6cb97..b24bf638009 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt @@ -131,66 +131,66 @@ FILE fqName: fileName:/enhancedNullabilityInDestructuringAssignment.kt y: GET_VAR 'val y: kotlin.Int [val] declared in .test1' type=kotlin.Int origin=null FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY - VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] - CALL 'public open fun notNullComponents (): @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? declared in .J' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null + VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] + CALL 'public open fun notNullComponents (): @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? declared in .J' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null VAR name:x type:kotlin.String [val] TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String CALL 'public final fun component1 (): T1 of .Q [operator] declared in .Q' type=@[EnhancedNullability] kotlin.String origin=null - $this: GET_VAR 'val tmp_1: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in .test2' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null - VAR name:y type:@[FlexibleNullability] kotlin.String? [val] - CALL 'public final fun component2 (): T2 of .Q [operator] declared in .Q' type=@[FlexibleNullability] kotlin.String? origin=null - $this: GET_VAR 'val tmp_1: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in .test2' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null + $this: GET_VAR 'val tmp_1: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in .test2' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null + VAR name:y type:kotlin.String [val] + TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String + CALL 'public final fun component2 (): T2 of .Q [operator] declared in .Q' type=@[EnhancedNullability] kotlin.String origin=null + $this: GET_VAR 'val tmp_1: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in .test2' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in ' type=kotlin.Unit origin=null x: GET_VAR 'val x: kotlin.String [val] declared in .test2' type=kotlin.String origin=null - y: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String - GET_VAR 'val y: @[FlexibleNullability] kotlin.String? [val] declared in .test2' type=@[FlexibleNullability] kotlin.String? origin=null + y: GET_VAR 'val y: kotlin.String [val] declared in .test2' type=kotlin.String origin=null FUN name:test2Desugared visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY - VAR name:tmp type:@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] - CALL 'public open fun notNullComponents (): @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? declared in .J' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null + VAR name:tmp type:@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] + CALL 'public open fun notNullComponents (): @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? declared in .J' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null VAR name:x type:kotlin.String [val] TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String CALL 'public final fun component1 (): T1 of .Q [operator] declared in .Q' type=@[EnhancedNullability] kotlin.String origin=null - $this: GET_VAR 'val tmp: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in .test2Desugared' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null - VAR name:y type:@[FlexibleNullability] kotlin.String? [val] - CALL 'public final fun component2 (): T2 of .Q [operator] declared in .Q' type=@[FlexibleNullability] kotlin.String? origin=null - $this: GET_VAR 'val tmp: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? [val] declared in .test2Desugared' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?>? origin=null + $this: GET_VAR 'val tmp: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in .test2Desugared' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null + VAR name:y type:kotlin.String [val] + TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String + CALL 'public final fun component2 (): T2 of .Q [operator] declared in .Q' type=@[EnhancedNullability] kotlin.String origin=null + $this: GET_VAR 'val tmp: @[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? [val] declared in .test2Desugared' type=@[FlexibleNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String>? origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in ' type=kotlin.Unit origin=null x: GET_VAR 'val x: kotlin.String [val] declared in .test2Desugared' type=kotlin.String origin=null - y: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String - GET_VAR 'val y: @[FlexibleNullability] kotlin.String? [val] declared in .test2Desugared' type=@[FlexibleNullability] kotlin.String? origin=null + y: GET_VAR 'val y: kotlin.String [val] declared in .test2Desugared' type=kotlin.String origin=null FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY - VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> [val] - TYPE_OP type=.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> - CALL 'public open fun notNullQAndComponents (): @[EnhancedNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> declared in .J' type=@[EnhancedNullability] .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=null + VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val] + TYPE_OP type=.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> + CALL 'public open fun notNullQAndComponents (): @[EnhancedNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> declared in .J' type=@[EnhancedNullability] .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null VAR name:x type:kotlin.String [val] TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String CALL 'public final fun component1 (): T1 of .Q [operator] declared in .Q' type=@[EnhancedNullability] kotlin.String origin=null - $this: GET_VAR 'val tmp_2: .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> [val] declared in .test3' type=.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=null - VAR name:y type:@[FlexibleNullability] kotlin.String? [val] - CALL 'public final fun component2 (): T2 of .Q [operator] declared in .Q' type=@[FlexibleNullability] kotlin.String? origin=null - $this: GET_VAR 'val tmp_2: .Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> [val] declared in .test3' type=.Q<@[EnhancedNullability] kotlin.String, @[FlexibleNullability] kotlin.String?> origin=null + $this: GET_VAR 'val tmp_2: .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val] declared in .test3' type=.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null + VAR name:y type:kotlin.String [val] + TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String + CALL 'public final fun component2 (): T2 of .Q [operator] declared in .Q' type=@[EnhancedNullability] kotlin.String origin=null + $this: GET_VAR 'val tmp_2: .Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> [val] declared in .test3' type=.Q<@[EnhancedNullability] kotlin.String, @[EnhancedNullability] kotlin.String> origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in ' type=kotlin.Unit origin=null x: GET_VAR 'val x: kotlin.String [val] declared in .test3' type=kotlin.String origin=null - y: TYPE_OP type=@[FlexibleNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.String - GET_VAR 'val y: @[FlexibleNullability] kotlin.String? [val] declared in .test3' type=@[FlexibleNullability] kotlin.String? origin=null + y: GET_VAR 'val y: kotlin.String [val] declared in .test3' type=kotlin.String origin=null FUN name:test4 visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY - VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> [val] - CALL 'public final fun first (): T of kotlin.collections.CollectionsKt.first declared in kotlin.collections.CollectionsKt' type=kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> origin=null - : kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> - $receiver: CALL 'public final fun withIndex (): kotlin.collections.Iterable> declared in kotlin.collections.CollectionsKt' type=kotlin.collections.Iterable.P?>> origin=null - : @[FlexibleNullability] .P? - $receiver: TYPE_OP type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?> origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?> - CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? origin=null + VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[EnhancedNullability] .P> [val] + CALL 'public final fun first (): T of kotlin.collections.CollectionsKt.first declared in kotlin.collections.CollectionsKt' type=kotlin.collections.IndexedValue<@[EnhancedNullability] .P> origin=null + : kotlin.collections.IndexedValue<@[EnhancedNullability] .P> + $receiver: CALL 'public final fun withIndex (): kotlin.collections.Iterable> declared in kotlin.collections.CollectionsKt' type=kotlin.collections.Iterable.P>> origin=null + : @[EnhancedNullability] .P + $receiver: TYPE_OP type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P> origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P> + CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? origin=null 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 - $this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> [val] declared in .test4' type=kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> origin=null - VAR name:y type:@[FlexibleNullability] .P? [val] - CALL 'public final fun component2 (): T of kotlin.collections.IndexedValue [operator] declared in kotlin.collections.IndexedValue' type=@[FlexibleNullability] .P? origin=null - $this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> [val] declared in .test4' type=kotlin.collections.IndexedValue<@[FlexibleNullability] .P?> origin=null + $this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[EnhancedNullability] .P> [val] declared in .test4' type=kotlin.collections.IndexedValue<@[EnhancedNullability] .P> origin=null + VAR name:y type:.P [val] + TYPE_OP type=.P origin=IMPLICIT_NOTNULL typeOperand=.P + CALL 'public final fun component2 (): T of kotlin.collections.IndexedValue [operator] declared in kotlin.collections.IndexedValue' type=@[EnhancedNullability] .P origin=null + $this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[EnhancedNullability] .P> [val] declared in .test4' type=kotlin.collections.IndexedValue<@[EnhancedNullability] .P> origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in ' type=kotlin.Unit origin=null x: GET_VAR 'val x: kotlin.Int [val] declared in .test4' type=kotlin.Int origin=null - y: TYPE_OP type=@[FlexibleNullability] .P origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] .P - GET_VAR 'val y: @[FlexibleNullability] .P? [val] declared in .test4' type=@[FlexibleNullability] .P? origin=null + y: GET_VAR 'val y: .P [val] declared in .test4' type=.P origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.kt.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.kt.txt index 8ef78dace55..3305f0f3759 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.kt.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.kt.txt @@ -3,18 +3,18 @@ fun use(s: P) { fun testForInListUnused() { { // BLOCK - val : MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() + val : MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator() while (.hasNext()) { // BLOCK - val x: @FlexibleNullability P? = .next() + val x: P = .next() /*!! P */ } } } fun testForInListDestructured() { { // BLOCK - val : MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() + val : MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator() while (.hasNext()) { // BLOCK - val : @FlexibleNullability P? = .next() + val : P = .next() /*!! P */ { // BLOCK val x: Int = .component1() val y: Int = .component2() @@ -24,9 +24,9 @@ fun testForInListDestructured() { } fun testDesugaredForInList() { - val iterator: MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() + val iterator: MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator() 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() { { // BLOCK - val : MutableIterator<@FlexibleNullability P?> = listOfNotNull().iterator() + val : MutableIterator<@EnhancedNullability P> = listOfNotNull().iterator() while (.hasNext()) { // BLOCK - val x: @FlexibleNullability P? = .next() + val x: P = .next() /*!! P */ { // BLOCK - use(s = x /*!! @FlexibleNullability P */) + use(s = x) use(s = x) } } @@ -66,7 +66,7 @@ fun testForInArrayUse(j: J) { } interface K { - abstract fun arrayOfNotNull(): Array

+ abstract fun arrayOfNotNull(): Array

} diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt index bd7b8a609a1..e4a6ec8260e 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt @@ -5,48 +5,51 @@ FILE fqName: fileName:/enhancedNullabilityInForLoop.kt FUN name:testForInListUnused visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] - CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=FOR_LOOP_ITERATOR - $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? origin=null + VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] + CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=FOR_LOOP_ITERATOR + $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? origin=null 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 - $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testForInListUnused' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testForInListUnused' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE - VAR FOR_LOOP_VARIABLE name:x type:@[FlexibleNullability] .P? [val] - CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] .P? origin=FOR_LOOP_NEXT - $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testForInListUnused' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + VAR FOR_LOOP_VARIABLE name:x type:.P [val] + TYPE_OP type=.P origin=IMPLICIT_NOTNULL typeOperand=.P + CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] .P origin=FOR_LOOP_NEXT + $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testForInListUnused' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null FUN name:testForInListDestructured visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] - CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=FOR_LOOP_ITERATOR - $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? origin=null + VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] + CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=FOR_LOOP_ITERATOR + $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? origin=null 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 - $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testForInListDestructured' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testForInListDestructured' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE - VAR FOR_LOOP_VARIABLE name: type:@[FlexibleNullability] .P? [val] - CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] .P? origin=FOR_LOOP_NEXT - $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testForInListDestructured' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + VAR FOR_LOOP_VARIABLE name: type:.P [val] + TYPE_OP type=.P origin=IMPLICIT_NOTNULL typeOperand=.P + CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] .P origin=FOR_LOOP_NEXT + $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testForInListDestructured' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null BLOCK type=kotlin.Unit origin=null VAR name:x type:kotlin.Int [val] CALL 'public final fun component1 (): kotlin.Int [operator] declared in .P' type=kotlin.Int origin=null - $this: GET_VAR 'val : @[FlexibleNullability] .P? [val] declared in .testForInListDestructured' type=@[FlexibleNullability] .P? origin=null + $this: GET_VAR 'val : .P [val] declared in .testForInListDestructured' type=.P origin=null VAR name:y type:kotlin.Int [val] CALL 'public final fun component2 (): kotlin.Int [operator] declared in .P' type=kotlin.Int origin=null - $this: GET_VAR 'val : @[FlexibleNullability] .P? [val] declared in .testForInListDestructured' type=@[FlexibleNullability] .P? origin=null + $this: GET_VAR 'val : .P [val] declared in .testForInListDestructured' type=.P origin=null FUN name:testDesugaredForInList visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY - VAR name:iterator type:kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] - CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null - $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? origin=null + VAR name:iterator type:kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] + CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null + $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? origin=null 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 - $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testDesugaredForInList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testDesugaredForInList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null body: BLOCK type=kotlin.Unit origin=null - VAR name:x type:@[FlexibleNullability] .P? [val] - CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] .P? origin=null - $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testDesugaredForInList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + VAR name:x type:.P [val] + TYPE_OP type=.P origin=IMPLICIT_NOTNULL typeOperand=.P + CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] .P origin=null + $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testDesugaredForInList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null FUN name:testForInArrayUnused visibility:public modality:FINAL <> (j:.J) returnType:kotlin.Unit VALUE_PARAMETER name:j index:0 type:.J BLOCK_BODY @@ -65,22 +68,22 @@ FILE fqName: fileName:/enhancedNullabilityInForLoop.kt FUN name:testForInListUse visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] - CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=FOR_LOOP_ITERATOR - $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[FlexibleNullability] .P?>? origin=null + VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] + CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableList' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=FOR_LOOP_ITERATOR + $this: CALL 'public open fun listOfNotNull (): @[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? declared in .J' type=@[FlexibleNullability] kotlin.collections.List<@[EnhancedNullability] .P>? origin=null 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 - $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testForInListUse' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testForInListUse' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE - VAR FOR_LOOP_VARIABLE name:x type:@[FlexibleNullability] .P? [val] - CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[FlexibleNullability] .P? origin=FOR_LOOP_NEXT - $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> [val] declared in .testForInListUse' type=kotlin.collections.MutableIterator<@[FlexibleNullability] .P?> origin=null + VAR FOR_LOOP_VARIABLE name:x type:.P [val] + TYPE_OP type=.P origin=IMPLICIT_NOTNULL typeOperand=.P + CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[EnhancedNullability] .P origin=FOR_LOOP_NEXT + $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<@[EnhancedNullability] .P> [val] declared in .testForInListUse' type=kotlin.collections.MutableIterator<@[EnhancedNullability] .P> origin=null BLOCK type=kotlin.Unit origin=null CALL 'public final fun use (s: .P): kotlin.Unit declared in ' type=kotlin.Unit origin=null - s: TYPE_OP type=@[FlexibleNullability] .P origin=IMPLICIT_NOTNULL typeOperand=@[FlexibleNullability] .P - GET_VAR 'val x: @[FlexibleNullability] .P? [val] declared in .testForInListUse' type=@[FlexibleNullability] .P? origin=null + s: GET_VAR 'val x: .P [val] declared in .testForInListUse' type=.P origin=null CALL 'public open fun use (s: @[EnhancedNullability] .P): kotlin.Unit declared in .J' type=kotlin.Unit origin=null - s: GET_VAR 'val x: @[FlexibleNullability] .P? [val] declared in .testForInListUse' type=@[FlexibleNullability] .P? origin=null + s: GET_VAR 'val x: .P [val] declared in .testForInListUse' type=.P origin=null FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:.J) returnType:kotlin.Unit VALUE_PARAMETER name:j index:0 type:.J BLOCK_BODY