From e7a84fd1eee874cb5d3253375beab5c6fd52bd4f Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 9 Nov 2020 17:11:47 +0300 Subject: [PATCH] [FIR2IR] Preserve 'EnhancedNullability' type annotation in IR --- .../kotlin/fir/backend/Fir2IrBuiltIns.kt | 49 +++++++++++---- .../kotlin/fir/backend/Fir2IrConverter.kt | 2 +- .../kotlin/fir/backend/Fir2IrTypeConverter.kt | 4 +- .../binaryOp/compareWithBoxedNotNullDouble.kt | 1 - .../binaryOp/compareWithBoxedNotNullLong.kt | 1 - .../bytecodeText/inlineJavaStaticFields.kt | 1 - ...gatedImplementationOfJavaInterface.fir.txt | 18 +++--- .../nullCheckOnGenericLambdaReturn.fir.txt | 40 ++++++------- .../nullCheckOnLambdaReturn.fir.txt | 4 +- .../nullChecks/enhancedNullability.fir.txt | 60 +++++++++---------- ...llabilityInDestructuringAssignment.fir.txt | 10 ++-- .../enhancedNullabilityInForLoop.fir.txt | 4 +- .../nnStringVsT.fir.txt | 14 ++--- .../nnStringVsTAny.fir.txt | 14 ++--- .../nnStringVsTConstrained.fir.txt | 4 +- .../nnStringVsTXArray.fir.txt | 4 +- .../nnStringVsTXString.fir.txt | 4 +- 17 files changed, 131 insertions(+), 103 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt index e1354d046ed..e0361014d8f 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrBuiltIns.kt @@ -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().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().symbol) } \ No newline at end of file diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index 3516eb22a4d..a71d1889da1 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -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 diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt index 198fb7dc051..31a003d941c 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrTypeConverter.kt @@ -89,8 +89,10 @@ class Fir2IrTypeConverter( val typeAnnotations: MutableList = 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) }, diff --git a/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullDouble.kt b/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullDouble.kt index da09a2090c3..1b54a33dad5 100644 --- a/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullDouble.kt +++ b/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullDouble.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM //FILE: Holder.java import org.jetbrains.annotations.*; diff --git a/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullLong.kt b/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullLong.kt index 089d65bcb67..17627b3cbee 100644 --- a/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullLong.kt +++ b/compiler/testData/codegen/box/binaryOp/compareWithBoxedNotNullLong.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM //FILE: JavaClass.java import org.jetbrains.annotations.*; diff --git a/compiler/testData/codegen/bytecodeText/inlineJavaStaticFields.kt b/compiler/testData/codegen/bytecodeText/inlineJavaStaticFields.kt index cbcec0a7313..f6ae773a90d 100644 --- a/compiler/testData/codegen/bytecodeText/inlineJavaStaticFields.kt +++ b/compiler/testData/codegen/bytecodeText/inlineJavaStaticFields.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // FILE: JClass.java import org.jetbrains.annotations.NotNull; diff --git a/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.txt b/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.txt index fa36ada9640..47f3d55636d 100644 --- a/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.txt +++ b/compiler/testData/ir/irText/classes/delegatedImplementationOfJavaInterface.fir.txt @@ -20,16 +20,16 @@ FILE fqName: fileName:/delegatedImplementationOfJavaInterface.kt RETURN type=kotlin.Nothing from='private final fun (): .J declared in .Test' GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:j type:.J visibility:private [final]' type=.J origin=null receiver: GET_VAR ': .Test declared in .Test.' type=.Test origin=null - FUN DELEGATED_MEMBER name:takeNotNull visibility:public modality:OPEN <> ($this:.Test, x:kotlin.String) returnType:kotlin.Unit + FUN DELEGATED_MEMBER name:takeNotNull visibility:public modality:OPEN <> ($this:.Test, x:@[EnhancedNullability] kotlin.String) returnType:kotlin.Unit overridden: - public abstract fun takeNotNull (x: kotlin.String): kotlin.Unit declared in .J + public abstract fun takeNotNull (x: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .J $this: VALUE_PARAMETER name: type:.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 .J' type=kotlin.Unit origin=null + CALL 'public abstract fun takeNotNull (x: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .J' type=kotlin.Unit origin=null $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.J visibility:local [final]' type=.J origin=null receiver: GET_VAR ': .Test declared in .Test.takeNotNull' type=.Test origin=null - x: GET_VAR 'x: kotlin.String declared in .Test.takeNotNull' type=kotlin.String origin=null + x: GET_VAR 'x: @[EnhancedNullability] kotlin.String declared in .Test.takeNotNull' type=@[EnhancedNullability] kotlin.String origin=null FUN DELEGATED_MEMBER name:takeNullable visibility:public modality:OPEN <> ($this:.Test, x:kotlin.String?) returnType:kotlin.Unit overridden: public abstract fun takeNullable (x: kotlin.String?): kotlin.Unit declared in .J @@ -50,13 +50,13 @@ FILE fqName: fileName:/delegatedImplementationOfJavaInterface.kt $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.J visibility:local [final]' type=.J origin=null receiver: GET_VAR ': .Test declared in .Test.takeFlexible' type=.Test origin=null x: GET_VAR 'x: kotlin.String? declared in .Test.takeFlexible' type=kotlin.String? origin=null - FUN DELEGATED_MEMBER name:returnNotNull visibility:public modality:OPEN <> ($this:.Test) returnType:kotlin.String + FUN DELEGATED_MEMBER name:returnNotNull visibility:public modality:OPEN <> ($this:.Test) returnType:@[EnhancedNullability] kotlin.String overridden: - public abstract fun returnNotNull (): kotlin.String declared in .J + public abstract fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in .J $this: VALUE_PARAMETER name: type:.Test BLOCK_BODY - RETURN type=kotlin.Nothing from='public open fun returnNotNull (): kotlin.String declared in .Test' - CALL 'public abstract fun returnNotNull (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='public open fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in .Test' + CALL 'public abstract fun returnNotNull (): @[EnhancedNullability] kotlin.String declared in .J' type=@[EnhancedNullability] kotlin.String origin=null $this: GET_FIELD 'FIELD DELEGATE name:<$$delegate_0> type:.J visibility:local [final]' type=.J origin=null receiver: GET_VAR ': .Test declared in .Test.returnNotNull' type=.Test origin=null FUN DELEGATED_MEMBER name:returnNullable visibility:public modality:OPEN <> ($this:.Test) returnType:kotlin.String? diff --git a/compiler/testData/ir/irText/expressions/nullCheckOnGenericLambdaReturn.fir.txt b/compiler/testData/ir/irText/expressions/nullCheckOnGenericLambdaReturn.fir.txt index bdd3226308e..f02163b61dc 100644 --- a/compiler/testData/ir/irText/expressions/nullCheckOnGenericLambdaReturn.fir.txt +++ b/compiler/testData/ir/irText/expressions/nullCheckOnGenericLambdaReturn.fir.txt @@ -41,18 +41,18 @@ FILE fqName: fileName:/nullCheckOnGenericLambdaReturn.kt BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (): kotlin.String? declared in .test1' CALL 'public open fun foo (): kotlin.String? declared in .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 ' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public final fun checkT (fn: kotlin.Function0.checkT>): T of .checkT declared in ' type=kotlin.String origin=null - : kotlin.String - fn: FUN_EXPR type=kotlin.Function0 origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.String + RETURN type=kotlin.Nothing from='public final fun test2 (): @[EnhancedNullability] kotlin.String declared in ' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public final fun checkT (fn: kotlin.Function0.checkT>): T of .checkT declared in ' type=@[EnhancedNullability] kotlin.String origin=null + : @[EnhancedNullability] kotlin.String + fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String BLOCK_BODY - RETURN type=kotlin.Nothing from='local final fun (): kotlin.String declared in .test2' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun nnFoo (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='local final fun (): @[EnhancedNullability] kotlin.String declared in .test2' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public open fun nnFoo (): @[EnhancedNullability] kotlin.String declared in .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 ' @@ -63,15 +63,15 @@ FILE fqName: fileName:/nullCheckOnGenericLambdaReturn.kt BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (): kotlin.String? declared in .test3' CALL 'public open fun foo (): kotlin.String? declared in .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 ' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public final fun checkTAny (fn: kotlin.Function0.checkTAny>): T of .checkTAny declared in ' type=kotlin.String origin=null - : kotlin.String - fn: FUN_EXPR type=kotlin.Function0 origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.String + RETURN type=kotlin.Nothing from='public final fun test4 (): @[EnhancedNullability] kotlin.String declared in ' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public final fun checkTAny (fn: kotlin.Function0.checkTAny>): T of .checkTAny declared in ' type=@[EnhancedNullability] kotlin.String origin=null + : @[EnhancedNullability] kotlin.String + fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String BLOCK_BODY - RETURN type=kotlin.Nothing from='local final fun (): kotlin.String declared in .test4' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun nnFoo (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='local final fun (): @[EnhancedNullability] kotlin.String declared in .test4' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public open fun nnFoo (): @[EnhancedNullability] kotlin.String declared in .J' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/expressions/nullCheckOnLambdaReturn.fir.txt b/compiler/testData/ir/irText/expressions/nullCheckOnLambdaReturn.fir.txt index f0fffa4360e..aec0567ec79 100644 --- a/compiler/testData/ir/irText/expressions/nullCheckOnLambdaReturn.fir.txt +++ b/compiler/testData/ir/irText/expressions/nullCheckOnLambdaReturn.fir.txt @@ -85,5 +85,5 @@ FILE fqName: fileName:/nullCheckOnLambdaReturn.kt FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.Any? BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (): kotlin.Any? declared in .test6' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun nnFoo (): kotlin.String declared in .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 .J' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.fir.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.fir.txt index 47f8abe6f03..2ce0a6f5add 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.fir.txt @@ -5,51 +5,51 @@ FILE fqName: 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 ' 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 .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 .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 .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 .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 ' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='public final fun testReturnValue (): @[EnhancedNullability] kotlin.String declared in ' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in .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 .J' type=kotlin.String origin=null - FUN DEFAULT_PROPERTY_ACCESSOR name: 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 .J' type=@[EnhancedNullability] kotlin.String origin=null + FUN DEFAULT_PROPERTY_ACCESSOR name: 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 (): kotlin.String declared in ' - 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 (): @[EnhancedNullability] kotlin.String declared in ' + 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: visibility:public modality:FINAL <> () returnType:kotlin.String + FUN name: 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 (): kotlin.String declared in ' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='public final fun (): @[EnhancedNullability] kotlin.String declared in ' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in .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 .J' type=kotlin.Unit origin=null + CALL 'public open fun use (s: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .J' type=kotlin.Unit origin=null s: CALL 'public open fun nullString (): kotlin.String? declared in .J' type=kotlin.String? origin=null - CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in .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 .J' type=kotlin.String origin=null + CALL 'public open fun use (s: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .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 .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 .J' type=kotlin.String? origin=null - CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in .J' type=kotlin.Unit origin=null + CALL 'public open fun use (s: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .J' type=kotlin.Unit origin=null s: GET_VAR 'val ns: kotlin.String? [val] declared in .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 .J' type=kotlin.String origin=null - CALL 'public open fun use (s: kotlin.String): kotlin.Unit declared in .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 .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 .J' type=@[EnhancedNullability] kotlin.String origin=null + CALL 'public open fun use (s: @[EnhancedNullability] kotlin.String): kotlin.Unit declared in .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 .testLocalVarUse' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt index dfa77283efe..d1148c6f48f 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInDestructuringAssignment.fir.txt @@ -117,15 +117,15 @@ FILE fqName: fileName:/enhancedNullabilityInDestructuringAssignment.kt $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:test1 visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY - VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:.P [val] - TYPE_OP type=.P origin=IMPLICIT_NOTNULL typeOperand=.P - CALL 'public open fun notNullP (): .P declared in .J' type=.P origin=null + VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:@[EnhancedNullability] .P [val] + TYPE_OP type=@[EnhancedNullability] .P origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] .P + CALL 'public open fun notNullP (): @[EnhancedNullability] .P declared in .J' type=@[EnhancedNullability] .P origin=null VAR name:x type:kotlin.Int [val] CALL 'public final fun component1 (): kotlin.Int [operator] declared in .P' type=kotlin.Int origin=null - $this: GET_VAR 'val tmp_0: .P [val] declared in .test1' type=.P origin=null + $this: GET_VAR 'val tmp_0: @[EnhancedNullability] .P [val] declared in .test1' type=@[EnhancedNullability] .P origin=null VAR name:y type:kotlin.Int [val] CALL 'public final fun component2 (): kotlin.Int [operator] declared in .P' type=kotlin.Int origin=null - $this: GET_VAR 'val tmp_0: .P [val] declared in .test1' type=.P origin=null + $this: GET_VAR 'val tmp_0: @[EnhancedNullability] .P [val] declared in .test1' type=@[EnhancedNullability] .P origin=null CALL 'public final fun use (x: kotlin.Any, y: kotlin.Any): kotlin.Unit declared in ' type=kotlin.Unit origin=null x: GET_VAR 'val x: kotlin.Int [val] declared in .test1' type=kotlin.Int origin=null y: GET_VAR 'val y: kotlin.Int [val] declared in .test1' type=kotlin.Int origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt index fafbbb8ac50..50826e6b84d 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullabilityInForLoop.fir.txt @@ -76,7 +76,7 @@ FILE fqName: fileName:/enhancedNullabilityInForLoop.kt $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<.P?> [val] declared in .testForInListUse' type=kotlin.collections.MutableIterator<.P?> origin=null CALL 'public final fun use (s: .P): kotlin.Unit declared in ' type=kotlin.Unit origin=null s: GET_VAR 'val x: .P? [val] declared in .testForInListUse' type=.P? origin=null - CALL 'public open fun use (s: .P): kotlin.Unit declared in .J' type=kotlin.Unit origin=null + CALL 'public open fun use (s: @[EnhancedNullability] .P): kotlin.Unit declared in .J' type=kotlin.Unit origin=null s: GET_VAR 'val x: .P? [val] declared in .testForInListUse' type=.P? origin=null FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:.J) returnType:kotlin.Unit VALUE_PARAMETER name:j index:0 type:.J @@ -95,7 +95,7 @@ FILE fqName: fileName:/enhancedNullabilityInForLoop.kt $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<.P?> [val] declared in .testForInArrayUse' type=kotlin.collections.Iterator<.P?> origin=null CALL 'public final fun use (s: .P): kotlin.Unit declared in ' type=kotlin.Unit origin=null s: GET_VAR 'val x: .P? [val] declared in .testForInArrayUse' type=.P? origin=null - CALL 'public open fun use (s: .P): kotlin.Unit declared in .J' type=kotlin.Unit origin=null + CALL 'public open fun use (s: @[EnhancedNullability] .P): kotlin.Unit declared in .J' type=kotlin.Unit origin=null s: GET_VAR 'val x: .P? [val] declared in .testForInArrayUse' type=.P? origin=null CLASS INTERFACE name:K modality:ABSTRACT visibility:public superTypes:[kotlin.Any] $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.K diff --git a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsT.fir.txt b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsT.fir.txt index 27e2274e6af..7132149f574 100644 --- a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsT.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsT.fir.txt @@ -9,11 +9,11 @@ FILE fqName: 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 (fn: kotlin.Function0.useT>): T of .useT declared in ' type=kotlin.String origin=null - : kotlin.String - fn: FUN_EXPR type=kotlin.Function0 origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.String + CALL 'public final fun useT (fn: kotlin.Function0.useT>): T of .useT declared in ' type=@[EnhancedNullability] kotlin.String origin=null + : @[EnhancedNullability] kotlin.String + fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String BLOCK_BODY - RETURN type=kotlin.Nothing from='local final fun (): kotlin.String declared in .testNoNullCheck' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='local final fun (): @[EnhancedNullability] kotlin.String declared in .testNoNullCheck' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in .J' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTAny.fir.txt b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTAny.fir.txt index f3b5c206b9b..0b23a275c83 100644 --- a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTAny.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTAny.fir.txt @@ -9,11 +9,11 @@ FILE fqName: 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 (fn: kotlin.Function0.useTAny>): T of .useTAny declared in ' type=kotlin.String origin=null - : kotlin.String - fn: FUN_EXPR type=kotlin.Function0 origin=LAMBDA - FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.String + CALL 'public final fun useTAny (fn: kotlin.Function0.useTAny>): T of .useTAny declared in ' type=@[EnhancedNullability] kotlin.String origin=null + : @[EnhancedNullability] kotlin.String + fn: FUN_EXPR type=kotlin.Function0<@[EnhancedNullability] kotlin.String> origin=LAMBDA + FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:@[EnhancedNullability] kotlin.String BLOCK_BODY - RETURN type=kotlin.Nothing from='local final fun (): kotlin.String declared in .testNoNullCheck' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .J' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='local final fun (): @[EnhancedNullability] kotlin.String declared in .testNoNullCheck' + TYPE_OP type=@[EnhancedNullability] kotlin.String origin=IMPLICIT_NOTNULL typeOperand=@[EnhancedNullability] kotlin.String + CALL 'public open fun notNullString (): @[EnhancedNullability] kotlin.String declared in .J' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTConstrained.fir.txt b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTConstrained.fir.txt index 85c41a3b06b..234116f4d99 100644 --- a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTConstrained.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTConstrained.fir.txt @@ -18,5 +18,5 @@ FILE fqName: fileName:/nnStringVsTConstrained.kt FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.String BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (): kotlin.String declared in .testWithNullCheck' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .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 .J' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXArray.fir.txt b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXArray.fir.txt index 51a43cd122d..8f4c8a65cc3 100644 --- a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXArray.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXArray.fir.txt @@ -18,5 +18,5 @@ FILE fqName: fileName:/nnStringVsTXArray.kt FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:java.io.Serializable BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (): java.io.Serializable declared in .testWithNullCheck' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .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 .J' type=@[EnhancedNullability] kotlin.String origin=null diff --git a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXString.fir.txt b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXString.fir.txt index cf8a95857f9..836c4198532 100644 --- a/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXString.fir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/nullCheckOnLambdaResult/nnStringVsTXString.fir.txt @@ -17,5 +17,5 @@ FILE fqName: fileName:/nnStringVsTXString.kt FUN LOCAL_FUNCTION_FOR_LAMBDA name: visibility:local modality:FINAL <> () returnType:kotlin.String BLOCK_BODY RETURN type=kotlin.Nothing from='local final fun (): kotlin.String declared in .testWithNullCheck' - TYPE_OP type=kotlin.String origin=IMPLICIT_NOTNULL typeOperand=kotlin.String - CALL 'public open fun notNullString (): kotlin.String declared in .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 .J' type=@[EnhancedNullability] kotlin.String origin=null