From 785eb83822c4c291e0ada4831b2aa35d4f6f92da Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 12 Jan 2022 23:11:00 +0100 Subject: [PATCH] IR: refactor IrMemberAccessExpression internals The idea is to keep the subclasses as simple as possible, to simplify transition to auto-generated IR. Co-authored-by: mcpiroman --- .../jetbrains/kotlin/ir/expressions/IrCall.kt | 7 +-- .../ir/expressions/IrCallableReference.kt | 2 +- .../ir/expressions/IrConstructorCall.kt | 5 +-- .../IrDelegatingConstructorCall.kt | 5 +-- .../ir/expressions/IrEnumConstructorCall.kt | 5 +-- .../expressions/IrFunctionAccessExpression.kt | 44 +------------------ .../ir/expressions/IrFunctionReference.kt | 6 ++- .../IrLocalDelegatedPropertyReference.kt | 5 +-- .../expressions/IrMemberAccessExpression.kt | 39 +++++++++++----- .../ir/expressions/IrPropertyReference.kt | 5 +-- .../kotlin/ir/expressions/impl/IrCallImpl.kt | 10 ++++- .../expressions/impl/IrConstructorCallImpl.kt | 9 +++- .../impl/IrDelegatingConstructorCallImpl.kt | 11 ++++- .../impl/IrEnumConstructorCallImpl.kt | 9 +++- .../impl/IrFunctionReferenceImpl.kt | 41 ++--------------- .../IrLocalDelegatedPropertyReferenceImpl.kt | 14 +++--- .../impl/IrPropertyReferenceImpl.kt | 16 +++---- 17 files changed, 91 insertions(+), 142 deletions(-) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt index 5b90c5cc70d..dac334ecdef 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCall.kt @@ -9,11 +9,8 @@ import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrCall( - typeArgumentsCount: Int, - valueArgumentsCount: Int, -) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { - override abstract val symbol: IrSimpleFunctionSymbol +abstract class IrCall : IrFunctionAccessExpression() { + abstract override val symbol: IrSimpleFunctionSymbol abstract val superQualifierSymbol: IrClassSymbol? override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt index cbfb3f66706..65cb993e120 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrCallableReference.kt @@ -8,6 +8,6 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.name.Name -abstract class IrCallableReference(typeArgumentsCount: Int) : IrMemberAccessExpression(typeArgumentsCount) { +abstract class IrCallableReference : IrMemberAccessExpression() { abstract val referencedName: Name } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt index 5e001a3d757..fe21a5018af 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrConstructorCall.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrConstructorCall( - typeArgumentsCount: Int, - valueArgumentsCount: Int, -) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { +abstract class IrConstructorCall : IrFunctionAccessExpression() { abstract override val symbol: IrConstructorSymbol abstract val constructorTypeArgumentsCount: Int diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt index 5ffa0e817cf..a856067e016 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrDelegatingConstructorCall.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrDelegatingConstructorCall( - typeArgumentsCount: Int, - valueArgumentsCount: Int, -) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { +abstract class IrDelegatingConstructorCall : IrFunctionAccessExpression() { abstract override val symbol: IrConstructorSymbol override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt index bf6a1d55a30..ae61bf4de3a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrEnumConstructorCall.kt @@ -8,10 +8,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrEnumConstructorCall( - typeArgumentsCount: Int, - valueArgumentsCount: Int, -) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { +abstract class IrEnumConstructorCall : IrFunctionAccessExpression() { abstract override val symbol: IrConstructorSymbol override fun accept(visitor: IrElementVisitor, data: D): R = diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt index 7c24c109304..5328c1d6524 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt @@ -6,47 +6,7 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrFunctionAccessExpression( - typeArgumentsCount: Int, - valueArgumentsCount: Int, -) : IrMemberAccessExpression(typeArgumentsCount) { - private val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) - - final override val valueArgumentsCount: Int - get() = argumentsByParameterIndex.size - - var contextReceiversCount: Int = 0 - - override fun getValueArgument(index: Int): IrExpression? { - if (index >= valueArgumentsCount) { - throwNoSuchArgumentSlotException("value", index, valueArgumentsCount) - } - return argumentsByParameterIndex[index] - } - - override fun putValueArgument(index: Int, valueArgument: IrExpression?) { - if (index >= valueArgumentsCount) { - throwNoSuchArgumentSlotException("value", index, valueArgumentsCount) - } - argumentsByParameterIndex[index] = valueArgument - } - - override fun removeValueArgument(index: Int) { - argumentsByParameterIndex[index] = null - } - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - super.acceptChildren(visitor, data) - argumentsByParameterIndex.forEach { it?.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - super.transformChildren(transformer, data) - argumentsByParameterIndex.forEachIndexed { i, irExpression -> - argumentsByParameterIndex[i] = irExpression?.transform(transformer, data) - } - } +abstract class IrFunctionAccessExpression : IrMemberAccessExpression() { + abstract var contextReceiversCount: Int } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt index eb3ce7908fa..5edca4cc503 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionReference.kt @@ -6,7 +6,11 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrFunctionReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { +abstract class IrFunctionReference : IrCallableReference() { abstract val reflectionTarget: IrFunctionSymbol? + + override fun accept(visitor: IrElementVisitor, data: D): R = + visitor.visitFunctionReference(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt index 35680197850..a30a5db44bb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrLocalDelegatedPropertyReference.kt @@ -10,14 +10,11 @@ import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrLocalDelegatedPropertyReference : IrCallableReference(0) { +abstract class IrLocalDelegatedPropertyReference : IrCallableReference() { abstract val delegate: IrVariableSymbol abstract val getter: IrSimpleFunctionSymbol abstract val setter: IrSimpleFunctionSymbol? - override val valueArgumentsCount: Int - get() = 0 - override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitLocalDelegatedPropertyReference(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt index ada7691d429..d4d343d11bb 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrMemberAccessExpression.kt @@ -20,23 +20,34 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.types.KotlinType -abstract class IrMemberAccessExpression(typeArgumentsCount: Int) : IrDeclarationReference() { +abstract class IrMemberAccessExpression : IrDeclarationReference() { var dispatchReceiver: IrExpression? = null var extensionReceiver: IrExpression? = null abstract override val symbol: S abstract val origin: IrStatementOrigin? - abstract val valueArgumentsCount: Int - - abstract fun getValueArgument(index: Int): IrExpression? - abstract fun putValueArgument(index: Int, valueArgument: IrExpression?) - abstract fun removeValueArgument(index: Int) - - private val typeArgumentsByIndex = arrayOfNulls(typeArgumentsCount) + protected abstract val typeArgumentsByIndex: Array val typeArgumentsCount: Int get() = typeArgumentsByIndex.size + protected abstract val argumentsByParameterIndex: Array + open val valueArgumentsCount: Int get() = argumentsByParameterIndex.size + + fun getValueArgument(index: Int): IrExpression? { + if (index >= valueArgumentsCount) { + throw AssertionError("$this: No such value argument slot: $index") + } + return argumentsByParameterIndex[index] + } + + fun putValueArgument(index: Int, valueArgument: IrExpression?) { + if (index >= valueArgumentsCount) { + throw AssertionError("$this: No such value argument slot: $index") + } + argumentsByParameterIndex[index] = valueArgument + } + fun getTypeArgument(index: Int): IrType? { if (index >= typeArgumentsCount) { throwNoSuchArgumentSlotException("type", index, typeArgumentsCount) @@ -54,11 +65,19 @@ abstract class IrMemberAccessExpression(typeArgumentsCount: Int) : override fun acceptChildren(visitor: IrElementVisitor, data: D) { dispatchReceiver?.accept(visitor, data) extensionReceiver?.accept(visitor, data) + if (valueArgumentsCount > 0) { + argumentsByParameterIndex.forEach { it?.accept(visitor, data) } + } } override fun transformChildren(transformer: IrElementTransformer, data: D) { dispatchReceiver = dispatchReceiver?.transform(transformer, data) extensionReceiver = extensionReceiver?.transform(transformer, data) + if (valueArgumentsCount > 0) { + argumentsByParameterIndex.forEachIndexed { i, irExpression -> + argumentsByParameterIndex[i] = irExpression?.transform(transformer, data) + } + } } } @@ -108,10 +127,6 @@ fun IrMemberAccessExpression<*>.putValueArgument(valueParameterDescriptor: Value putValueArgument(valueParameterDescriptor.index, valueArgument) } -fun IrMemberAccessExpression<*>.removeValueArgument(valueParameterDescriptor: ValueParameterDescriptor) { - removeValueArgument(valueParameterDescriptor.index) -} - @ObsoleteDescriptorBasedAPI inline fun > T.mapTypeParameters(transform: (TypeParameterDescriptor) -> IrType) : T = apply { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt index 4a52b04763e..bc25024667d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrPropertyReference.kt @@ -10,14 +10,11 @@ import org.jetbrains.kotlin.ir.symbols.IrPropertySymbol import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrPropertyReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { +abstract class IrPropertyReference : IrCallableReference() { abstract val field: IrFieldSymbol? abstract val getter: IrSimpleFunctionSymbol? abstract val setter: IrSimpleFunctionSymbol? - override val valueArgumentsCount: Int - get() = 0 - override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitPropertyReference(this, data) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt index 88806bc11bc..2d580ac0f2d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.expressions.IrCall +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.typeParametersCount import org.jetbrains.kotlin.ir.symbols.IrClassSymbol @@ -35,7 +36,14 @@ class IrCallImpl( valueArgumentsCount: Int, override val origin: IrStatementOrigin? = null, override val superQualifierSymbol: IrClassSymbol? = null -) : IrCall(typeArgumentsCount, valueArgumentsCount) { +) : IrCall() { + + override val typeArgumentsByIndex: Array = arrayOfNulls(typeArgumentsCount) + + override val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) + + override var contextReceiversCount = 0 + init { if (symbol is IrConstructorSymbol) { throw AssertionError("Should be IrConstructorCall: ${this.render()}") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt index 71e97d7296f..9d2265caac3 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrConstructorCallImpl.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -22,7 +23,13 @@ class IrConstructorCallImpl( override val constructorTypeArgumentsCount: Int, valueArgumentsCount: Int, override val origin: IrStatementOrigin? = null, -) : IrConstructorCall(typeArgumentsCount, valueArgumentsCount) { +) : IrConstructorCall() { + override val typeArgumentsByIndex: Array = arrayOfNulls(typeArgumentsCount) + + override val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) + + override var contextReceiversCount = 0 + companion object { @ObsoleteDescriptorBasedAPI fun fromSymbolDescriptor( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt index 7ac54cbd877..c61c9f1785a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrDelegatingConstructorCallImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.expressions.IrDelegatingConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.expressions.typeParametersCount import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol @@ -30,11 +31,17 @@ class IrDelegatingConstructorCallImpl( override var type: IrType, override val symbol: IrConstructorSymbol, typeArgumentsCount: Int, - valueArgumentsCount: Int -) : IrDelegatingConstructorCall(typeArgumentsCount, valueArgumentsCount) { + valueArgumentsCount: Int, +) : IrDelegatingConstructorCall() { override val origin: IrStatementOrigin? get() = null + override val typeArgumentsByIndex: Array = arrayOfNulls(typeArgumentsCount) + + override val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) + + override var contextReceiversCount = 0 + companion object { @ObsoleteDescriptorBasedAPI fun fromSymbolDescriptor( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt index 7fa14955226..2a3a8b377a4 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrEnumConstructorCallImpl.kt @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.ir.expressions.impl import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.expressions.IrEnumConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType @@ -29,10 +30,16 @@ class IrEnumConstructorCallImpl( override val symbol: IrConstructorSymbol, typeArgumentsCount: Int, valueArgumentsCount: Int -) : IrEnumConstructorCall(typeArgumentsCount, valueArgumentsCount) { +) : IrEnumConstructorCall() { override val origin: IrStatementOrigin? get() = null + override val typeArgumentsByIndex: Array = arrayOfNulls(typeArgumentsCount) + + override val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) + + override var contextReceiversCount = 0 + companion object { @ObsoleteDescriptorBasedAPI fun fromSymbolDescriptor( diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt index 636714b1427..a4d89cf3c6f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrFunctionReferenceImpl.kt @@ -22,8 +22,6 @@ import org.jetbrains.kotlin.ir.expressions.IrFunctionReference import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.name.Name class IrFunctionReferenceImpl( @@ -32,47 +30,16 @@ class IrFunctionReferenceImpl( override var type: IrType, override val symbol: IrFunctionSymbol, typeArgumentsCount: Int, - override val valueArgumentsCount: Int, + valueArgumentsCount: Int, override val reflectionTarget: IrFunctionSymbol? = symbol, override val origin: IrStatementOrigin? = null, -) : IrFunctionReference(typeArgumentsCount) { +) : IrFunctionReference() { override val referencedName: Name get() = symbol.owner.name - private val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) + override val typeArgumentsByIndex: Array = arrayOfNulls(typeArgumentsCount) - override fun getValueArgument(index: Int): IrExpression? { - if (index >= valueArgumentsCount) { - throw AssertionError("$this: No such value argument slot: $index") - } - return argumentsByParameterIndex[index] - } - - override fun putValueArgument(index: Int, valueArgument: IrExpression?) { - if (index >= valueArgumentsCount) { - throw AssertionError("$this: No such value argument slot: $index") - } - argumentsByParameterIndex[index] = valueArgument - } - - override fun removeValueArgument(index: Int) { - argumentsByParameterIndex[index] = null - } - - override fun accept(visitor: IrElementVisitor, data: D): R = - visitor.visitFunctionReference(this, data) - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - super.acceptChildren(visitor, data) - argumentsByParameterIndex.forEach { it?.accept(visitor, data) } - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - super.transformChildren(transformer, data) - argumentsByParameterIndex.forEachIndexed { i, irExpression -> - argumentsByParameterIndex[i] = irExpression?.transform(transformer, data) - } - } + override val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) companion object { @ObsoleteDescriptorBasedAPI diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLocalDelegatedPropertyReferenceImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLocalDelegatedPropertyReferenceImpl.kt index bc56c3d1e01..e2a1bc5fd17 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLocalDelegatedPropertyReferenceImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrLocalDelegatedPropertyReferenceImpl.kt @@ -35,18 +35,14 @@ class IrLocalDelegatedPropertyReferenceImpl( override val setter: IrSimpleFunctionSymbol?, override val origin: IrStatementOrigin? = null, ) : IrLocalDelegatedPropertyReference() { + override val typeArgumentsByIndex: Array = emptyArray() + + override val argumentsByParameterIndex: Array + get() = throw UnsupportedOperationException("Property reference $symbol has no value arguments") + override val valueArgumentsCount: Int get() = 0 override val referencedName: Name get() = symbol.owner.name - - private fun throwNoValueArguments(): Nothing = - throw UnsupportedOperationException("Property reference $symbol has no value arguments") - - override fun getValueArgument(index: Int): IrExpression? = throwNoValueArguments() - - override fun putValueArgument(index: Int, valueArgument: IrExpression?): Unit = throwNoValueArguments() - - override fun removeValueArgument(index: Int): Unit = throwNoValueArguments() } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyReferenceImpl.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyReferenceImpl.kt index b5072c352aa..6a9a66bce8f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyReferenceImpl.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyReferenceImpl.kt @@ -35,19 +35,15 @@ class IrPropertyReferenceImpl( override val getter: IrSimpleFunctionSymbol?, override val setter: IrSimpleFunctionSymbol?, override val origin: IrStatementOrigin? = null, -) : IrPropertyReference(typeArgumentsCount) { +) : IrPropertyReference() { + override val typeArgumentsByIndex: Array = arrayOfNulls(typeArgumentsCount) + + override val argumentsByParameterIndex: Array + get() = throw UnsupportedOperationException("Property reference $symbol has no value arguments") + override val valueArgumentsCount: Int get() = 0 override val referencedName: Name get() = symbol.owner.name - - private fun throwNoValueArguments(): Nothing = - throw UnsupportedOperationException("Property reference $symbol has no value arguments") - - override fun getValueArgument(index: Int): IrExpression? = throwNoValueArguments() - - override fun putValueArgument(index: Int, valueArgument: IrExpression?): Unit = throwNoValueArguments() - - override fun removeValueArgument(index: Int): Unit = throwNoValueArguments() }