Fixed bug with IR parameter copying.
Constructors don't have their own type parameters but rather inherit them from the parent.
This commit is contained in:
committed by
Igor Chevdar
parent
1bef26c80e
commit
e640f01b4e
@@ -45,6 +45,7 @@ import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
|||||||
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
import org.jetbrains.kotlin.ir.types.impl.makeTypeProjection
|
||||||
import org.jetbrains.kotlin.ir.util.DumpIrTreeVisitor
|
import org.jetbrains.kotlin.ir.util.DumpIrTreeVisitor
|
||||||
import org.jetbrains.kotlin.ir.util.defaultType
|
import org.jetbrains.kotlin.ir.util.defaultType
|
||||||
|
import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -145,6 +146,8 @@ val IrSimpleFunction.isOverridableOrOverrides: Boolean get() = isOverridable ||
|
|||||||
val IrClass.isFinalClass: Boolean
|
val IrClass.isFinalClass: Boolean
|
||||||
get() = modality == Modality.FINAL && kind != ClassKind.ENUM_CLASS
|
get() = modality == Modality.FINAL && kind != ClassKind.ENUM_CLASS
|
||||||
|
|
||||||
|
val IrTypeParametersContainer.classIfConstructor get() = if (this is IrConstructor) parentAsClass else this
|
||||||
|
|
||||||
fun IrValueParameter.copyTo(
|
fun IrValueParameter.copyTo(
|
||||||
irFunction: IrFunction,
|
irFunction: IrFunction,
|
||||||
origin: IrDeclarationOrigin = this.origin,
|
origin: IrDeclarationOrigin = this.origin,
|
||||||
@@ -152,7 +155,10 @@ fun IrValueParameter.copyTo(
|
|||||||
startOffset: Int = this.startOffset,
|
startOffset: Int = this.startOffset,
|
||||||
endOffset: Int = this.endOffset,
|
endOffset: Int = this.endOffset,
|
||||||
name: Name = this.name,
|
name: Name = this.name,
|
||||||
type: IrType = this.type.remapTypeParameters(this.parent as IrTypeParametersContainer, irFunction),
|
type: IrType = this.type.remapTypeParameters(
|
||||||
|
(parent as IrTypeParametersContainer).classIfConstructor,
|
||||||
|
irFunction.classIfConstructor
|
||||||
|
),
|
||||||
varargElementType: IrType? = this.varargElementType
|
varargElementType: IrType? = this.varargElementType
|
||||||
): IrValueParameter {
|
): IrValueParameter {
|
||||||
val descriptor = WrappedValueParameterDescriptor(symbol.descriptor.annotations, symbol.descriptor.source)
|
val descriptor = WrappedValueParameterDescriptor(symbol.descriptor.annotations, symbol.descriptor.source)
|
||||||
|
|||||||
Reference in New Issue
Block a user