EnumConstructorCall.fromSymbolDescriptor

This commit is contained in:
Georgy Bronnikov
2020-10-16 18:07:22 +03:00
parent 887dd10764
commit b588839752
3 changed files with 15 additions and 12 deletions
@@ -269,7 +269,7 @@ class BodyGenerator(
private fun generateEnumSuperConstructorCall(body: IrBlockBody, ktElement: KtElement, classDescriptor: ClassDescriptor) { private fun generateEnumSuperConstructorCall(body: IrBlockBody, ktElement: KtElement, classDescriptor: ClassDescriptor) {
val enumConstructor = context.builtIns.enum.constructors.single() val enumConstructor = context.builtIns.enum.constructors.single()
body.statements.add( body.statements.add(
IrEnumConstructorCallImpl( IrEnumConstructorCallImpl.fromSymbolDescriptor(
ktElement.startOffsetSkippingComments, ktElement.endOffset, ktElement.startOffsetSkippingComments, ktElement.endOffset,
context.irBuiltIns.unitType, context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(enumConstructor), context.symbolTable.referenceConstructor(enumConstructor),
@@ -287,7 +287,7 @@ class BodyGenerator(
fun generateEnumEntryInitializer(ktEnumEntry: KtEnumEntry, enumEntryDescriptor: ClassDescriptor): IrExpression { fun generateEnumEntryInitializer(ktEnumEntry: KtEnumEntry, enumEntryDescriptor: ClassDescriptor): IrExpression {
if (ktEnumEntry.declarations.isNotEmpty()) { if (ktEnumEntry.declarations.isNotEmpty()) {
val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!! val enumEntryConstructor = enumEntryDescriptor.unsubstitutedPrimaryConstructor!!
return IrEnumConstructorCallImpl( return IrEnumConstructorCallImpl.fromSymbolDescriptor(
ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset, ktEnumEntry.startOffsetSkippingComments, ktEnumEntry.endOffset,
context.irBuiltIns.unitType, context.irBuiltIns.unitType,
context.symbolTable.referenceConstructor(enumEntryConstructor), context.symbolTable.referenceConstructor(enumEntryConstructor),
@@ -34,16 +34,18 @@ class IrEnumConstructorCallImpl(
override val origin: IrStatementOrigin? override val origin: IrStatementOrigin?
get() = null get() = null
@ObsoleteDescriptorBasedAPI
constructor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrConstructorSymbol,
typeArgumentsCount: Int
) : this(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R { override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
return visitor.visitEnumConstructorCall(this, data) return visitor.visitEnumConstructorCall(this, data)
} }
companion object {
@ObsoleteDescriptorBasedAPI
fun fromSymbolDescriptor(
startOffset: Int,
endOffset: Int,
type: IrType,
symbol: IrConstructorSymbol,
typeArgumentsCount: Int
) = IrEnumConstructorCallImpl(startOffset, endOffset, type, symbol, typeArgumentsCount, symbol.descriptor.valueParameters.size)
}
} }
@@ -567,7 +567,8 @@ open class DeepCopyIrTreeWithSymbols(
expression.startOffset, expression.endOffset, expression.startOffset, expression.endOffset,
expression.type.remapType(), expression.type.remapType(),
newConstructor, newConstructor,
expression.typeArgumentsCount expression.typeArgumentsCount,
expression.valueArgumentsCount
).apply { ).apply {
copyRemappedTypeArgumentsFrom(expression) copyRemappedTypeArgumentsFrom(expression)
transformValueArguments(expression) transformValueArguments(expression)