Determine typeArgumentsCount by descriptor
This commit is contained in:
+7
-6
@@ -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<TypeParameterDesc
|
||||
}
|
||||
}
|
||||
|
||||
val Map<TypeParameterDescriptor, KotlinType>?.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
|
||||
|
||||
@@ -57,7 +57,7 @@ class IrCallImpl(
|
||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||
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<TypeParameterDescriptor, KotlinType>? = 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<TypeParameterDescriptor, KotlinType>? = 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
|
||||
) {
|
||||
|
||||
-14
@@ -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<TypeParameterDescriptor, KotlinType>?,
|
||||
origin: IrStatementOrigin? = null
|
||||
) : this(startOffset, endOffset, type, typeArguments.typeArgumentsCount, valueArgumentsCount, origin) {
|
||||
copyTypeArgumentsFrom(typeArguments)
|
||||
}
|
||||
|
||||
private val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||
|
||||
override fun getValueArgument(index: Int): IrExpression? {
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ class IrDelegatingConstructorCallImpl(
|
||||
symbol: IrConstructorSymbol,
|
||||
descriptor: ClassConstructorDescriptor,
|
||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
||||
) : this(startOffset, endOffset, symbol, descriptor, typeArguments.typeArgumentsCount) {
|
||||
) : this(startOffset, endOffset, symbol, descriptor, descriptor.typeArgumentsCount) {
|
||||
copyTypeArgumentsFrom(typeArguments)
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@ class IrEnumConstructorCallImpl(
|
||||
endOffset: Int,
|
||||
symbol: IrConstructorSymbol,
|
||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
||||
) : this(startOffset, endOffset, symbol, typeArguments.typeArgumentsCount) {
|
||||
) : this(startOffset, endOffset, symbol, symbol.descriptor.typeArgumentsCount) {
|
||||
copyTypeArgumentsFrom(typeArguments)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -54,7 +54,7 @@ class IrFunctionReferenceImpl(
|
||||
descriptor: FunctionDescriptor,
|
||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = 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<TypeParameterDescriptor, KotlinType>? = 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)
|
||||
}
|
||||
|
||||
+2
-2
@@ -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
|
||||
|
||||
+1
-1
@@ -50,7 +50,7 @@ class IrPropertyReferenceImpl(
|
||||
setter: IrFunctionSymbol?,
|
||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||
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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user