KT-16669 Exception in PSI2IR on type alias constructor in supertypes list
This commit is contained in:
@@ -154,7 +154,7 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
|
||||
generateEnumSuperConstructorCall(irBlockBody, ktConstructor)
|
||||
}
|
||||
else {
|
||||
generateAnySuperConstructorCAll(irBlockBody, ktConstructor)
|
||||
generateAnySuperConstructorCall(irBlockBody, ktConstructor)
|
||||
}
|
||||
return
|
||||
}
|
||||
@@ -230,12 +230,12 @@ class BodyGenerator(val scopeOwner: DeclarationDescriptor, override val context:
|
||||
// Thus, super class should be Any.
|
||||
val superClass = classDescriptor.getSuperClassOrAny()
|
||||
assert(KotlinBuiltIns.isAny(superClass)) { "$classDescriptor: Super class should be any: $superClass" }
|
||||
generateAnySuperConstructorCAll(irBlockBody, ktClassOrObject)
|
||||
generateAnySuperConstructorCall(irBlockBody, ktClassOrObject)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun generateAnySuperConstructorCAll(irBlockBody: IrBlockBodyImpl, ktElement: KtElement) {
|
||||
private fun generateAnySuperConstructorCall(irBlockBody: IrBlockBodyImpl, ktElement: KtElement) {
|
||||
val anyConstructor = context.builtIns.any.constructors.single()
|
||||
irBlockBody.statements.add(IrDelegatingConstructorCallImpl(ktElement.startOffset, ktElement.endOffset, anyConstructor, null))
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.psi2ir.generators
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.descriptors.impl.LocalVariableDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.impl.TypeAliasConstructorDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrMemberAccessExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
@@ -105,8 +106,13 @@ class CallGenerator(statementGenerator: StatementGenerator): StatementGeneratorE
|
||||
IrGetValueImpl(startOffset, endOffset, descriptor, origin)
|
||||
|
||||
fun generateDelegatingConstructorCall(startOffset: Int, endOffset: Int, call: CallBuilder) : IrExpression {
|
||||
val descriptor = call.descriptor
|
||||
if (descriptor !is ClassConstructorDescriptor) throw AssertionError("Class constructor expected: $descriptor")
|
||||
val descriptor = call.descriptor.let { callDescriptor ->
|
||||
when (callDescriptor) {
|
||||
is ClassConstructorDescriptor -> callDescriptor
|
||||
is TypeAliasConstructorDescriptor -> callDescriptor.underlyingConstructorDescriptor
|
||||
else -> throw AssertionError("Unexpected constructor descriptor: $callDescriptor")
|
||||
}
|
||||
}
|
||||
|
||||
return call.callReceiver.call { dispatchReceiver, extensionReceiver ->
|
||||
val irCall = IrDelegatingConstructorCallImpl(startOffset, endOffset, descriptor, getTypeArguments(call.original))
|
||||
|
||||
Reference in New Issue
Block a user