From 2a263eca655c88ac49b70c522a0d9225f29ea544 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Mon, 22 Nov 2021 17:51:07 +0300 Subject: [PATCH] FIR2IR strip annotations from IrConst type --- .../jetbrains/kotlin/fir/backend/ConversionUtils.kt | 3 ++- .../src/org/jetbrains/kotlin/ir/types/irTypes.kt | 12 ++++++++++++ .../enhancedNullability.kt | 2 -- .../specialFunctions/intPlus.kt | 3 --- .../codegen/box/typeMapping/enhancedPrimitives.kt | 2 -- .../types/nullChecks/enhancedNullability.ir.txt | 2 ++ .../irText/types/nullChecks/enhancedNullability.kt | 2 ++ .../types/nullChecks/enhancedNullability.kt.txt | 2 ++ 8 files changed, 20 insertions(+), 8 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt index d6c58d269f6..8b3a48491bf 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/ConversionUtils.kt @@ -261,7 +261,8 @@ fun FirConstExpression.toIrConst(irType: IrType): IrConst { } as T ?: value IrConstImpl( startOffset, endOffset, - irType, + // Strip all annotations (including special annotations such as @EnhancedNullability) from constant type + irType.removeAnnotations(), kind, value ) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt index 14d22530c68..42068c31414 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt @@ -71,6 +71,18 @@ fun IrType.removeAnnotations(predicate: (IrConstructorCall) -> Boolean): IrType this } +fun IrType.removeAnnotations(): IrType = + when (this) { + is IrSimpleType -> + toBuilder().apply { + annotations = emptyList() + }.buildSimpleType() + is IrDynamicType -> + IrDynamicTypeImpl(null, emptyList(), Variance.INVARIANT) + else -> + this + } + val IrType.classifierOrFail: IrClassifierSymbol get() = cast().classifier diff --git a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/enhancedNullability.kt b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/enhancedNullability.kt index 4f11ac76177..825d99161cb 100644 --- a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/enhancedNullability.kt +++ b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/enhancedNullability.kt @@ -1,6 +1,4 @@ // TARGET_BACKEND: JVM -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: AE: Argument 1: expected R, but found I at INVOKEINTERFACE Sam.get // JVM_TARGET: 1.8 // SAM_CONVERSIONS: INDY diff --git a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/intPlus.kt b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/intPlus.kt index 8fd27460161..a58db2e2f45 100644 --- a/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/intPlus.kt +++ b/compiler/testData/codegen/box/invokedynamic/sam/functionRefToJavaInterface/specialFunctions/intPlus.kt @@ -1,9 +1,6 @@ // TARGET_BACKEND: JVM // IGNORE_BACKEND: ANDROID // ^ uses API not implemented on minSdkVersion 19 -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: fir2ir creates an IrConst(value=2, type=@EnhancedNullability Int), which -// the backend generates as an int instead of Integer // WITH_STDLIB // JVM_TARGET: 1.8 // FULL_JDK diff --git a/compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt b/compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt index b88a99018cf..193dea1204f 100644 --- a/compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt +++ b/compiler/testData/codegen/box/typeMapping/enhancedPrimitives.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR -// FIR status: AnalyzerException: Argument 1: expected R, but found I // TARGET_BACKEND: JVM // FILE: J.java diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.ir.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.ir.txt index 43519382280..b4b5cf6e179 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.ir.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.ir.txt @@ -40,6 +40,8 @@ FILE fqName: fileName:/enhancedNullability.kt s: CALL 'public open fun nullString (): @[FlexibleNullability] kotlin.String? declared in .J' type=@[FlexibleNullability] kotlin.String? 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 notNullString (): @[EnhancedNullability] kotlin.String declared in .J' type=@[EnhancedNullability] kotlin.String origin=null + CALL 'public open fun use (x: @[EnhancedNullability] kotlin.Int): kotlin.Unit declared in .J' type=kotlin.Unit origin=null + x: CONST Int type=kotlin.Int value=42 FUN name:testLocalVarUse visibility:public modality:FINAL <> () returnType:kotlin.Unit BLOCK_BODY VAR name:ns type:@[FlexibleNullability] kotlin.String? [val] diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt index cb7d5e99e87..0a70b3894ca 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt @@ -21,6 +21,7 @@ val testGlobalValGetter get() = J.notNullString() fun testJUse() { J.use(J.nullString()) J.use(J.notNullString()) + J.use(42) } fun testLocalVarUse() { @@ -36,6 +37,7 @@ import org.jetbrains.annotations.*; public class J { public static void use(@NotNull String s) {} + public static void use(@NotNull Integer x) {} public static String nullString() { return null; } public static @NotNull String notNullString() { return null; } } diff --git a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt.txt b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt.txt index 6cd792c3357..d5d25adc060 100644 --- a/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt.txt +++ b/compiler/testData/ir/irText/types/nullChecks/enhancedNullability.kt.txt @@ -25,6 +25,7 @@ val testGlobalValGetter: String fun testJUse() { use(s = nullString()) use(s = notNullString()) + use(x = 42) } fun testLocalVarUse() { @@ -33,3 +34,4 @@ fun testLocalVarUse() { val nns: String = notNullString() /*!! String */ use(s = nns) } +