IR: handle enhanced nullability in TypeTranslator

This commit is contained in:
Georgy Bronnikov
2020-06-16 13:43:32 +03:00
parent b21cabe671
commit 4ecb228d50
15 changed files with 174 additions and 160 deletions
@@ -174,7 +174,12 @@ class Fir2IrConverter(
val moduleDescriptor = FirModuleDescriptor(session)
val symbolTable = SymbolTable(signaturer)
val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, moduleDescriptor.builtIns)
val typeTranslator = TypeTranslator(
symbolTable,
languageVersionSettings,
moduleDescriptor.builtIns,
extensions = generatorExtensions
)
constantValueGenerator.typeTranslator = typeTranslator
typeTranslator.constantValueGenerator = constantValueGenerator
val builtIns = IrBuiltIns(moduleDescriptor.builtIns, typeTranslator, symbolTable)
@@ -30,7 +30,9 @@ fun createGeneratorContext(
symbolTable: SymbolTable,
extensions: GeneratorExtensions
): GeneratorContext {
val typeTranslator = TypeTranslator(symbolTable, languageVersionSettings, builtIns = moduleDescriptor.builtIns)
val typeTranslator = TypeTranslator(
symbolTable, languageVersionSettings, builtIns = moduleDescriptor.builtIns, extensions = extensions
)
val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, symbolTable)
typeTranslator.constantValueGenerator = constantValueGenerator
constantValueGenerator.typeTranslator = typeTranslator
@@ -28,16 +28,5 @@ open class GeneratorExtensions : StubGeneratorExtensions() {
open fun computeFieldVisibility(descriptor: PropertyDescriptor): Visibility? = null
open val enhancedNullability: EnhancedNullability
get() = EnhancedNullability
open class EnhancedNullability {
open fun hasEnhancedNullability(kotlinType: KotlinType): Boolean = false
open fun stripEnhancedNullability(kotlinType: KotlinType): KotlinType = kotlinType
companion object Instance : EnhancedNullability()
}
open fun getParentClassStaticScope(descriptor: ClassDescriptor): MemberScope? = null
}
@@ -305,9 +305,7 @@ interface IrTypeSystemContext : TypeSystemContext, TypeSystemCommonSuperTypesCon
}
override fun KotlinTypeMarker.hasAnnotation(fqName: FqName): Boolean =
// TODO: don't fall back to KotlinType to check annotations. Currently testIdentityEquals fails on JVM without it
(this as IrAnnotationContainer).hasAnnotation(fqName) ||
(this as IrType).toKotlinType().annotations.hasAnnotation(fqName)
(this as IrAnnotationContainer).hasAnnotation(fqName)
override fun KotlinTypeMarker.getAnnotationFirstArgumentValue(fqName: FqName): Any? =
(this as? IrType)?.annotations?.firstOrNull { annotation ->
@@ -44,7 +44,7 @@ class DeclarationStubGenerator(
val moduleDescriptor: ModuleDescriptor,
val symbolTable: SymbolTable,
languageVersionSettings: LanguageVersionSettings,
val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY,
) : IrProvider {
private val lazyTable = symbolTable.lazyWrapper
@@ -61,7 +61,14 @@ class DeclarationStubGenerator(
}
val typeTranslator =
TypeTranslator(lazyTable, languageVersionSettings, moduleDescriptor.builtIns, LazyScopedTypeParametersResolver(lazyTable), true)
TypeTranslator(
lazyTable,
languageVersionSettings,
moduleDescriptor.builtIns,
LazyScopedTypeParametersResolver(lazyTable),
true,
extensions
)
private val constantValueGenerator = ConstantValueGenerator(moduleDescriptor, lazyTable)
private val facadeClassMap = mutableMapOf<DeserializedContainerSource, IrClass?>()
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
import org.jetbrains.kotlin.types.KotlinType
open class StubGeneratorExtensions {
open fun computeExternalDeclarationOrigin(descriptor: DeclarationDescriptor): IrDeclarationOrigin? = null
@@ -18,6 +19,17 @@ open class StubGeneratorExtensions {
open fun isPropertyWithPlatformField(descriptor: PropertyDescriptor): Boolean = false
open val enhancedNullability: EnhancedNullability
get() = EnhancedNullability
open class EnhancedNullability {
open fun hasEnhancedNullability(kotlinType: KotlinType): Boolean = false
open fun stripEnhancedNullability(kotlinType: KotlinType): KotlinType = kotlinType
companion object Instance : EnhancedNullability()
}
companion object {
@JvmField
val EMPTY = StubGeneratorExtensions()
@@ -32,7 +32,8 @@ class TypeTranslator(
val languageVersionSettings: LanguageVersionSettings,
builtIns: KotlinBuiltIns,
private val typeParametersResolver: TypeParametersResolver = ScopedTypeParametersResolver(),
private val enterTableScope: Boolean = false
private val enterTableScope: Boolean = false,
private val extensions: StubGeneratorExtensions = StubGeneratorExtensions.EMPTY
) {
private val erasureStack = Stack<PropertyDescriptor>()
@@ -108,7 +109,7 @@ class TypeTranslator(
return IrSimpleTypeBuilder().apply {
this.kotlinType = flexibleApproximatedType
this.hasQuestionMark = approximatedType.isMarkedNullable
this.hasQuestionMark = approximatedType.isMarkedNullable || extensions.enhancedNullability.hasEnhancedNullability(approximatedType)
this.variance = variance
this.abbreviation = approximatedType.getAbbreviation()?.toIrTypeAbbreviation()
when (ktTypeDescriptor) {
@@ -27,9 +27,9 @@ FILE fqName:<root> fileName:/implicitNotNullOnDelegatedImplementation.kt
public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in <root>.JFoo
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
VALUE_PARAMETER name:other index:0 type:kotlin.Any?
FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:<root>.JFoo) returnType:kotlin.String [fake_override]
FUN FAKE_OVERRIDE name:foo visibility:public modality:OPEN <> ($this:<root>.JFoo) returnType:kotlin.String? [fake_override]
overridden:
public open fun foo (): kotlin.String declared in <root>.JFoo
public open fun foo (): kotlin.String? declared in <root>.JFoo
$this: VALUE_PARAMETER name:<this> type:<root>.JFoo
FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override]
overridden:
@@ -47,12 +47,12 @@ FILE fqName:<root> fileName:/implicitNotNullOnDelegatedImplementation.kt
INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:K2 modality:FINAL visibility:public superTypes:[<root>.JFoo]'
FUN name:foo visibility:public modality:OPEN <> ($this:<root>.K2) returnType:kotlin.String
overridden:
public open fun foo (): kotlin.String declared in <root>.JFoo
public open fun foo (): kotlin.String? declared in <root>.JFoo
$this: VALUE_PARAMETER name:<this> type:<root>.K2
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun foo (): kotlin.String declared in <root>.K2'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun foo (): kotlin.String declared in <root>.JFoo' superQualifier='CLASS IR_EXTERNAL_JAVA_DECLARATION_STUB CLASS name:JFoo modality:OPEN visibility:public superTypes:[<root>.IFoo]' type=kotlin.String origin=null
CALL 'public open fun foo (): kotlin.String? declared in <root>.JFoo' superQualifier='CLASS IR_EXTERNAL_JAVA_DECLARATION_STUB CLASS name:JFoo modality:OPEN visibility:public superTypes:[<root>.IFoo]' type=kotlin.String? origin=null
$this: GET_VAR '<this>: <root>.K2 declared in <root>.K2.foo' type=<root>.K2 origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
overridden:
@@ -141,7 +141,7 @@ FILE fqName:<root> fileName:/implicitNotNullOnDelegatedImplementation.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun foo (): kotlin.String declared in <root>.TestJFoo'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun foo (): kotlin.String declared in <root>.JFoo' type=kotlin.String origin=null
CALL 'public open fun foo (): kotlin.String? declared in <root>.JFoo' type=kotlin.String? origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.JFoo visibility:private [final]' type=<root>.JFoo origin=null
receiver: GET_VAR '<this>: <root>.TestJFoo declared in <root>.TestJFoo.foo' type=<root>.TestJFoo origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
@@ -173,7 +173,7 @@ FILE fqName:<root> fileName:/implicitNotNullOnDelegatedImplementation.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun foo (): kotlin.String declared in <root>.TestK1'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun foo (): kotlin.String [fake_override] declared in <root>.K1' type=kotlin.String origin=null
CALL 'public open fun foo (): kotlin.String? [fake_override] declared in <root>.K1' type=kotlin.String? origin=null
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.K1 visibility:private [final]' type=<root>.K1 origin=null
receiver: GET_VAR '<this>: <root>.TestK1 declared in <root>.TestK1.foo' type=<root>.TestK1 origin=null
FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator]
@@ -45,13 +45,13 @@ FILE fqName:<root> fileName:/nullCheckOnGenericLambdaReturn.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test2 (): kotlin.String declared in <root>'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public final fun checkT <T> (fn: kotlin.Function0<T of <root>.checkT>): T of <root>.checkT declared in <root>' type=kotlin.String origin=null
<T>: kotlin.String
fn: FUN_EXPR type=kotlin.Function0<kotlin.String> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.String
CALL 'public final fun checkT <T> (fn: kotlin.Function0<T of <root>.checkT>): T of <root>.checkT declared in <root>' type=kotlin.String? origin=null
<T>: kotlin.String?
fn: FUN_EXPR type=kotlin.Function0<kotlin.String?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.String?
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String declared in <root>.test2'
CALL 'public open fun nnFoo (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String? declared in <root>.test2'
CALL 'public open fun nnFoo (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.String?
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test3 (): kotlin.String? declared in <root>'
@@ -66,10 +66,10 @@ FILE fqName:<root> fileName:/nullCheckOnGenericLambdaReturn.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun test4 (): kotlin.String declared in <root>'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public final fun checkTAny <T> (fn: kotlin.Function0<T of <root>.checkTAny>): T of <root>.checkTAny declared in <root>' type=kotlin.String origin=null
<T>: kotlin.String
fn: FUN_EXPR type=kotlin.Function0<kotlin.String> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.String
CALL 'public final fun checkTAny <T> (fn: kotlin.Function0<T of <root>.checkTAny>): T of <root>.checkTAny declared in <root>' type=kotlin.String? origin=null
<T>: kotlin.String?
fn: FUN_EXPR type=kotlin.Function0<kotlin.String?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.String?
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String declared in <root>.test4'
CALL 'public open fun nnFoo (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String? declared in <root>.test4'
CALL 'public open fun nnFoo (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
@@ -87,4 +87,4 @@ FILE fqName:<root> fileName:/nullCheckOnLambdaReturn.kt
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Any?
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.Any? declared in <root>.test6'
CALL 'public open fun nnFoo (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun nnFoo (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
@@ -8,12 +8,12 @@ FILE fqName:<root> fileName:/typeParametersInImplicitCast.kt
<T>: kotlin.collections.List<T of <root>.problematic>
<R>: T of <root>.problematic?
$receiver: GET_VAR 'lss: kotlin.collections.List<kotlin.collections.List<T of <root>.problematic>> declared in <root>.problematic' type=kotlin.collections.List<kotlin.collections.List<T of <root>.problematic>> origin=null
transform: FUN_EXPR type=kotlin.Function1<kotlin.collections.List<T of <root>.problematic>, kotlin.collections.Iterable<T of <root>.problematic?>> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.collections.List<T of <root>.problematic>) returnType:kotlin.collections.Iterable<T of <root>.problematic?>
transform: FUN_EXPR type=kotlin.Function1<kotlin.collections.List<T of <root>.problematic>, kotlin.collections.List<T of <root>.problematic?>?> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> (it:kotlin.collections.List<T of <root>.problematic>) returnType:kotlin.collections.List<T of <root>.problematic?>?
VALUE_PARAMETER name:it index:0 type:kotlin.collections.List<T of <root>.problematic>
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (it: kotlin.collections.List<T of <root>.problematic>): kotlin.collections.Iterable<T of <root>.problematic?> declared in <root>.problematic'
RETURN type=kotlin.Nothing from='local final fun <anonymous> (it: kotlin.collections.List<T of <root>.problematic>): kotlin.collections.List<T of <root>.problematic?>? declared in <root>.problematic'
TYPE_OP type=kotlin.collections.List<T of <root>.problematic?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<T of <root>.problematic?>
CALL 'public/*package*/ open fun id <T> (v: kotlin.collections.List<T of <root>.ListId.id?>?): kotlin.collections.List<T of <root>.ListId.id?> declared in <root>.ListId' type=kotlin.collections.List<T of <root>.problematic?> origin=null
CALL 'public/*package*/ open fun id <T> (v: kotlin.collections.List<T of <root>.ListId.id?>?): kotlin.collections.List<T of <root>.ListId.id?>? declared in <root>.ListId' type=kotlin.collections.List<T of <root>.problematic?>? origin=null
<T>: T of <root>.problematic?
v: GET_VAR 'it: kotlin.collections.List<T of <root>.problematic> declared in <root>.problematic.<anonymous>' type=kotlin.collections.List<T of <root>.problematic> origin=null
+1 -1
View File
@@ -27,7 +27,7 @@ FILE fqName:<root> fileName:/builtinMap.kt
$receiver: VALUE_PARAMETER name:<this> type:java.util.LinkedHashMap<K1 of <root>.plus?, V1 of <root>.plus?>{ kotlin.collections.LinkedHashMap<K1 of <root>.plus?, V1 of <root>.plus?> }
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public open fun put (key: K of java.util.LinkedHashMap, value: V of java.util.LinkedHashMap): V of java.util.LinkedHashMap? [fake_override] declared in java.util.LinkedHashMap' type=V1 of <root>.plus? origin=null
CALL 'public open fun put (key: K of java.util.LinkedHashMap?, value: V of java.util.LinkedHashMap?): V of java.util.LinkedHashMap? [fake_override] declared in java.util.LinkedHashMap' type=V1 of <root>.plus? origin=null
$this: GET_VAR '<this>: java.util.LinkedHashMap<K1 of <root>.plus?, V1 of <root>.plus?>{ kotlin.collections.LinkedHashMap<K1 of <root>.plus?, V1 of <root>.plus?> } declared in <root>.plus.<anonymous>' type=java.util.LinkedHashMap<K1 of <root>.plus?, V1 of <root>.plus?>{ kotlin.collections.LinkedHashMap<K1 of <root>.plus?, V1 of <root>.plus?> } origin=null
key: CALL 'public final fun <get-first> (): A of kotlin.Pair declared in kotlin.Pair' type=K1 of <root>.plus origin=GET_PROPERTY
$this: GET_VAR 'pair: kotlin.Pair<K1 of <root>.plus, V1 of <root>.plus> declared in <root>.plus' type=kotlin.Pair<K1 of <root>.plus, V1 of <root>.plus> origin=null
@@ -6,22 +6,22 @@ FILE fqName:<root> fileName:/enhancedNullability.kt
BLOCK_BODY
CALL 'public final fun use (s: kotlin.String): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
s: TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:testLocalVal visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:local type:kotlin.String [val]
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:testReturnValue visibility:public modality:FINAL <> () returnType:kotlin.String
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun testReturnValue (): kotlin.String declared in <root>'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
PROPERTY name:testGlobalVal visibility:public modality:FINAL [val]
FIELD PROPERTY_BACKING_FIELD name:testGlobalVal type:kotlin.String visibility:private [final,static]
EXPRESSION_BODY
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-testGlobalVal> visibility:public modality:FINAL <> () returnType:kotlin.String
correspondingProperty: PROPERTY name:testGlobalVal visibility:public modality:FINAL [val]
BLOCK_BODY
@@ -33,21 +33,21 @@ FILE fqName:<root> fileName:/enhancedNullability.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-testGlobalValGetter> (): kotlin.String declared in <root>'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:testJUse visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public open fun use (s: kotlin.String?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: CALL 'public open fun nullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun use (s: kotlin.String?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:testLocalVarUse visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:ns type:kotlin.String? [val]
CALL 'public open fun nullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public open fun use (s: kotlin.String?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val ns: kotlin.String? [val] declared in <root>.testLocalVarUse' type=kotlin.String? origin=null
VAR name:nns type:kotlin.String [val]
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun notNullString (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public open fun notNullString (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
CALL 'public open fun use (s: kotlin.String?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val nns: kotlin.String [val] declared in <root>.testLocalVarUse' type=kotlin.String origin=null
@@ -118,89 +118,89 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
FUN name:test1 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
COMPOSITE type=kotlin.Unit origin=DESTRUCTURING_DECLARATION
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.P [val]
CALL 'public open fun notNullP (): <root>.P declared in <root>.J' type=<root>.P origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.P? [val]
CALL 'public open fun notNullP (): <root>.P? declared in <root>.J' type=<root>.P? origin=null
VAR name:x type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=COMPONENT_N(index=1)
$this: TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
GET_VAR 'val tmp_0: <root>.P [val] declared in <root>.test1' type=<root>.P origin=null
GET_VAR 'val tmp_0: <root>.P? [val] declared in <root>.test1' type=<root>.P? origin=null
VAR name:y type:kotlin.Int [val]
CALL 'public final fun component2 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=COMPONENT_N(index=2)
$this: TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
GET_VAR 'val tmp_0: <root>.P [val] declared in <root>.test1' type=<root>.P origin=null
GET_VAR 'val tmp_0: <root>.P? [val] declared in <root>.test1' type=<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
x: GET_VAR 'val x: 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
BLOCK_BODY
COMPOSITE type=kotlin.Unit origin=DESTRUCTURING_DECLARATION
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? [val]
CALL 'public open fun notNullComponents (): <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? declared in <root>.J' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? origin=null
VAR name:x type:@[NotNull(value = <null>)] kotlin.String [val]
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String origin=COMPONENT_N(index=1)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>
GET_VAR 'val tmp_1: <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? [val] declared in <root>.test2' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? origin=null
VAR name:y type:@[NotNull(value = <null>)] kotlin.String [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String origin=COMPONENT_N(index=2)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>
GET_VAR 'val tmp_1: <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? [val] declared in <root>.test2' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val]
CALL 'public open fun notNullComponents (): <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? declared in <root>.J' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? origin=null
VAR name:x type:@[NotNull(value = <null>)] kotlin.String? [val]
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String? origin=COMPONENT_N(index=1)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>
GET_VAR 'val tmp_1: <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val] declared in <root>.test2' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? origin=null
VAR name:y type:@[NotNull(value = <null>)] kotlin.String? [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String? origin=COMPONENT_N(index=2)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>
GET_VAR 'val tmp_1: <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val] declared in <root>.test2' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] 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
x: TYPE_OP type=@[NotNull(value = <null>)] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] kotlin.String
GET_VAR 'val x: @[NotNull(value = <null>)] kotlin.String [val] declared in <root>.test2' type=@[NotNull(value = <null>)] kotlin.String origin=null
GET_VAR 'val x: @[NotNull(value = <null>)] kotlin.String? [val] declared in <root>.test2' type=@[NotNull(value = <null>)] kotlin.String? origin=null
y: TYPE_OP type=@[NotNull(value = <null>)] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] kotlin.String
GET_VAR 'val y: @[NotNull(value = <null>)] kotlin.String [val] declared in <root>.test2' type=@[NotNull(value = <null>)] kotlin.String origin=null
GET_VAR 'val y: @[NotNull(value = <null>)] kotlin.String? [val] declared in <root>.test2' type=@[NotNull(value = <null>)] kotlin.String? origin=null
FUN name:test2Desugared visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:tmp type:<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? [val]
CALL 'public open fun notNullComponents (): <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? declared in <root>.J' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? origin=null
VAR name:tmp type:<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val]
CALL 'public open fun notNullComponents (): <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? declared in <root>.J' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? origin=null
VAR name:x type:@[NotNull(value = <null>)] kotlin.String [val]
TYPE_OP type=@[NotNull(value = <null>)] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] kotlin.String
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String origin=null
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>
GET_VAR 'val tmp: <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? [val] declared in <root>.test2Desugared' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? origin=null
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String? origin=null
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>
GET_VAR 'val tmp: <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val] declared in <root>.test2Desugared' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? origin=null
VAR name:y type:@[NotNull(value = <null>)] kotlin.String [val]
TYPE_OP type=@[NotNull(value = <null>)] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] kotlin.String
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String origin=null
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>
GET_VAR 'val tmp: <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? [val] declared in <root>.test2Desugared' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>? origin=null
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String? origin=null
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>
GET_VAR 'val tmp: <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val] declared in <root>.test2Desugared' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] 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
x: GET_VAR 'val x: @[NotNull(value = <null>)] kotlin.String [val] declared in <root>.test2Desugared' type=@[NotNull(value = <null>)] kotlin.String origin=null
y: GET_VAR 'val y: @[NotNull(value = <null>)] kotlin.String [val] declared in <root>.test2Desugared' type=@[NotNull(value = <null>)] kotlin.String origin=null
FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
COMPOSITE type=kotlin.Unit origin=DESTRUCTURING_DECLARATION
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> [val]
CALL 'public open fun notNullQAndComponents (): <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> declared in <root>.J' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=null
VAR name:x type:@[NotNull(value = <null>)] kotlin.String [val]
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String origin=COMPONENT_N(index=1)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>
GET_VAR 'val tmp_2: <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> [val] declared in <root>.test3' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=null
VAR name:y type:@[NotNull(value = <null>)] kotlin.String [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String origin=COMPONENT_N(index=2)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String>
GET_VAR 'val tmp_2: <root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> [val] declared in <root>.test3' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String, @[NotNull(value = <null>)] kotlin.String> origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val]
CALL 'public open fun notNullQAndComponents (): <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? declared in <root>.J' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? origin=null
VAR name:x type:@[NotNull(value = <null>)] kotlin.String? [val]
CALL 'public final fun component1 (): T1 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String? origin=COMPONENT_N(index=1)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>
GET_VAR 'val tmp_2: <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val] declared in <root>.test3' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? origin=null
VAR name:y type:@[NotNull(value = <null>)] kotlin.String? [val]
CALL 'public final fun component2 (): T2 of <root>.Q [operator] declared in <root>.Q' type=@[NotNull(value = <null>)] kotlin.String? origin=COMPONENT_N(index=2)
$this: TYPE_OP type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?> origin=IMPLICIT_NOTNULL typeOperand=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>
GET_VAR 'val tmp_2: <root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] kotlin.String?>? [val] declared in <root>.test3' type=<root>.Q<@[NotNull(value = <null>)] kotlin.String?, @[NotNull(value = <null>)] 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
x: TYPE_OP type=@[NotNull(value = <null>)] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] kotlin.String
GET_VAR 'val x: @[NotNull(value = <null>)] kotlin.String [val] declared in <root>.test3' type=@[NotNull(value = <null>)] kotlin.String origin=null
GET_VAR 'val x: @[NotNull(value = <null>)] kotlin.String? [val] declared in <root>.test3' type=@[NotNull(value = <null>)] kotlin.String? origin=null
y: TYPE_OP type=@[NotNull(value = <null>)] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] kotlin.String
GET_VAR 'val y: @[NotNull(value = <null>)] kotlin.String [val] declared in <root>.test3' type=@[NotNull(value = <null>)] kotlin.String origin=null
GET_VAR 'val y: @[NotNull(value = <null>)] kotlin.String? [val] declared in <root>.test3' type=@[NotNull(value = <null>)] kotlin.String? origin=null
FUN name:test4 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
COMPOSITE type=kotlin.Unit origin=DESTRUCTURING_DECLARATION
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P> [val]
CALL 'public final fun first <T> (): T of kotlin.collections.first declared in kotlin.collections' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P> origin=null
<T>: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P>
$receiver: CALL 'public final fun withIndex <T> (): kotlin.collections.Iterable<kotlin.collections.IndexedValue<T of kotlin.collections.withIndex>> declared in kotlin.collections' type=kotlin.collections.Iterable<kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P>> origin=null
<T>: @[NotNull(value = <null>)] <root>.P
$receiver: TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?> [val]
CALL 'public final fun first <T> (): T of kotlin.collections.first declared in kotlin.collections' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?> origin=null
<T>: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?>
$receiver: CALL 'public final fun withIndex <T> (): kotlin.collections.Iterable<kotlin.collections.IndexedValue<T of kotlin.collections.withIndex>> declared in kotlin.collections' type=kotlin.collections.Iterable<kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?>> origin=null
<T>: @[NotNull(value = <null>)] <root>.P?
$receiver: TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.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=COMPONENT_N(index=1)
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P> origin=null
VAR name:y type:@[NotNull(value = <null>)] <root>.P [val]
CALL 'public final fun component2 (): T of kotlin.collections.IndexedValue [operator] declared in kotlin.collections.IndexedValue' type=@[NotNull(value = <null>)] <root>.P origin=COMPONENT_N(index=2)
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P> origin=null
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?> origin=null
VAR name:y type:@[NotNull(value = <null>)] <root>.P? [val]
CALL 'public final fun component2 (): T of kotlin.collections.IndexedValue [operator] declared in kotlin.collections.IndexedValue' type=@[NotNull(value = <null>)] <root>.P? origin=COMPONENT_N(index=2)
$this: GET_VAR 'val tmp_3: kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.test4' type=kotlin.collections.IndexedValue<@[NotNull(value = <null>)] <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
x: GET_VAR 'val x: kotlin.Int [val] declared in <root>.test4' type=kotlin.Int origin=null
y: TYPE_OP type=@[NotNull(value = <null>)] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] <root>.P
GET_VAR 'val y: @[NotNull(value = <null>)] <root>.P [val] declared in <root>.test4' type=@[NotNull(value = <null>)] <root>.P origin=null
GET_VAR 'val y: @[NotNull(value = <null>)] <root>.P? [val] declared in <root>.test4' type=@[NotNull(value = <null>)] <root>.P? origin=null
@@ -5,120 +5,120 @@ FILE fqName:<root> 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<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P> origin=FOR_LOOP_ITERATOR
VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P?> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? origin=null
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:x type:@[NotNull(value = <null>)] <root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
VAR FOR_LOOP_VARIABLE name:x type:@[NotNull(value = <null>)] <root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
BLOCK type=kotlin.Unit 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<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P> origin=FOR_LOOP_ITERATOR
VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P?> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? origin=null
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:@[NotNull(value = <null>)] <root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:@[NotNull(value = <null>)] <root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
VAR name:x type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=COMPONENT_N(index=1)
$this: TYPE_OP type=@[NotNull(value = <null>)] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] <root>.P
GET_VAR 'val tmp_2: @[NotNull(value = <null>)] <root>.P [val] declared in <root>.testForInListDestructured' type=@[NotNull(value = <null>)] <root>.P origin=null
GET_VAR 'val tmp_2: @[NotNull(value = <null>)] <root>.P? [val] declared in <root>.testForInListDestructured' type=@[NotNull(value = <null>)] <root>.P? origin=null
VAR name:y type:kotlin.Int [val]
CALL 'public final fun component2 (): kotlin.Int [operator] declared in <root>.P' type=kotlin.Int origin=COMPONENT_N(index=2)
$this: TYPE_OP type=@[NotNull(value = <null>)] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] <root>.P
GET_VAR 'val tmp_2: @[NotNull(value = <null>)] <root>.P [val] declared in <root>.testForInListDestructured' type=@[NotNull(value = <null>)] <root>.P origin=null
GET_VAR 'val tmp_2: @[NotNull(value = <null>)] <root>.P? [val] declared in <root>.testForInListDestructured' type=@[NotNull(value = <null>)] <root>.P? origin=null
BLOCK type=kotlin.Unit origin=null
FUN name:testDesugaredForInList visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR name:iterator type:kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P> origin=null
VAR name:iterator type:kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P?> origin=null
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? origin=null
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? origin=null
WHILE label=null origin=WHILE_LOOP
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=null
VAR name:x type:@[NotNull(value = <null>)] <root>.P [val]
TYPE_OP type=@[NotNull(value = <null>)] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] <root>.P
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P? origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
FUN name:testForInArrayUnused visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J
BLOCK_BODY
BLOCK type=kotlin.Unit origin=FOR_LOOP
VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.Iterator<<root>.P> [val]
CALL 'public final fun iterator (): kotlin.collections.Iterator<T of kotlin.Array> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.Array<<root>.P> origin=IMPLICIT_CAST typeOperand=kotlin.Array<<root>.P>
TYPE_OP type=kotlin.Array<out <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Array<out <root>.P>
CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P> declared in <root>.J' type=kotlin.Array<out <root>.P> origin=null
VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.Iterator<<root>.P?> [val]
CALL 'public final fun iterator (): kotlin.collections.Iterator<T of kotlin.Array> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P?> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.Array<<root>.P?> origin=IMPLICIT_CAST typeOperand=kotlin.Array<<root>.P?>
TYPE_OP type=kotlin.Array<out <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Array<out <root>.P?>
CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P?>? declared in <root>.J' type=kotlin.Array<out <root>.P?>? origin=null
$this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUnused' type=<root>.J 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.Iterator<<root>.P> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P> origin=null
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<<root>.P> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P> origin=null
VAR FOR_LOOP_VARIABLE name:x type:<root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P?> origin=null
BLOCK type=kotlin.Unit origin=null
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_4 type:kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P> origin=FOR_LOOP_ITERATOR
VAR FOR_LOOP_ITERATOR name:tmp_4 type:kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <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<@[NotNull(value = <null>)] <root>.P?> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.collections.MutableList<*> origin=IMPLICIT_CAST typeOperand=kotlin.collections.MutableList<*>
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P>? origin=null
TYPE_OP type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>
CALL 'public open fun listOfNotNull (): kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? declared in <root>.J' type=kotlin.collections.List<@[NotNull(value = <null>)] <root>.P?>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [fake_override,operator] declared in kotlin.collections.MutableIterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:x type:@[NotNull(value = <null>)] <root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P> origin=null
VAR FOR_LOOP_VARIABLE name:x type:@[NotNull(value = <null>)] <root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [fake_override,operator] declared in kotlin.collections.MutableIterator' type=@[NotNull(value = <null>)] <root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<@[NotNull(value = <null>)] <root>.P?> 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
s: TYPE_OP type=@[NotNull(value = <null>)] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[NotNull(value = <null>)] <root>.P
GET_VAR 'val x: @[NotNull(value = <null>)] <root>.P [val] declared in <root>.testForInListUse' type=@[NotNull(value = <null>)] <root>.P origin=null
CALL 'public open fun use (s: <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: @[NotNull(value = <null>)] <root>.P [val] declared in <root>.testForInListUse' type=@[NotNull(value = <null>)] <root>.P origin=null
GET_VAR 'val x: @[NotNull(value = <null>)] <root>.P? [val] declared in <root>.testForInListUse' type=@[NotNull(value = <null>)] <root>.P? origin=null
CALL 'public open fun use (s: <root>.P?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: @[NotNull(value = <null>)] <root>.P? [val] declared in <root>.testForInListUse' type=@[NotNull(value = <null>)] <root>.P? origin=null
FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J
BLOCK_BODY
BLOCK type=kotlin.Unit origin=FOR_LOOP
VAR FOR_LOOP_ITERATOR name:tmp_5 type:kotlin.collections.Iterator<<root>.P> [val]
CALL 'public final fun iterator (): kotlin.collections.Iterator<T of kotlin.Array> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.Array<<root>.P> origin=IMPLICIT_CAST typeOperand=kotlin.Array<<root>.P>
TYPE_OP type=kotlin.Array<out <root>.P> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Array<out <root>.P>
CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P> declared in <root>.J' type=kotlin.Array<out <root>.P> origin=null
VAR FOR_LOOP_ITERATOR name:tmp_5 type:kotlin.collections.Iterator<<root>.P?> [val]
CALL 'public final fun iterator (): kotlin.collections.Iterator<T of kotlin.Array> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P?> origin=FOR_LOOP_ITERATOR
$this: TYPE_OP type=kotlin.Array<<root>.P?> origin=IMPLICIT_CAST typeOperand=kotlin.Array<<root>.P?>
TYPE_OP type=kotlin.Array<out <root>.P?> origin=IMPLICIT_NOTNULL typeOperand=kotlin.Array<out <root>.P?>
CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P?>? declared in <root>.J' type=kotlin.Array<out <root>.P?>? origin=null
$this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUse' type=<root>.J 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_5: kotlin.collections.Iterator<<root>.P> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P> origin=null
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<<root>.P> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P> origin=null
VAR FOR_LOOP_VARIABLE name:x type:<root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> 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
s: TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
GET_VAR 'val x: <root>.P [val] declared in <root>.testForInArrayUse' type=<root>.P origin=null
CALL 'public open fun use (s: <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <root>.P [val] declared in <root>.testForInArrayUse' type=<root>.P origin=null
GET_VAR 'val x: <root>.P? [val] declared in <root>.testForInArrayUse' type=<root>.P? origin=null
CALL 'public open fun use (s: <root>.P?): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <root>.P? [val] declared in <root>.testForInArrayUse' type=<root>.P? origin=null
CLASS INTERFACE name:K modality:ABSTRACT visibility:public superTypes:[kotlin.Any]
$this: VALUE_PARAMETER INSTANCE_RECEIVER name:<this> type:<root>.K
FUN name:arrayOfNotNull visibility:public modality:ABSTRACT <> ($this:<root>.K) returnType:kotlin.Array<<root>.P>