[IR] Pass class Type Parameters into IrConstructorCall factory explicitly
to avoid unexpected crash on uninitialized parent in psi2ir phase
This commit is contained in:
@@ -232,7 +232,8 @@ fun IrBuilderWithScope.irCallConstructor(callee: IrConstructorSymbol, typeArgume
|
||||
startOffset,
|
||||
endOffset,
|
||||
callee.owner.returnType,
|
||||
callee
|
||||
callee,
|
||||
typeArguments.size - callee.owner.typeParameters.size
|
||||
).apply {
|
||||
typeArguments.forEachIndexed { index, irType ->
|
||||
this.putTypeArgument(index, irType)
|
||||
|
||||
+14
-16
@@ -33,18 +33,18 @@ class IrConstructorCallImpl(
|
||||
override val descriptor: ClassConstructorDescriptor get() = symbol.descriptor
|
||||
|
||||
companion object {
|
||||
fun fromSubstitutedDescriptor(
|
||||
|
||||
fun fromSymbolDescriptor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
type: IrType,
|
||||
constructorSymbol: IrConstructorSymbol,
|
||||
constructorDescriptor: ClassConstructorDescriptor,
|
||||
origin: IrStatementOrigin? = null
|
||||
): IrConstructorCallImpl {
|
||||
val constructorDescriptor = constructorSymbol.descriptor
|
||||
val classTypeParametersCount = constructorDescriptor.constructedClass.original.declaredTypeParameters.size
|
||||
val totalTypeParametersCount = constructorDescriptor.typeParameters.size
|
||||
val valueParametersCount = constructorDescriptor.valueParameters.size
|
||||
|
||||
return IrConstructorCallImpl(
|
||||
startOffset, endOffset,
|
||||
type,
|
||||
@@ -56,25 +56,15 @@ class IrConstructorCallImpl(
|
||||
)
|
||||
}
|
||||
|
||||
fun fromSymbolDescriptor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
type: IrType,
|
||||
constructorSymbol: IrConstructorSymbol,
|
||||
origin: IrStatementOrigin? = null
|
||||
): IrConstructorCallImpl =
|
||||
fromSubstitutedDescriptor(startOffset, endOffset, type, constructorSymbol, constructorSymbol.descriptor, origin)
|
||||
|
||||
fun fromSymbolOwner(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
type: IrType,
|
||||
constructorSymbol: IrConstructorSymbol,
|
||||
classTypeParametersCount: Int,
|
||||
origin: IrStatementOrigin? = null
|
||||
): IrConstructorCallImpl {
|
||||
val constructor = constructorSymbol.owner
|
||||
val constructedClass = constructor.parentAsClass
|
||||
val classTypeParametersCount = constructedClass.typeParameters.size
|
||||
val constructorTypeParametersCount = constructor.typeParameters.size
|
||||
val totalTypeParametersCount = classTypeParametersCount + constructorTypeParametersCount
|
||||
val valueParametersCount = constructor.valueParameters.size
|
||||
@@ -91,11 +81,19 @@ class IrConstructorCallImpl(
|
||||
}
|
||||
|
||||
fun fromSymbolOwner(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
type: IrType,
|
||||
constructorSymbol: IrConstructorSymbol,
|
||||
origin: IrStatementOrigin? = null
|
||||
) =
|
||||
fromSymbolOwner(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, constructorSymbol, origin)
|
||||
): IrConstructorCallImpl {
|
||||
val constructedClass = constructorSymbol.owner.parentAsClass
|
||||
val classTypeParametersCount = constructedClass.typeParameters.size
|
||||
return fromSymbolOwner(startOffset, endOffset, type, constructorSymbol, classTypeParametersCount, origin)
|
||||
}
|
||||
|
||||
fun fromSymbolOwner(type: IrType, constructorSymbol: IrConstructorSymbol, origin: IrStatementOrigin? = null) =
|
||||
fromSymbolOwner(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, constructorSymbol, constructorSymbol.owner.parentAsClass.typeParameters.size, origin)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user