[FIR] KT-57104: Preserve @JvmName on fake-override accessors
Otherwise, when we come to `ClassCodegen.kt:173 for `GradleActionTest` and check `FUN FAKE_OVERRIDE name:<get-project>`, we then go to `JvmSignatureClashDetector.kt:37`, and call `mapRawSignature(overriddenFunction)` which ignores the original `@JvmName`. It does so because it relies on the property copy which forgets to copy the getter, but `@get:JvmName` is stored in it. Extra when-branches for `FAKE_OVERRIDE` are needed, because otherwise the annotations would not be copied in `Fir2IrDeclarationStorage.kt:723`. Extra when-branches for `DELEGATED_MEMBER` are needed, because otherwise the generated IR changes in some tests. For example, see: `FirLightTreeIrTextTestGenerated.Declarations.testKt35550`. The `assumesBackingField`-related change is backed by the `FirLightTreeIrTextTestGenerated.Stubs.testJavaEnum` test. `this.body = null` ensures the resulting IR matches K1. The change in `FirImplicitBodyResolve.kt` is needed, because otherwise the bootstrap compiler fails at `:compiler:frontend:compileKotlin`, but I didn't come up with a smaller test for it. If we don't make an explicit accessor copy, then when we later create a `Fir2IrLazyPropertyAccessor` for the fake override getter, it's `fir` will be a reference to the `FirProperty`, not `FirPropertyAccessor`. That's why `DumpIrTreeVisitor` will render `IntrinsicConstEvaluation` as a getter annotation as well. `FirPsiIrTextTestGenerated.testDelegatedGenericImplementation` renders type parameters from `<get-x>`, because when assigning `extensionReceiverParameter` of the setter `<set-x>` we come to `Fir2IrClassifierStorage.kt:638`, and in this cache there's the parameter with the `<get-x>` parent. Note that `typeContext.origin == DEFAULT` in `getCachedIrTypeParameter`. It's `DEFAULT` because at the line `Fir2IrDeclarationStorage.kt:335` the `function` variable is `null` (because there's no setter). The change in `declarationAttributes.kt` is backed by the `FirPsiIrTextTestGenerated.testKt45853` test. ^KT-57104 Fixed ^KT-57432 Fixed Merge-request: KT-MR-9210 Merged-by: Nikolay Lunyak <Nikolay.Lunyak@jetbrains.com>
This commit is contained in:
committed by
Space Team
parent
9a4a3d1f49
commit
7b04201e77
+6
-6
@@ -94,20 +94,20 @@ FILE fqName:<root> fileName:/delegatedGenericImplementation.kt
|
||||
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.IBase<E of <root>.Test1> visibility:private [final]' type=<root>.IBase<E of <root>.Test1> origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Test1<E of <root>.Test1> declared in <root>.Test1.<get-x>' type=<root>.Test1<E of <root>.Test1> origin=null
|
||||
$receiver: GET_VAR '<this>: kotlin.collections.List<D of <root>.Test1.<get-x>> declared in <root>.Test1.<get-x>' type=kotlin.collections.List<D of <root>.Test1.<get-x>> origin=null
|
||||
FUN DELEGATED_MEMBER name:<set-x> visibility:public modality:OPEN <D> ($this:<root>.Test1<E of <root>.Test1>, $receiver:kotlin.collections.List<D of <root>.Test1.<get-x>>, <set-?>:D of <root>.Test1.<set-x>?) returnType:kotlin.Unit
|
||||
FUN DELEGATED_MEMBER name:<set-x> visibility:public modality:OPEN <D> ($this:<root>.Test1<E of <root>.Test1>, $receiver:kotlin.collections.List<D of <root>.Test1.<set-x>>, <set-?>:D of <root>.Test1.<set-x>?) returnType:kotlin.Unit
|
||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:x visibility:public modality:OPEN [var]
|
||||
overridden:
|
||||
public abstract fun <set-x> <D> (<set-?>: D of <root>.IBase.<set-x>?): kotlin.Unit declared in <root>.IBase
|
||||
TYPE_PARAMETER name:D index:0 variance: superTypes:[kotlin.Any?] reified:false
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Test1<E of <root>.Test1>
|
||||
$receiver: VALUE_PARAMETER name:<this> type:kotlin.collections.List<D of <root>.Test1.<get-x>>
|
||||
$receiver: VALUE_PARAMETER name:<this> type:kotlin.collections.List<D of <root>.Test1.<set-x>>
|
||||
VALUE_PARAMETER name:<set-?> index:0 type:D of <root>.Test1.<set-x>?
|
||||
BLOCK_BODY
|
||||
CALL 'public abstract fun <set-x> <D> (<set-?>: D of <root>.IBase.<set-x>?): kotlin.Unit declared in <root>.IBase' type=kotlin.Unit origin=null
|
||||
<D>: D of <root>.Test1.<set-x>
|
||||
$this: GET_FIELD 'FIELD DELEGATE name:$$delegate_0 type:<root>.IBase<E of <root>.Test1> visibility:private [final]' type=<root>.IBase<E of <root>.Test1> origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Test1<E of <root>.Test1> declared in <root>.Test1.<set-x>' type=<root>.Test1<E of <root>.Test1> origin=null
|
||||
$receiver: GET_VAR '<this>: kotlin.collections.List<D of <root>.Test1.<get-x>> declared in <root>.Test1.<set-x>' type=kotlin.collections.List<D of <root>.Test1.<get-x>> origin=null
|
||||
$receiver: GET_VAR '<this>: kotlin.collections.List<D of <root>.Test1.<set-x>> declared in <root>.Test1.<set-x>' type=kotlin.collections.List<D of <root>.Test1.<set-x>> origin=null
|
||||
<set-?>: GET_VAR '<set-?>: D of <root>.Test1.<set-x>? declared in <root>.Test1.<set-x>' type=D of <root>.Test1.<set-x>? origin=null
|
||||
FIELD DELEGATE name:$$delegate_0 type:<root>.IBase<E of <root>.Test1> visibility:private [final]
|
||||
EXPRESSION_BODY
|
||||
@@ -180,20 +180,20 @@ FILE fqName:<root> fileName:/delegatedGenericImplementation.kt
|
||||
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:j type:<root>.IBase<kotlin.String> visibility:private' type=<root>.IBase<kotlin.String> origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.<get-x>' type=<root>.Test2 origin=null
|
||||
$receiver: GET_VAR '<this>: kotlin.collections.List<D of <root>.Test2.<get-x>> declared in <root>.Test2.<get-x>' type=kotlin.collections.List<D of <root>.Test2.<get-x>> origin=null
|
||||
FUN DELEGATED_MEMBER name:<set-x> visibility:public modality:OPEN <D> ($this:<root>.Test2, $receiver:kotlin.collections.List<D of <root>.Test2.<get-x>>, <set-?>:D of <root>.Test2.<set-x>?) returnType:kotlin.Unit
|
||||
FUN DELEGATED_MEMBER name:<set-x> visibility:public modality:OPEN <D> ($this:<root>.Test2, $receiver:kotlin.collections.List<D of <root>.Test2.<set-x>>, <set-?>:D of <root>.Test2.<set-x>?) returnType:kotlin.Unit
|
||||
correspondingProperty: PROPERTY DELEGATED_MEMBER name:x visibility:public modality:OPEN [var]
|
||||
overridden:
|
||||
public abstract fun <set-x> <D> (<set-?>: D of <root>.IBase.<set-x>?): kotlin.Unit declared in <root>.IBase
|
||||
TYPE_PARAMETER name:D index:0 variance: superTypes:[kotlin.Any?] reified:false
|
||||
$this: VALUE_PARAMETER name:<this> type:<root>.Test2
|
||||
$receiver: VALUE_PARAMETER name:<this> type:kotlin.collections.List<D of <root>.Test2.<get-x>>
|
||||
$receiver: VALUE_PARAMETER name:<this> type:kotlin.collections.List<D of <root>.Test2.<set-x>>
|
||||
VALUE_PARAMETER name:<set-?> index:0 type:D of <root>.Test2.<set-x>?
|
||||
BLOCK_BODY
|
||||
CALL 'public abstract fun <set-x> <D> (<set-?>: D of <root>.IBase.<set-x>?): kotlin.Unit declared in <root>.IBase' type=kotlin.Unit origin=null
|
||||
<D>: D of <root>.Test2.<set-x>
|
||||
$this: GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:j type:<root>.IBase<kotlin.String> visibility:private' type=<root>.IBase<kotlin.String> origin=null
|
||||
receiver: GET_VAR '<this>: <root>.Test2 declared in <root>.Test2.<set-x>' type=<root>.Test2 origin=null
|
||||
$receiver: GET_VAR '<this>: kotlin.collections.List<D of <root>.Test2.<get-x>> declared in <root>.Test2.<set-x>' type=kotlin.collections.List<D of <root>.Test2.<get-x>> origin=null
|
||||
$receiver: GET_VAR '<this>: kotlin.collections.List<D of <root>.Test2.<set-x>> declared in <root>.Test2.<set-x>' type=kotlin.collections.List<D of <root>.Test2.<set-x>> origin=null
|
||||
<set-?>: GET_VAR '<set-?>: D of <root>.Test2.<set-x>? declared in <root>.Test2.<set-x>' type=D of <root>.Test2.<set-x>? origin=null
|
||||
PROPERTY name:j visibility:public modality:FINAL [var]
|
||||
FIELD PROPERTY_BACKING_FIELD name:j type:<root>.IBase<kotlin.String> visibility:private
|
||||
|
||||
Reference in New Issue
Block a user