[FIR2IR] Preserve 'EnhancedNullability' type annotation in IR

This commit is contained in:
Mikhail Glukhikh
2020-11-09 17:11:47 +03:00
parent f8dc56e2bb
commit e7a84fd1ee
17 changed files with 131 additions and 103 deletions
@@ -5,27 +5,56 @@
package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
import org.jetbrains.kotlin.fir.types.CompilerConeAttributes
import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
import org.jetbrains.kotlin.ir.declarations.IrConstructor
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrConstructorCallImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.types.defaultType
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstance
class Fir2IrBuiltIns(
private val components: Fir2IrComponents,
session: FirSession
) : Fir2IrComponents by components {
class Fir2IrBuiltIns(private val components: Fir2IrComponents) : Fir2IrComponents by components {
private val extensionFunctionTypeAnnotationSymbol by lazy {
session.firSymbolProvider.getClassLikeSymbolByFqName(CompilerConeAttributes.ExtensionFunctionType.ANNOTATION_CLASS_ID)!!
.toSymbol(session, classifierStorage, ConversionTypeContext.DEFAULT) as IrClassSymbol
annotationSymbolById(CompilerConeAttributes.ExtensionFunctionType.ANNOTATION_CLASS_ID)
}
internal fun extensionFunctionTypeAnnotationConstructorCall() =
IrConstructorCallImpl.fromSymbolOwner(
extensionFunctionTypeAnnotationSymbol.defaultType,
extensionFunctionTypeAnnotationSymbol.owner.declarations.firstIsInstance<IrConstructor>().symbol
extensionFunctionTypeAnnotationSymbol.toConstructorCall()
private val kotlinJvmInternalPackage =
IrExternalPackageFragmentImpl(
DescriptorlessExternalPackageFragmentSymbol(),
CompilerConeAttributes.EnhancedNullability.ANNOTATION_CLASS_ID.packageFqName
)
private val enhancedNullabilityAnnotationSymbol by lazy {
irFactory.buildClass {
kind = ClassKind.ANNOTATION_CLASS
name = CompilerConeAttributes.EnhancedNullability.ANNOTATION_CLASS_ID.shortClassName
}.apply {
createImplicitParameterDeclarationWithWrappedDescriptor()
this.parent = kotlinJvmInternalPackage
addConstructor {
isPrimary = true
}
}.symbol
}
internal fun enhancedNullabilityAnnotationConstructorCall() =
enhancedNullabilityAnnotationSymbol.toConstructorCall()
private fun annotationSymbolById(id: ClassId): IrClassSymbol =
session.firSymbolProvider.getClassLikeSymbolByFqName(id)!!.toSymbol(
session, classifierStorage, ConversionTypeContext.DEFAULT
) as IrClassSymbol
private fun IrClassSymbol.toConstructorCall(): IrConstructorCallImpl =
IrConstructorCallImpl.fromSymbolOwner(defaultType, owner.declarations.firstIsInstance<IrConstructor>().symbol)
}
@@ -274,7 +274,7 @@ class Fir2IrConverter(
val fir2irVisitor = Fir2IrVisitor(converter, components, conversionScope)
val declarationStorage = Fir2IrDeclarationStorage(components, fir2irVisitor, moduleDescriptor)
val typeConverter = Fir2IrTypeConverter(components)
val builtIns = Fir2IrBuiltIns(components, session)
val builtIns = Fir2IrBuiltIns(components)
components.declarationStorage = declarationStorage
components.classifierStorage = classifierStorage
components.typeConverter = typeConverter
@@ -89,8 +89,10 @@ class Fir2IrTypeConverter(
val typeAnnotations: MutableList<IrConstructorCall> =
if (!isExtensionFunctionType) mutableListOf()
else mutableListOf(builtIns.extensionFunctionTypeAnnotationConstructorCall())
// TODO: Need to convert @EnhancedNullability ?
typeAnnotations += with(annotationGenerator) { annotations.toIrAnnotations() }
if (hasEnhancedNullability) {
typeAnnotations += builtIns.enhancedNullabilityAnnotationConstructorCall()
}
IrSimpleTypeImpl(
irSymbol, !typeContext.definitelyNotNull && this.isMarkedNullable,
fullyExpandedType(session).typeArguments.map { it.toIrTypeArgument(typeContext) },
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM
//FILE: Holder.java
import org.jetbrains.annotations.*;
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM
//FILE: JavaClass.java
import org.jetbrains.annotations.*;
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// FILE: JClass.java
import org.jetbrains.annotations.NotNull;
@@ -20,16 +20,16 @@ FILE fqName:<root> fileName:/delegatedImplementationOfJavaInterface.kt
RETURN type=kotlin.Nothing from='private final fun <get-j> (): <root>.J declared in <root>.Test'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:j type:<root>.J visibility:private [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.<get-j>' type=<root>.Test origin=null
FUN DELEGATED_MEMBER name:takeNotNull visibility:public modality:OPEN <> ($this:<root>.Test, x:kotlin.String) returnType:kotlin.Unit
FUN DELEGATED_MEMBER name:takeNotNull visibility:public modality:OPEN <> ($this:<root>.Test, x:@[EnhancedNullability] kotlin.String) returnType:kotlin.Unit
overridden:
public abstract fun takeNotNull (x: kotlin.String): kotlin.Unit declared in <root>.J
public abstract fun takeNotNull (x: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in <root>.J
$this: VALUE_PARAMETER name:<this> type:<root>.Test
VALUE_PARAMETER name:x index:0 type:kotlin.String
VALUE_PARAMETER name:x index:0 type:@[EnhancedNullability] kotlin.String
BLOCK_BODY
CALL 'public abstract fun takeNotNull (x: kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public abstract fun takeNotNull (x: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.J visibility:local [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.takeNotNull' type=<root>.Test origin=null
x: GET_VAR 'x: kotlin.String declared in <root>.Test.takeNotNull' type=kotlin.String origin=null
x: GET_VAR 'x: @[EnhancedNullability] kotlin.String declared in <root>.Test.takeNotNull' type=@[EnhancedNullability] kotlin.String origin=null
FUN DELEGATED_MEMBER name:takeNullable visibility:public modality:OPEN <> ($this:<root>.Test, x:kotlin.String?) returnType:kotlin.Unit
overridden:
public abstract fun takeNullable (x: kotlin.String?): kotlin.Unit declared in <root>.J
@@ -50,13 +50,13 @@ FILE fqName:<root> fileName:/delegatedImplementationOfJavaInterface.kt
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.J visibility:local [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.takeFlexible' type=<root>.Test origin=null
x: GET_VAR 'x: kotlin.String? declared in <root>.Test.takeFlexible' type=kotlin.String? origin=null
FUN DELEGATED_MEMBER name:returnNotNull visibility:public modality:OPEN <> ($this:<root>.Test) returnType:kotlin.String
FUN DELEGATED_MEMBER name:returnNotNull visibility:public modality:OPEN <> ($this:<root>.Test) returnType:@[EnhancedNullability] kotlin.String
overridden:
public abstract fun returnNotNull (): kotlin.String declared in <root>.J
public abstract fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in <root>.J
$this: VALUE_PARAMETER name:<this> type:<root>.Test
BLOCK_BODY
RETURN type=kotlin.Nothing from='public open fun returnNotNull (): kotlin.String declared in <root>.Test'
CALL 'public abstract fun returnNotNull (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
RETURN type=kotlin.Nothing from='public open fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in <root>.Test'
CALL 'public abstract fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
$this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:<root>.J visibility:local [final]' type=<root>.J origin=null
receiver: GET_VAR '<this>: <root>.Test declared in <root>.Test.returnNotNull' type=<root>.Test origin=null
FUN DELEGATED_MEMBER name:returnNullable visibility:public modality:OPEN <> ($this:<root>.Test) returnType:kotlin.String?
@@ -41,18 +41,18 @@ FILE fqName:<root> fileName:/nullCheckOnGenericLambdaReturn.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String? declared in <root>.test1'
CALL 'public open fun foo (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:test2 visibility:public modality:FINAL <> () returnType:kotlin.String
FUN name:test2 visibility:public modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
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
RETURN type=kotlin.Nothing from='public final fun test2 (): @[EnhancedNullability] kotlin.String declared in <root>'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public final fun checkT <T> (fn: kotlin.Function0<T of <root>.checkT>): T of <root>.checkT declared in <root>' type=@[EnhancedNullability] kotlin.String origin=null
<T>: @[EnhancedNullability] kotlin.String
fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String declared in <root>.test2'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
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> (): @[EnhancedNullability] kotlin.String declared in <root>.test2'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun nnFoo (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] 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>'
@@ -63,15 +63,15 @@ FILE fqName:<root> fileName:/nullCheckOnGenericLambdaReturn.kt
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String? declared in <root>.test3'
CALL 'public open fun foo (): kotlin.String? declared in <root>.J' type=kotlin.String? origin=null
FUN name:test4 visibility:public modality:FINAL <> () returnType:kotlin.String
FUN name:test4 visibility:public modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
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
RETURN type=kotlin.Nothing from='public final fun test4 (): @[EnhancedNullability] kotlin.String declared in <root>'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public final fun checkTAny <T> (fn: kotlin.Function0<T of <root>.checkTAny>): T of <root>.checkTAny declared in <root>' type=@[EnhancedNullability] kotlin.String origin=null
<T>: @[EnhancedNullability] kotlin.String
fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String declared in <root>.test4'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
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> (): @[EnhancedNullability] kotlin.String declared in <root>.test4'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun nnFoo (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
@@ -85,5 +85,5 @@ 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'
TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
CALL 'public open fun nnFoo (): kotlin.String declared in <root>.J' type=kotlin.String origin=null
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun nnFoo (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
@@ -5,51 +5,51 @@ FILE fqName:<root> fileName:/enhancedNullability.kt
FUN name:testUse visibility:public modality:FINAL <> () returnType:kotlin.Unit
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
s: TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] 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
FUN name:testReturnValue visibility:public modality:FINAL <> () returnType:kotlin.String
VAR name:local type:@[EnhancedNullability] kotlin.String [val]
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
FUN name:testReturnValue visibility:public modality:FINAL <> () returnType:@[EnhancedNullability] 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
RETURN type=kotlin.Nothing from='public final fun testReturnValue (): @[EnhancedNullability] kotlin.String declared in <root>'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] 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]
FIELD PROPERTY_BACKING_FIELD name:testGlobalVal type:@[EnhancedNullability] 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
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-testGlobalVal> visibility:public modality:FINAL <> () returnType:kotlin.String
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
FUN DEFAULT_PROPERTY_ACCESSOR name:<get-testGlobalVal> visibility:public modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
correspondingProperty: PROPERTY name:testGlobalVal visibility:public modality:FINAL [val]
BLOCK_BODY
RETURN type=kotlin.Nothing from='public final fun <get-testGlobalVal> (): kotlin.String declared in <root>'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:testGlobalVal type:kotlin.String visibility:private [final,static]' type=kotlin.String origin=null
RETURN type=kotlin.Nothing from='public final fun <get-testGlobalVal> (): @[EnhancedNullability] kotlin.String declared in <root>'
GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:testGlobalVal type:@[EnhancedNullability] kotlin.String visibility:private [final,static]' type=@[EnhancedNullability] kotlin.String origin=null
PROPERTY name:testGlobalValGetter visibility:public modality:FINAL [val]
FUN name:<get-testGlobalValGetter> visibility:public modality:FINAL <> () returnType:kotlin.String
FUN name:<get-testGlobalValGetter> visibility:public modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
correspondingProperty: PROPERTY name:testGlobalValGetter visibility:public modality:FINAL [val]
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
RETURN type=kotlin.Nothing from='public final fun <get-testGlobalValGetter> (): @[EnhancedNullability] kotlin.String declared in <root>'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] 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: @[EnhancedNullability] 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: 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: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] 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: @[EnhancedNullability] 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
s: TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String
GET_VAR 'val nns: kotlin.String [val] declared in <root>.testLocalVarUse' type=kotlin.String origin=null
VAR name:nns type:@[EnhancedNullability] kotlin.String [val]
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
CALL 'public open fun use (s: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
GET_VAR 'val nns: @[EnhancedNullability] kotlin.String [val] declared in <root>.testLocalVarUse' type=@[EnhancedNullability] kotlin.String origin=null
@@ -117,15 +117,15 @@ FILE fqName:<root> fileName:/enhancedNullabilityInDestructuringAssignment.kt
$this: VALUE_PARAMETER name:<this> type:kotlin.Any
FUN name:test1 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:<root>.P [val]
TYPE_OP type=<root>.P origin=IMPLICIT_NOTNULL typeOperand=<root>.P
CALL 'public open fun notNullP (): <root>.P declared in <root>.J' type=<root>.P origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:@[EnhancedNullability] <root>.P [val]
TYPE_OP type=@[EnhancedNullability] <root>.P origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] <root>.P
CALL 'public open fun notNullP (): @[EnhancedNullability] <root>.P declared in <root>.J' type=@[EnhancedNullability] <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=null
$this: GET_VAR 'val tmp_0: <root>.P [val] declared in <root>.test1' type=<root>.P origin=null
$this: GET_VAR 'val tmp_0: @[EnhancedNullability] <root>.P [val] declared in <root>.test1' type=@[EnhancedNullability] <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=null
$this: GET_VAR 'val tmp_0: <root>.P [val] declared in <root>.test1' type=<root>.P origin=null
$this: GET_VAR 'val tmp_0: @[EnhancedNullability] <root>.P [val] declared in <root>.test1' type=@[EnhancedNullability] <root>.P origin=null
CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
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
@@ -76,7 +76,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
$this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<<root>.P?> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<<root>.P?> origin=null
CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <root>.P? [val] declared in <root>.testForInListUse' type=<root>.P? origin=null
CALL 'public open fun use (s: <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
CALL 'public open fun use (s: @[EnhancedNullability] <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <root>.P? [val] declared in <root>.testForInListUse' type=<root>.P? origin=null
FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J
@@ -95,7 +95,7 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
$this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> origin=null
CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
s: 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
CALL 'public open fun use (s: @[EnhancedNullability] <root>.P): kotlin.Unit declared in <root>.J' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <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
@@ -9,11 +9,11 @@ FILE fqName:<root> fileName:/nnStringVsT.kt
FUN name:testNoNullCheck visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun useT <T> (fn: kotlin.Function0<T of <root>.useT>): T of <root>.useT 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 useT <T> (fn: kotlin.Function0<T of <root>.useT>): T of <root>.useT declared in <root>' type=@[EnhancedNullability] kotlin.String origin=null
<T>: @[EnhancedNullability] kotlin.String
fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String declared in <root>.testNoNullCheck'
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
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): @[EnhancedNullability] kotlin.String declared in <root>.testNoNullCheck'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
@@ -9,11 +9,11 @@ FILE fqName:<root> fileName:/nnStringVsTAny.kt
FUN name:testNoNullCheck visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY
TYPE_OP type=kotlin.Unit origin=IMPLICIT_COERCION_TO_UNIT typeOperand=kotlin.Unit
CALL 'public final fun useTAny <T> (fn: kotlin.Function0<T of <root>.useTAny>): T of <root>.useTAny 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 useTAny <T> (fn: kotlin.Function0<T of <root>.useTAny>): T of <root>.useTAny declared in <root>' type=@[EnhancedNullability] kotlin.String origin=null
<T>: @[EnhancedNullability] kotlin.String
fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): kotlin.String declared in <root>.testNoNullCheck'
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
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): @[EnhancedNullability] kotlin.String declared in <root>.testNoNullCheck'
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
@@ -18,5 +18,5 @@ FILE fqName:<root> fileName:/nnStringVsTConstrained.kt
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>.testWithNullCheck'
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
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
@@ -18,5 +18,5 @@ FILE fqName:<root> fileName:/nnStringVsTXArray.kt
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:java.io.Serializable
BLOCK_BODY
RETURN type=kotlin.Nothing from='local final fun <anonymous> (): java.io.Serializable declared in <root>.testWithNullCheck'
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
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null
@@ -17,5 +17,5 @@ FILE fqName:<root> fileName:/nnStringVsTXString.kt
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>.testWithNullCheck'
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
TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String
CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in <root>.J' type=@[EnhancedNullability] kotlin.String origin=null