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 38e626a45f4..b87adb66d05 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 @@ -16,10 +16,7 @@ package org.jetbrains.kotlin.ir.expressions -import org.jetbrains.kotlin.descriptors.CallableDescriptor -import org.jetbrains.kotlin.descriptors.FunctionDescriptor -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor -import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor +import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol import org.jetbrains.kotlin.types.KotlinType @@ -65,8 +62,12 @@ fun IrMemberAccessExpression.copyTypeArgumentsFrom(source: Map?.typeArgumentsCount: Int - get() = this?.size ?: 0 +val CallableDescriptor.typeArgumentsCount: Int + get() = + when (this) { + is PropertyAccessorDescriptor -> correspondingProperty.typeParameters.size + else -> typeParameters.size + } fun IrMemberAccessExpression.getTypeArgumentOrDefault(typeParameterDescriptor: TypeParameterDescriptor) = getTypeArgument(typeParameterDescriptor) ?: typeParameterDescriptor.defaultType 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 7f836fb0e62..0fe241c21be 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 @@ -57,7 +57,7 @@ class IrCallImpl( typeArguments: Map?, origin: IrStatementOrigin? = null, superQualifierSymbol: IrClassSymbol? = null - ) : this(startOffset, endOffset, type, symbol, descriptor, typeArguments.typeArgumentsCount, origin, superQualifierSymbol) { + ) : this(startOffset, endOffset, type, symbol, descriptor, descriptor.typeArgumentsCount, origin, superQualifierSymbol) { copyTypeArgumentsFrom(typeArguments) } @@ -66,15 +66,15 @@ class IrCallImpl( startOffset: Int, endOffset: Int, type: KotlinType, - calleeDescriptor: FunctionDescriptor, + descriptor: FunctionDescriptor, typeArgumentsCount: Int, origin: IrStatementOrigin? = null, superQualifierDescriptor: ClassDescriptor? = null ) : this( startOffset, endOffset, type, - createFunctionSymbol(calleeDescriptor), - calleeDescriptor, + createFunctionSymbol(descriptor), + descriptor, typeArgumentsCount, origin, createClassSymbolOrNull(superQualifierDescriptor) @@ -85,16 +85,17 @@ class IrCallImpl( startOffset: Int, endOffset: Int, type: KotlinType, - calleeDescriptor: FunctionDescriptor, + descriptor: FunctionDescriptor, typeArguments: Map? = null, origin: IrStatementOrigin? = null, superQualifierDescriptor: ClassDescriptor? = null ) : this( startOffset, endOffset, type, - createFunctionSymbol(calleeDescriptor), - calleeDescriptor, - typeArguments.typeArgumentsCount, origin, + createFunctionSymbol(descriptor), + descriptor, + descriptor.typeArgumentsCount, + origin, createClassSymbolOrNull(superQualifierDescriptor) ) { copyTypeArgumentsFrom(typeArguments) @@ -104,16 +105,17 @@ class IrCallImpl( constructor( startOffset: Int, endOffset: Int, - calleeDescriptor: FunctionDescriptor, + descriptor: FunctionDescriptor, typeArguments: Map? = null, origin: IrStatementOrigin? = null, superQualifierDescriptor: ClassDescriptor? = null ) : this( startOffset, endOffset, - calleeDescriptor.returnType!!, - createFunctionSymbol(calleeDescriptor), - calleeDescriptor, - typeArguments.typeArgumentsCount, origin, + descriptor.returnType!!, + createFunctionSymbol(descriptor), + descriptor, + descriptor.typeArgumentsCount, + origin, createClassSymbolOrNull(superQualifierDescriptor) ) { copyTypeArgumentsFrom(typeArguments) @@ -132,7 +134,7 @@ class IrCallImpl( descriptor.returnType!!, symbol, descriptor, - typeArguments.typeArgumentsCount, + descriptor.typeArgumentsCount, origin, superQualifierSymbol ) { 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/impl/IrCallWithIndexedArgumentsBase.kt index 8a5998e1ec9..0cb660a9e17 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/impl/IrCallWithIndexedArgumentsBase.kt @@ -16,11 +16,8 @@ package org.jetbrains.kotlin.ir.expressions.impl -import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin -import org.jetbrains.kotlin.ir.expressions.copyTypeArgumentsFrom -import org.jetbrains.kotlin.ir.expressions.typeArgumentsCount import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementVisitor @@ -36,17 +33,6 @@ abstract class IrCallWithIndexedArgumentsBase( origin: IrStatementOrigin? = null ) : IrMemberAccessExpressionBase(startOffset, endOffset, type, typeArgumentsCount, valueArgumentsCount, origin) { - constructor( - startOffset: Int, - endOffset: Int, - type: KotlinType, - valueArgumentsCount: Int, - typeArguments: Map?, - origin: IrStatementOrigin? = null - ) : this(startOffset, endOffset, type, typeArguments.typeArgumentsCount, valueArgumentsCount, origin) { - copyTypeArgumentsFrom(typeArguments) - } - private val argumentsByParameterIndex: Array = arrayOfNulls(valueArgumentsCount) override fun getValueArgument(index: Int): IrExpression? { 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 676f87fc0b3..ba4b770f4ad 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 @@ -50,7 +50,7 @@ class IrDelegatingConstructorCallImpl( symbol: IrConstructorSymbol, descriptor: ClassConstructorDescriptor, typeArguments: Map? = null - ) : this(startOffset, endOffset, symbol, descriptor, typeArguments.typeArgumentsCount) { + ) : this(startOffset, endOffset, symbol, descriptor, descriptor.typeArgumentsCount) { copyTypeArgumentsFrom(typeArguments) } 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 252a636124b..0b8ff7cca56 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 @@ -48,7 +48,7 @@ class IrEnumConstructorCallImpl( endOffset: Int, symbol: IrConstructorSymbol, typeArguments: Map? = null - ) : this(startOffset, endOffset, symbol, typeArguments.typeArgumentsCount) { + ) : this(startOffset, endOffset, symbol, symbol.descriptor.typeArgumentsCount) { copyTypeArgumentsFrom(typeArguments) } 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 9e209eb84ee..e12c6734913 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 @@ -54,7 +54,7 @@ class IrFunctionReferenceImpl( descriptor: FunctionDescriptor, typeArguments: Map? = null, origin: IrStatementOrigin? = null - ) : this(startOffset, endOffset, type, symbol, descriptor, typeArguments.typeArgumentsCount, origin) { + ) : this(startOffset, endOffset, type, symbol, descriptor, descriptor.typeArgumentsCount, origin) { copyTypeArgumentsFrom(typeArguments) } @@ -77,7 +77,7 @@ class IrFunctionReferenceImpl( typeArguments: Map? = null, origin: IrStatementOrigin? = null ) : this( - startOffset, endOffset, type, createFunctionSymbol(descriptor.original), descriptor, typeArguments.typeArgumentsCount, origin + startOffset, endOffset, type, createFunctionSymbol(descriptor.original), descriptor, descriptor.typeArgumentsCount, origin ) { copyTypeArgumentsFrom(typeArguments) } diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyAccessorCall.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyAccessorCall.kt index 339cc7afa28..e52e3b0250f 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyAccessorCall.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/expressions/impl/IrPropertyAccessorCall.kt @@ -90,7 +90,7 @@ class IrGetterCallImpl( superQualifierSymbol: IrClassSymbol? = null ) : this( startOffset, endOffset, symbol, descriptor, - typeArguments.typeArgumentsCount, + descriptor.typeArgumentsCount, dispatchReceiver, extensionReceiver, origin, superQualifierSymbol ) { copyTypeArgumentsFrom(typeArguments) @@ -164,7 +164,7 @@ class IrSetterCallImpl( argument: IrExpression, origin: IrStatementOrigin? = null, superQualifierSymbol: IrClassSymbol? = null - ) : this(startOffset, endOffset, symbol, descriptor, typeArguments.typeArgumentsCount, origin, superQualifierSymbol) { + ) : this(startOffset, endOffset, symbol, descriptor, descriptor.typeArgumentsCount, origin, superQualifierSymbol) { copyTypeArgumentsFrom(typeArguments) this.dispatchReceiver = dispatchReceiver this.extensionReceiver = extensionReceiver 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 c78d9c73694..caccc21a960 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 @@ -50,7 +50,7 @@ class IrPropertyReferenceImpl( setter: IrFunctionSymbol?, typeArguments: Map?, origin: IrStatementOrigin? = null - ) : this(startOffset, endOffset, type, descriptor, typeArguments.typeArgumentsCount, field, getter, setter, origin) { + ) : this(startOffset, endOffset, type, descriptor, descriptor.typeArgumentsCount, field, getter, setter, origin) { copyTypeArgumentsFrom(typeArguments) }