From eec3263518abcc29b9d6d9ba41152b44f47521cc Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Wed, 8 Apr 2020 12:13:49 +0200 Subject: [PATCH] [psi2ir] Properly link corresponding property symbols. Do not rely on PatchDeclarationParents to do so. --- .../kotlin/psi2ir/generators/ClassGenerator.kt | 3 +++ .../psi2ir/generators/DelegatedPropertyGenerator.kt | 2 ++ .../kotlin/psi2ir/generators/PropertyGenerator.kt | 12 ++++++++++++ .../kotlin/ir/util/PatchDeclarationParents.kt | 13 ------------- 4 files changed, 17 insertions(+), 13 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index f19928ae083..155e98e1fd2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -275,6 +275,9 @@ class ClassGenerator( if (delegatedDescriptor.isVar) { irProperty.setter = generateDelegatedFunction(irDelegate, delegatedDescriptor.setter!!, delegateToDescriptor.setter!!) } + + irProperty.linkCorrespondingPropertySymbol() + return irProperty } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt index e04ba0a765a..77f605508d7 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/DelegatedPropertyGenerator.kt @@ -86,6 +86,8 @@ class DelegatedPropertyGenerator(declarationGenerator: DeclarationGenerator) : D } } + irProperty.linkCorrespondingPropertySymbol() + return irProperty } diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt index 2e3c5603a71..c756786dd80 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/PropertyGenerator.kt @@ -76,6 +76,8 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio irProperty.setter = FunctionGenerator(declarationGenerator).generateDefaultAccessorForPrimaryConstructorParameter(setter, ktParameter) } + + irProperty.linkCorrespondingPropertySymbol() } } @@ -133,6 +135,8 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio irProperty.getter = generateGetterIfRequired(ktProperty, propertyDescriptor) irProperty.setter = generateSetterIfRequired(ktProperty, propertyDescriptor) + + irProperty.linkCorrespondingPropertySymbol() } fun generateFakeOverrideProperty(propertyDescriptor: PropertyDescriptor, ktElement: KtPureElement): IrProperty? { @@ -158,6 +162,7 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio this.setter = propertyDescriptor.setter?.let { FunctionGenerator(declarationGenerator).generateFakeOverrideFunction(it, ktElement) } + this.linkCorrespondingPropertySymbol() } } @@ -189,3 +194,10 @@ class PropertyGenerator(declarationGenerator: DeclarationGenerator) : Declaratio } } +internal fun IrProperty.linkCorrespondingPropertySymbol() { + backingField?.correspondingPropertySymbol = symbol + getter?.correspondingPropertySymbol = symbol + setter?.correspondingPropertySymbol = symbol +} + + diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt index 2e2b4971cda..3cb11e459b0 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/PatchDeclarationParents.kt @@ -53,19 +53,6 @@ class PatchDeclarationParentsVisitor() : IrElementVisitorVoid { } } - override fun visitProperty(declaration: IrProperty) { - declaration.getter?.let { - it.correspondingPropertySymbol = declaration.symbol - } - declaration.setter?.let { - it.correspondingPropertySymbol = declaration.symbol - } - declaration.backingField?.let { - it.correspondingPropertySymbol = declaration.symbol - } - super.visitProperty(declaration) - } - private fun patchParent(declaration: IrDeclaration) { declaration.parent = declarationParentsStack.peekFirst() }