From ee904a975a53c8234ebb88693f8fbc3ee3910f63 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 22 Jul 2020 17:55:33 +0200 Subject: [PATCH] IR: make IrMemberAccessExpression and subtypes classes Merge IrMemberAccessExpressionBase into IrMemberAccessExpression, and IrCallWithIndexedArgumentsBase into IrFunctionAccessExpression (extract the latter into a separate file). --- .../jetbrains/kotlin/ir/expressions/IrCall.kt | 7 +- .../ir/expressions/IrCallableReference.kt | 30 ++++---- .../ir/expressions/IrConstructorCall.kt | 11 +-- .../IrDelegatingConstructorCall.kt | 8 ++- .../ir/expressions/IrEnumConstructorCall.kt | 8 ++- ...sBase.kt => IrFunctionAccessExpression.kt} | 26 +++---- .../expressions/IrMemberAccessExpression.kt | 68 +++++++++++++------ .../kotlin/ir/expressions/impl/IrCallImpl.kt | 2 +- .../expressions/impl/IrConstructorCallImpl.kt | 2 +- .../impl/IrDelegatingConstructorCallImpl.kt | 2 +- .../impl/IrEnumConstructorCallImpl.kt | 2 +- .../impl/IrFunctionReferenceImpl.kt | 2 +- .../IrLocalDelegatedPropertyReferenceImpl.kt | 2 +- .../impl/IrMemberAccessExpressionBase.kt | 57 ---------------- .../impl/IrPropertyReferenceImpl.kt | 2 +- 15 files changed, 102 insertions(+), 127 deletions(-) rename compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/{impl/IrCallWithIndexedArgumentsBase.kt => IrFunctionAccessExpression.kt} (64%) delete mode 100644 compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrMemberAccessExpressionBase.kt 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 9cace764aae..73f2b18f043 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 @@ -18,6 +18,9 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrClassSymbol -interface IrCall : IrFunctionAccessExpression { - val superQualifierSymbol: IrClassSymbol? +abstract class IrCall( + typeArgumentsCount: Int, + valueArgumentsCount: Int, +) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { + abstract val superQualifierSymbol: IrClassSymbol? } 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 27eaa2b9f05..dd9a498be7c 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 @@ -19,12 +19,12 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.name.Name -interface IrCallableReference : IrMemberAccessExpression { - val referencedName: Name +abstract class IrCallableReference(typeArgumentsCount: Int) : IrMemberAccessExpression(typeArgumentsCount) { + abstract val referencedName: Name } -interface IrFunctionReference : IrCallableReference { - val reflectionTarget: IrFunctionSymbol? +abstract class IrFunctionReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { + abstract val reflectionTarget: IrFunctionSymbol? } val IrFunctionReference.isWithReflection: Boolean @@ -33,14 +33,20 @@ val IrFunctionReference.isWithReflection: Boolean val IrFunctionReference.isAdapterWithReflection: Boolean get() = reflectionTarget != null && reflectionTarget != symbol -interface IrPropertyReference : IrCallableReference { - val field: IrFieldSymbol? - val getter: IrSimpleFunctionSymbol? - val setter: IrSimpleFunctionSymbol? +abstract class IrPropertyReference(typeArgumentsCount: Int) : IrCallableReference(typeArgumentsCount) { + abstract val field: IrFieldSymbol? + abstract val getter: IrSimpleFunctionSymbol? + abstract val setter: IrSimpleFunctionSymbol? + + override val valueArgumentsCount: Int + get() = 0 } -interface IrLocalDelegatedPropertyReference : IrCallableReference { - val delegate: IrVariableSymbol - val getter: IrSimpleFunctionSymbol - val setter: IrSimpleFunctionSymbol? +abstract class IrLocalDelegatedPropertyReference : IrCallableReference(0) { + abstract val delegate: IrVariableSymbol + abstract val getter: IrSimpleFunctionSymbol + abstract val setter: IrSimpleFunctionSymbol? + + override val valueArgumentsCount: Int + get() = 0 } 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 2b2fc81c03b..7bcffbb3377 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,13 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol import org.jetbrains.kotlin.ir.types.IrType -interface IrConstructorCall : IrFunctionAccessExpression { - override val symbol: IrConstructorSymbol +abstract class IrConstructorCall( + typeArgumentsCount: Int, + valueArgumentsCount: Int, +) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { + abstract override val symbol: IrConstructorSymbol - val constructorTypeArgumentsCount: Int + abstract val constructorTypeArgumentsCount: Int class ConstructorTypeArguments(internal val irConstructorCall: IrConstructorCall) : AbstractList() { override val size: Int @@ -76,4 +79,4 @@ var IrConstructorCall.outerClassReceiver: IrExpression? get() = dispatchReceiver set(value) { dispatchReceiver = value - } \ No newline at end of file + } 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 b052ee82268..9f95a019883 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 @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol -interface IrDelegatingConstructorCall : IrFunctionAccessExpression { - override val symbol: IrConstructorSymbol +abstract class IrDelegatingConstructorCall( + typeArgumentsCount: Int, + valueArgumentsCount: Int, +) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { + abstract override val symbol: IrConstructorSymbol } - 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 dad9ee035ed..13c4c87dc60 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 @@ -18,7 +18,9 @@ package org.jetbrains.kotlin.ir.expressions import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol - -interface IrEnumConstructorCall : IrFunctionAccessExpression { - override val symbol: IrConstructorSymbol +abstract class IrEnumConstructorCall( + typeArgumentsCount: Int, + valueArgumentsCount: Int, +) : IrFunctionAccessExpression(typeArgumentsCount, valueArgumentsCount) { + abstract override val symbol: IrConstructorSymbol } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallWithIndexedArgumentsBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt similarity index 64% rename from compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallWithIndexedArgumentsBase.kt rename to compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt index ac8258a8047..f1bdec28a17 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrCallWithIndexedArgumentsBase.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/IrFunctionAccessExpression.kt @@ -1,30 +1,19 @@ /* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ -package org.jetbrains.kotlin.ir.expressions.impl +package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.declarations.IrValueParameter import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor -abstract class IrCallWithIndexedArgumentsBase( +abstract class IrFunctionAccessExpression( typeArgumentsCount: Int, final override val valueArgumentsCount: Int, -) : IrMemberAccessExpressionBase(typeArgumentsCount) { +) : IrMemberAccessExpression(typeArgumentsCount) { private val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) override fun getValueArgument(index: Int): IrExpression? { @@ -57,3 +46,6 @@ abstract class IrCallWithIndexedArgumentsBase( } } } + +fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression) = + putArgument(symbol.owner, parameter, argument) 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 9dae538be80..c868dea3b14 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 @@ -5,33 +5,62 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.descriptors.CallableDescriptor +import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor +import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor +import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI -import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrFunction +import org.jetbrains.kotlin.ir.declarations.IrTypeParameter import org.jetbrains.kotlin.ir.declarations.IrValueParameter -import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol +import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBase import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.types.IrType import org.jetbrains.kotlin.ir.types.defaultType +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer +import org.jetbrains.kotlin.ir.visitors.IrElementVisitor import org.jetbrains.kotlin.types.KotlinType -interface IrMemberAccessExpression : IrDeclarationReference { - var dispatchReceiver: IrExpression? - var extensionReceiver: IrExpression? - - override val symbol: S - - val origin: IrStatementOrigin? - +abstract class IrMemberAccessExpression( val typeArgumentsCount: Int - fun getTypeArgument(index: Int): IrType? - fun putTypeArgument(index: Int, type: IrType?) +) : IrExpressionBase(), IrDeclarationReference { + var dispatchReceiver: IrExpression? = null + var extensionReceiver: IrExpression? = null - val valueArgumentsCount: Int - fun getValueArgument(index: Int): IrExpression? - fun putValueArgument(index: Int, valueArgument: IrExpression?) - fun removeValueArgument(index: Int) + 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) + + fun getTypeArgument(index: Int): IrType? { + if (index >= typeArgumentsCount) { + throw AssertionError("$this: No such type argument slot: $index") + } + return typeArgumentsByIndex[index] + } + + fun putTypeArgument(index: Int, type: IrType?) { + if (index >= typeArgumentsCount) { + throw AssertionError("$this: No such type argument slot: $index") + } + typeArgumentsByIndex[index] = type + } + + override fun acceptChildren(visitor: IrElementVisitor, data: D) { + dispatchReceiver?.accept(visitor, data) + extensionReceiver?.accept(visitor, data) + } + + override fun transformChildren(transformer: IrElementTransformer, data: D) { + dispatchReceiver = dispatchReceiver?.transform(transformer, data) + extensionReceiver = extensionReceiver?.transform(transformer, data) + } } fun IrMemberAccessExpression<*>.getTypeArgument(typeParameterDescriptor: TypeParameterDescriptor): IrType? = @@ -66,8 +95,6 @@ val CallableDescriptor.typeParametersCount: Int fun IrMemberAccessExpression<*>.getTypeArgumentOrDefault(irTypeParameter: IrTypeParameter) = getTypeArgument(irTypeParameter.index) ?: irTypeParameter.defaultType -interface IrFunctionAccessExpression : IrMemberAccessExpression - fun IrMemberAccessExpression<*>.getValueArgument(valueParameterDescriptor: ValueParameterDescriptor) = getValueArgument(valueParameterDescriptor.index) @@ -112,6 +139,3 @@ fun IrMemberAccessExpression<*>.putArgument(callee: IrFunction, parameter: IrVal callee.extensionReceiverParameter -> extensionReceiver = argument else -> putValueArgument(parameter.index, argument) } - -fun IrFunctionAccessExpression.putArgument(parameter: IrValueParameter, argument: IrExpression) = - putArgument(symbol.owner, parameter, argument) 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 481931c99d5..a245d3c28fc 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 @@ -36,7 +36,7 @@ class IrCallImpl( valueArgumentsCount: Int, override val origin: IrStatementOrigin? = null, override val superQualifierSymbol: IrClassSymbol? = null -) : IrCallWithIndexedArgumentsBase(typeArgumentsCount, valueArgumentsCount), IrCall { +) : IrCall(typeArgumentsCount, valueArgumentsCount) { 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 153ce507346..5c053f30a9a 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 @@ -23,7 +23,7 @@ class IrConstructorCallImpl( override val constructorTypeArgumentsCount: Int, valueArgumentsCount: Int, override val origin: IrStatementOrigin? = null, -) : IrCallWithIndexedArgumentsBase(typeArgumentsCount, valueArgumentsCount), IrConstructorCall { +) : IrConstructorCall(typeArgumentsCount, valueArgumentsCount) { override fun accept(visitor: IrElementVisitor, data: D): R = visitor.visitConstructorCall(this, data) 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 457931c7233..3736c692d38 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 @@ -31,7 +31,7 @@ class IrDelegatingConstructorCallImpl( override val symbol: IrConstructorSymbol, typeArgumentsCount: Int, valueArgumentsCount: Int -) : IrCallWithIndexedArgumentsBase(typeArgumentsCount, valueArgumentsCount), IrDelegatingConstructorCall { +) : IrDelegatingConstructorCall(typeArgumentsCount, valueArgumentsCount) { override val origin: IrStatementOrigin? get() = null 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 be7a30170b8..6e40951c607 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 @@ -30,7 +30,7 @@ class IrEnumConstructorCallImpl( override val symbol: IrConstructorSymbol, typeArgumentsCount: Int, valueArgumentsCount: Int -) : IrCallWithIndexedArgumentsBase(typeArgumentsCount, valueArgumentsCount), IrEnumConstructorCall { +) : IrEnumConstructorCall(typeArgumentsCount, valueArgumentsCount) { override val origin: IrStatementOrigin? get() = null 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 c1292ef230a..fff87bb376c 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 @@ -35,7 +35,7 @@ class IrFunctionReferenceImpl( override val valueArgumentsCount: Int, override val reflectionTarget: IrFunctionSymbol? = symbol, override val origin: IrStatementOrigin? = null, -) : IrMemberAccessExpressionBase(typeArgumentsCount), IrFunctionReference { +) : IrFunctionReference(typeArgumentsCount) { @ObsoleteDescriptorBasedAPI constructor( startOffset: Int, 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 d8c200a5e30..55bebf19db0 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,7 +35,7 @@ class IrLocalDelegatedPropertyReferenceImpl( override val getter: IrSimpleFunctionSymbol, override val setter: IrSimpleFunctionSymbol?, override val origin: IrStatementOrigin? = null, -) : IrMemberAccessExpressionBase(0), IrLocalDelegatedPropertyReference { +) : IrLocalDelegatedPropertyReference() { override val valueArgumentsCount: Int get() = 0 diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrMemberAccessExpressionBase.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrMemberAccessExpressionBase.kt deleted file mode 100644 index 2a48864f881..00000000000 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrMemberAccessExpressionBase.kt +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2010-2016 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.ir.expressions.impl - -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression -import org.jetbrains.kotlin.ir.symbols.IrSymbol -import org.jetbrains.kotlin.ir.types.IrType -import org.jetbrains.kotlin.ir.visitors.IrElementTransformer -import org.jetbrains.kotlin.ir.visitors.IrElementVisitor - -abstract class IrMemberAccessExpressionBase( - final override val typeArgumentsCount: Int -) : IrExpressionBase(), IrMemberAccessExpression { - override var dispatchReceiver: IrExpression? = null - override var extensionReceiver: IrExpression? = null - - private val typeArgumentsByIndex = arrayOfNulls(typeArgumentsCount) - - override fun getTypeArgument(index: Int): IrType? { - if (index >= typeArgumentsCount) { - throw AssertionError("$this: No such type argument slot: $index") - } - return typeArgumentsByIndex[index] - } - - override fun putTypeArgument(index: Int, type: IrType?) { - if (index >= typeArgumentsCount) { - throw AssertionError("$this: No such type argument slot: $index") - } - typeArgumentsByIndex[index] = type - } - - override fun acceptChildren(visitor: IrElementVisitor, data: D) { - dispatchReceiver?.accept(visitor, data) - extensionReceiver?.accept(visitor, data) - } - - override fun transformChildren(transformer: IrElementTransformer, data: D) { - dispatchReceiver = dispatchReceiver?.transform(transformer, data) - extensionReceiver = extensionReceiver?.transform(transformer, data) - } -} 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 902209b94fa..790b148bc94 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 @@ -36,7 +36,7 @@ class IrPropertyReferenceImpl( override val getter: IrSimpleFunctionSymbol?, override val setter: IrSimpleFunctionSymbol?, override val origin: IrStatementOrigin? = null, -) : IrMemberAccessExpressionBase(typeArgumentsCount), IrPropertyReference { +) : IrPropertyReference(typeArgumentsCount) { override val valueArgumentsCount: Int get() = 0