From ec93e5886aebcf0bd973a9d9fa39c292525fce7a Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Thu, 10 Sep 2020 14:59:51 +0300 Subject: [PATCH] [FIR2IR] Fix generation of accessors' extension receiver (f/o case) --- .../jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt | 4 +++- .../codegen/box/bridges/bridgeInInterfaceWithProperties.kt | 1 - compiler/testData/codegen/box/delegation/genericProperty.kt | 2 -- .../codegen/box/extensionProperties/nonAbstractInInterface.kt | 1 - .../box/jvm8/defaults/bridgeInInterfaceWithProperties2.kt | 1 - .../box/jvm8/defaults/noDefaultImpls/specialization/basic.kt | 1 - .../testData/ir/irText/expressions/useImportedMember.fir.txt | 3 ++- 7 files changed, 5 insertions(+), 8 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 1e508454762..e1705822ed5 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -304,7 +304,9 @@ class Fir2IrDeclarationStorage( with(classifierStorage) { val thisOrigin = IrDeclarationOrigin.DEFINED if (function !is FirConstructor) { - val receiverTypeRef = if (function !is FirPropertyAccessor) function?.receiverTypeRef else parentPropertyReceiverType + val receiverTypeRef = + if (function !is FirPropertyAccessor && function != null) function.receiverTypeRef + else parentPropertyReceiverType if (receiverTypeRef != null) { extensionReceiverParameter = receiverTypeRef.convertWithOffsets { startOffset, endOffset -> declareThisReceiverParameter( diff --git a/compiler/testData/codegen/box/bridges/bridgeInInterfaceWithProperties.kt b/compiler/testData/codegen/box/bridges/bridgeInInterfaceWithProperties.kt index f6ae60dfe71..40e06cdc0e9 100644 --- a/compiler/testData/codegen/box/bridges/bridgeInInterfaceWithProperties.kt +++ b/compiler/testData/codegen/box/bridges/bridgeInInterfaceWithProperties.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME // FULL_JDK diff --git a/compiler/testData/codegen/box/delegation/genericProperty.kt b/compiler/testData/codegen/box/delegation/genericProperty.kt index f61a6a6e331..adeb02c93c5 100644 --- a/compiler/testData/codegen/box/delegation/genericProperty.kt +++ b/compiler/testData/codegen/box/delegation/genericProperty.kt @@ -1,5 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR - interface I { val T.id: T get() = this diff --git a/compiler/testData/codegen/box/extensionProperties/nonAbstractInInterface.kt b/compiler/testData/codegen/box/extensionProperties/nonAbstractInInterface.kt index 23d51748a54..d2f6904dbd7 100644 --- a/compiler/testData/codegen/box/extensionProperties/nonAbstractInInterface.kt +++ b/compiler/testData/codegen/box/extensionProperties/nonAbstractInInterface.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface I { val String.foo: String get() = this + ";" + bar() diff --git a/compiler/testData/codegen/box/jvm8/defaults/bridgeInInterfaceWithProperties2.kt b/compiler/testData/codegen/box/jvm8/defaults/bridgeInInterfaceWithProperties2.kt index efb2e27849c..10a52ecbe10 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/bridgeInInterfaceWithProperties2.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/bridgeInInterfaceWithProperties2.kt @@ -1,5 +1,4 @@ // !JVM_DEFAULT_MODE: enable -// IGNORE_BACKEND_FIR: JVM_IR // TARGET_BACKEND: JVM // IGNORE_BACKEND: ANDROID // JVM_TARGET: 1.8 diff --git a/compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/specialization/basic.kt b/compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/specialization/basic.kt index 126e3a25111..bf86566fdba 100644 --- a/compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/specialization/basic.kt +++ b/compiler/testData/codegen/box/jvm8/defaults/noDefaultImpls/specialization/basic.kt @@ -1,7 +1,6 @@ // TARGET_BACKEND: JVM // !JVM_DEFAULT_MODE: all // JVM_TARGET: 1.8 -// IGNORE_BACKEND_FIR: JVM_IR interface Foo { fun test(p: T) = p val T.prop: T diff --git a/compiler/testData/ir/irText/expressions/useImportedMember.fir.txt b/compiler/testData/ir/irText/expressions/useImportedMember.fir.txt index 87907acdc09..8f552817f4f 100644 --- a/compiler/testData/ir/irText/expressions/useImportedMember.fir.txt +++ b/compiler/testData/ir/irText/expressions/useImportedMember.fir.txt @@ -124,12 +124,13 @@ FILE fqName: fileName:/useImportedMember.kt RETURN type=kotlin.Nothing from='public final fun (): T of .C. declared in .C' GET_VAR ': T of .C. declared in .C.' type=T of .C. origin=null PROPERTY FAKE_OVERRIDE name:fromClass visibility:public modality:FINAL [fake_override,val] - FUN FAKE_OVERRIDE name: visibility:public modality:FINAL ($this:.BaseClass) returnType:T of .C. [fake_override] + FUN FAKE_OVERRIDE name: visibility:public modality:FINAL ($this:.BaseClass, $receiver:T of .C.) returnType:T of .C. [fake_override] correspondingProperty: PROPERTY FAKE_OVERRIDE name:fromClass visibility:public modality:FINAL [fake_override,val] overridden: public final fun (): T of .BaseClass. declared in .BaseClass TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] $this: VALUE_PARAMETER name: type:.BaseClass + $receiver: VALUE_PARAMETER name: type:T of .C. FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any