Determine typeArgumentsCount by descriptor
This commit is contained in:
+7
-6
@@ -16,10 +16,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions
|
package org.jetbrains.kotlin.ir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.CallableDescriptor
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
@@ -65,8 +62,12 @@ fun IrMemberAccessExpression.copyTypeArgumentsFrom(source: Map<TypeParameterDesc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val Map<TypeParameterDescriptor, KotlinType>?.typeArgumentsCount: Int
|
val CallableDescriptor.typeArgumentsCount: Int
|
||||||
get() = this?.size ?: 0
|
get() =
|
||||||
|
when (this) {
|
||||||
|
is PropertyAccessorDescriptor -> correspondingProperty.typeParameters.size
|
||||||
|
else -> typeParameters.size
|
||||||
|
}
|
||||||
|
|
||||||
fun IrMemberAccessExpression.getTypeArgumentOrDefault(typeParameterDescriptor: TypeParameterDescriptor) =
|
fun IrMemberAccessExpression.getTypeArgumentOrDefault(typeParameterDescriptor: TypeParameterDescriptor) =
|
||||||
getTypeArgument(typeParameterDescriptor) ?: typeParameterDescriptor.defaultType
|
getTypeArgument(typeParameterDescriptor) ?: typeParameterDescriptor.defaultType
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class IrCallImpl(
|
|||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = 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)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -66,15 +66,15 @@ class IrCallImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: KotlinType,
|
type: KotlinType,
|
||||||
calleeDescriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
typeArgumentsCount: Int,
|
typeArgumentsCount: Int,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierDescriptor: ClassDescriptor? = null
|
superQualifierDescriptor: ClassDescriptor? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
createFunctionSymbol(calleeDescriptor),
|
createFunctionSymbol(descriptor),
|
||||||
calleeDescriptor,
|
descriptor,
|
||||||
typeArgumentsCount,
|
typeArgumentsCount,
|
||||||
origin,
|
origin,
|
||||||
createClassSymbolOrNull(superQualifierDescriptor)
|
createClassSymbolOrNull(superQualifierDescriptor)
|
||||||
@@ -85,16 +85,17 @@ class IrCallImpl(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: KotlinType,
|
type: KotlinType,
|
||||||
calleeDescriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierDescriptor: ClassDescriptor? = null
|
superQualifierDescriptor: ClassDescriptor? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
type,
|
type,
|
||||||
createFunctionSymbol(calleeDescriptor),
|
createFunctionSymbol(descriptor),
|
||||||
calleeDescriptor,
|
descriptor,
|
||||||
typeArguments.typeArgumentsCount, origin,
|
descriptor.typeArgumentsCount,
|
||||||
|
origin,
|
||||||
createClassSymbolOrNull(superQualifierDescriptor)
|
createClassSymbolOrNull(superQualifierDescriptor)
|
||||||
) {
|
) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
@@ -104,16 +105,17 @@ class IrCallImpl(
|
|||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
calleeDescriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierDescriptor: ClassDescriptor? = null
|
superQualifierDescriptor: ClassDescriptor? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
calleeDescriptor.returnType!!,
|
descriptor.returnType!!,
|
||||||
createFunctionSymbol(calleeDescriptor),
|
createFunctionSymbol(descriptor),
|
||||||
calleeDescriptor,
|
descriptor,
|
||||||
typeArguments.typeArgumentsCount, origin,
|
descriptor.typeArgumentsCount,
|
||||||
|
origin,
|
||||||
createClassSymbolOrNull(superQualifierDescriptor)
|
createClassSymbolOrNull(superQualifierDescriptor)
|
||||||
) {
|
) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
@@ -132,7 +134,7 @@ class IrCallImpl(
|
|||||||
descriptor.returnType!!,
|
descriptor.returnType!!,
|
||||||
symbol,
|
symbol,
|
||||||
descriptor,
|
descriptor,
|
||||||
typeArguments.typeArgumentsCount,
|
descriptor.typeArgumentsCount,
|
||||||
origin,
|
origin,
|
||||||
superQualifierSymbol
|
superQualifierSymbol
|
||||||
) {
|
) {
|
||||||
|
|||||||
-14
@@ -16,11 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions.impl
|
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.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
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.util.render
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
@@ -36,17 +33,6 @@ abstract class IrCallWithIndexedArgumentsBase(
|
|||||||
origin: IrStatementOrigin? = null
|
origin: IrStatementOrigin? = null
|
||||||
) : IrMemberAccessExpressionBase(startOffset, endOffset, type, typeArgumentsCount, valueArgumentsCount, origin) {
|
) : 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)
|
private val argumentsByParameterIndex: Array<IrExpression?> = arrayOfNulls(valueArgumentsCount)
|
||||||
|
|
||||||
override fun getValueArgument(index: Int): IrExpression? {
|
override fun getValueArgument(index: Int): IrExpression? {
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@ class IrDelegatingConstructorCallImpl(
|
|||||||
symbol: IrConstructorSymbol,
|
symbol: IrConstructorSymbol,
|
||||||
descriptor: ClassConstructorDescriptor,
|
descriptor: ClassConstructorDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
||||||
) : this(startOffset, endOffset, symbol, descriptor, typeArguments.typeArgumentsCount) {
|
) : this(startOffset, endOffset, symbol, descriptor, descriptor.typeArgumentsCount) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -48,7 +48,7 @@ class IrEnumConstructorCallImpl(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
symbol: IrConstructorSymbol,
|
symbol: IrConstructorSymbol,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null
|
||||||
) : this(startOffset, endOffset, symbol, typeArguments.typeArgumentsCount) {
|
) : this(startOffset, endOffset, symbol, symbol.descriptor.typeArgumentsCount) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -54,7 +54,7 @@ class IrFunctionReferenceImpl(
|
|||||||
descriptor: FunctionDescriptor,
|
descriptor: FunctionDescriptor,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
||||||
origin: IrStatementOrigin? = null
|
origin: IrStatementOrigin? = null
|
||||||
) : this(startOffset, endOffset, type, symbol, descriptor, typeArguments.typeArgumentsCount, origin) {
|
) : this(startOffset, endOffset, type, symbol, descriptor, descriptor.typeArgumentsCount, origin) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,7 +77,7 @@ class IrFunctionReferenceImpl(
|
|||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>? = null,
|
||||||
origin: IrStatementOrigin? = null
|
origin: IrStatementOrigin? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, type, createFunctionSymbol(descriptor.original), descriptor, typeArguments.typeArgumentsCount, origin
|
startOffset, endOffset, type, createFunctionSymbol(descriptor.original), descriptor, descriptor.typeArgumentsCount, origin
|
||||||
) {
|
) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -90,7 +90,7 @@ class IrGetterCallImpl(
|
|||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, symbol, descriptor,
|
startOffset, endOffset, symbol, descriptor,
|
||||||
typeArguments.typeArgumentsCount,
|
descriptor.typeArgumentsCount,
|
||||||
dispatchReceiver, extensionReceiver, origin, superQualifierSymbol
|
dispatchReceiver, extensionReceiver, origin, superQualifierSymbol
|
||||||
) {
|
) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
@@ -164,7 +164,7 @@ class IrSetterCallImpl(
|
|||||||
argument: IrExpression,
|
argument: IrExpression,
|
||||||
origin: IrStatementOrigin? = null,
|
origin: IrStatementOrigin? = null,
|
||||||
superQualifierSymbol: IrClassSymbol? = null
|
superQualifierSymbol: IrClassSymbol? = null
|
||||||
) : this(startOffset, endOffset, symbol, descriptor, typeArguments.typeArgumentsCount, origin, superQualifierSymbol) {
|
) : this(startOffset, endOffset, symbol, descriptor, descriptor.typeArgumentsCount, origin, superQualifierSymbol) {
|
||||||
copyTypeArgumentsFrom(typeArguments)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
this.dispatchReceiver = dispatchReceiver
|
this.dispatchReceiver = dispatchReceiver
|
||||||
this.extensionReceiver = extensionReceiver
|
this.extensionReceiver = extensionReceiver
|
||||||
|
|||||||
+1
-1
@@ -50,7 +50,7 @@ class IrPropertyReferenceImpl(
|
|||||||
setter: IrFunctionSymbol?,
|
setter: IrFunctionSymbol?,
|
||||||
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
typeArguments: Map<TypeParameterDescriptor, KotlinType>?,
|
||||||
origin: IrStatementOrigin? = null
|
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)
|
copyTypeArgumentsFrom(typeArguments)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user