From 827494abbe7a84f0d46b5cb544c8a50fa2a7b911 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Mon, 24 Sep 2018 15:30:11 +0300 Subject: [PATCH] JVM_IR. Mostly remove descriptors from ConstAndJvmFieldPropertiesLowering --- .../ConstAndJvmFieldPropertiesLowering.kt | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstAndJvmFieldPropertiesLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstAndJvmFieldPropertiesLowering.kt index ee20b5514ce..dd3ec5268ef 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstAndJvmFieldPropertiesLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/ConstAndJvmFieldPropertiesLowering.kt @@ -18,9 +18,13 @@ import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrConst import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrGetterCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl +import org.jetbrains.kotlin.ir.expressions.impl.IrSetterCallImpl +import org.jetbrains.kotlin.ir.util.hasAnnotation import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid +import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor class ConstAndJvmFieldPropertiesLowering(val context: JvmBackendContext) : IrElementTransformerVoid(), FileLoweringPass { @@ -45,40 +49,38 @@ class ConstAndJvmFieldPropertiesLowering(val context: JvmBackendContext) : IrEle (irProperty.backingField?.initializer?.expression as? IrConst<*>)?.let { return it } } - val descriptor = expression.descriptor as? PropertyAccessorDescriptor ?: return super.visitCall(expression) - - val property = descriptor.correspondingProperty - if (JvmCodegenUtil.isConstOrHasJvmFieldAnnotation(property)) { - return if (descriptor is PropertyGetterDescriptor) { - substituteGetter(descriptor, expression) + if (irProperty.backingField?.hasAnnotation(JVM_FIELD_ANNOTATION_FQ_NAME) == true) { + return if (expression is IrGetterCallImpl) { + substituteGetter(irProperty, expression) } else { - substituteSetter(descriptor, expression) + assert(expression is IrSetterCallImpl) + substituteSetter(irProperty, expression) } - } else if (property is SyntheticJavaPropertyDescriptor) { + } else if (irProperty.descriptor is SyntheticJavaPropertyDescriptor) { expression.dispatchReceiver = expression.extensionReceiver expression.extensionReceiver = null } return super.visitCall(expression) } - private fun substituteSetter(descriptor: PropertyAccessorDescriptor, expression: IrCall): IrSetFieldImpl { + private fun substituteSetter(irProperty: IrProperty, expression: IrCall): IrSetFieldImpl { return IrSetFieldImpl( expression.startOffset, expression.endOffset, - context.ir.symbols.externalSymbolTable.referenceField(descriptor.correspondingProperty), + irProperty.backingField!!.symbol, expression.dispatchReceiver, - expression.getValueArgument(descriptor.valueParameters.lastIndex)!!, + expression.getValueArgument(expression.symbol.owner.valueParameters.lastIndex)!!, expression.type, expression.origin, expression.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) } ) } - private fun substituteGetter(descriptor: PropertyGetterDescriptor, expression: IrCall): IrExpression { + private fun substituteGetter(irProperty: IrProperty, expression: IrCall): IrExpression { return IrGetFieldImpl( expression.startOffset, expression.endOffset, - context.ir.symbols.externalSymbolTable.referenceField(descriptor.correspondingProperty), + irProperty.backingField!!.symbol, expression.type, expression.dispatchReceiver, expression.origin,