From d472b6c71c0e4428fa73ec7406e1166725b182fd Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Fri, 2 Jul 2021 16:32:15 +0300 Subject: [PATCH] [Psi2Ir] Replace custom IrProperty node with common one --- .../ReflectionReferencesGenerator.kt | 92 +++++-------------- .../provideDelegate/javaDelegate.txt | 4 +- 2 files changed, 24 insertions(+), 72 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt index c9effdc82d5..a7be7e71cfc 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ReflectionReferencesGenerator.kt @@ -18,9 +18,11 @@ package org.jetbrains.kotlin.psi2ir.generators import org.jetbrains.kotlin.builtins.* import org.jetbrains.kotlin.descriptors.* -import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET -import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource +import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin +import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction +import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.* @@ -430,73 +432,6 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St val setterSymbol: IrSimpleFunctionSymbol? ) - private class IrSyntheticJavaProperty( - @property:ObsoleteDescriptorBasedAPI - override val descriptor: SyntheticJavaPropertyDescriptor, - override val symbol: IrPropertySymbol, - private val getterSymbol: IrSimpleFunctionSymbol, - private val setterSymbol: IrSimpleFunctionSymbol?, - override val factory: IrFactory - ) : IrProperty() { - - init { - symbol.bind(this) - } - - override val isVar: Boolean - get() = descriptor.isVar - override val isConst: Boolean - get() = descriptor.isConst - override val isLateinit: Boolean - get() = descriptor.isLateInit - override val isDelegated: Boolean - get() = descriptor.isDelegated - override val isExpect: Boolean - get() = descriptor.isExpect - override val isFakeOverride: Boolean - get() = false - override var overriddenSymbols: List - get() = emptyList() - set(_) {} - override var backingField: IrField? - get() = null - set(_) {} - override var getter: IrSimpleFunction? - get() = getterSymbol.owner.also { it.correspondingPropertySymbol = symbol } - set(_) {} - override var setter: IrSimpleFunction? - get() = setterSymbol?.owner?.also { it.correspondingPropertySymbol = symbol } - set(_) {} - override val startOffset: Int - get() = UNDEFINED_OFFSET - override val endOffset: Int - get() = UNDEFINED_OFFSET - override var origin: IrDeclarationOrigin - get() = IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE - set(_) {} - override var parent: IrDeclarationParent - get() = getterSymbol.owner.parent - set(_) {} - override var annotations: List - get() = emptyList() - set(_) {} - override val isExternal: Boolean - get() = descriptor.isExternal - override val name: Name - get() = descriptor.name - override val modality: Modality - get() = descriptor.modality - override var visibility: DescriptorVisibility - get() = descriptor.visibility - set(_) {} - override var metadata: MetadataSource? = DescriptorMetadataSource.Property(descriptor) - override var attributeOwnerId: IrAttributeContainer - get() = this - set(_) {} - override val containerSource: DeserializedContainerSource? - get() = null - } - private fun resolvePropertySymbol(descriptor: PropertyDescriptor, mutable: Boolean): DelegatedPropertySymbols { val symbol = context.symbolTable.referenceProperty(descriptor) val syntheticJavaProperty = context.extensions.unwrapSyntheticJavaProperty(descriptor) @@ -512,7 +447,24 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St if (!symbol.isBound) { val offset = UNDEFINED_OFFSET context.symbolTable.declareProperty(offset, offset, IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE, descriptor) { - IrSyntheticJavaProperty(descriptor, it, getterSymbol, setterSymbol, context.irFactory) + context.irFactory.createProperty( + offset, + offset, + IrDeclarationOrigin.SYNTHETIC_JAVA_PROPERTY_DELEGATE, + symbol, + descriptor.name, + descriptor.visibility, + descriptor.modality, + descriptor.isVar, + descriptor.isConst, + descriptor.isLateInit, + descriptor.isDelegated, + descriptor.isExternal, + descriptor.isExpect, + isFakeOverride = false + ).also { + it.parent = scope.getLocalDeclarationParent() + } } } return DelegatedPropertySymbols(symbol, getterSymbol, setterSymbol) diff --git a/compiler/testData/ir/irText/declarations/provideDelegate/javaDelegate.txt b/compiler/testData/ir/irText/declarations/provideDelegate/javaDelegate.txt index b26968d25a3..351f7b388a3 100644 --- a/compiler/testData/ir/irText/declarations/provideDelegate/javaDelegate.txt +++ b/compiler/testData/ir/irText/declarations/provideDelegate/javaDelegate.txt @@ -2,7 +2,7 @@ FILE fqName:k fileName:/box.kt PROPERTY name:p1 visibility:public modality:FINAL [delegated,var] FIELD PROPERTY_DELEGATE name:p1$delegate type:kotlin.reflect.KMutableProperty0<@[FlexibleNullability] kotlin.String?> visibility:private [final,static] EXPRESSION_BODY - PROPERTY_REFERENCE 'public final foo: @[FlexibleNullability] kotlin.String? [var]' field=null getter='public open fun getFoo (): @[FlexibleNullability] kotlin.String? declared in .J' setter='public open fun setFoo (s: @[FlexibleNullability] kotlin.String?): kotlin.Unit declared in .J' type=kotlin.reflect.KMutableProperty0<@[FlexibleNullability] kotlin.String?> origin=null + PROPERTY_REFERENCE 'public final foo [var]' field=null getter='public open fun getFoo (): @[FlexibleNullability] kotlin.String? declared in .J' setter='public open fun setFoo (s: @[FlexibleNullability] kotlin.String?): kotlin.Unit declared in .J' type=kotlin.reflect.KMutableProperty0<@[FlexibleNullability] kotlin.String?> origin=null $receiver: CONSTRUCTOR_CALL 'public constructor () [primary] declared in .J' type=.J origin=null FUN DELEGATED_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:@[FlexibleNullability] kotlin.String? correspondingProperty: PROPERTY name:p1 visibility:public modality:FINAL [delegated,var] @@ -27,7 +27,7 @@ FILE fqName:k fileName:/box.kt PROPERTY name:p2 visibility:public modality:FINAL [delegated,var] FIELD PROPERTY_DELEGATE name:p2$delegate type:kotlin.reflect.KMutableProperty0<@[FlexibleNullability] kotlin.String?> visibility:private [final,static] EXPRESSION_BODY - PROPERTY_REFERENCE 'public final foo: @[FlexibleNullability] kotlin.String? [var]' field=null getter='public open fun getFoo (): @[FlexibleNullability] kotlin.String? declared in .J' setter='public open fun setFoo (s: @[FlexibleNullability] kotlin.String?): kotlin.Unit declared in .J' type=kotlin.reflect.KMutableProperty0<@[FlexibleNullability] kotlin.String?> origin=null + PROPERTY_REFERENCE 'public final foo [var]' field=null getter='public open fun getFoo (): @[FlexibleNullability] kotlin.String? declared in .J' setter='public open fun setFoo (s: @[FlexibleNullability] kotlin.String?): kotlin.Unit declared in .J' type=kotlin.reflect.KMutableProperty0<@[FlexibleNullability] kotlin.String?> origin=null $receiver: CONSTRUCTOR_CALL 'public constructor () [primary] declared in .J' type=.J origin=null FUN DELEGATED_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:@[FlexibleNullability] kotlin.String? correspondingProperty: PROPERTY name:p2 visibility:public modality:FINAL [delegated,var]