Determine typeArgumentsCount by descriptor

This commit is contained in:
Dmitry Petrov
2018-03-27 10:40:11 +03:00
parent 3b967017f6
commit 9a76ee63ab
8 changed files with 30 additions and 41 deletions
@@ -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
) {
@@ -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? {
@@ -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)
}
@@ -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)
}
@@ -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)
}
@@ -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
@@ -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)
}