diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt index cdd206cc1b2..a74fd7e172b 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ClassGenerator.kt @@ -279,7 +279,7 @@ class ClassGenerator( else { val substitutor = TypeSubstitutor.create( - overridden.original.typeParameters.associate { + overridden.typeParameters.associate { val delegatedDefaultType = delegated.typeParameters[it.index].defaultType it.typeConstructor to TypeProjectionImpl(delegatedDefaultType) } diff --git a/compiler/testData/ir/irText/declarations/parameters/delegatedMembers.txt b/compiler/testData/ir/irText/declarations/parameters/delegatedMembers.txt index 9b3fede09da..0a8a8b5dd3b 100644 --- a/compiler/testData/ir/irText/declarations/parameters/delegatedMembers.txt +++ b/compiler/testData/ir/irText/declarations/parameters/delegatedMembers.txt @@ -1,45 +1,35 @@ FILE fqName: fileName:/delegatedMembers.kt - CLASS INTERFACE name:IBase modality:ABSTRACT visibility:public flags: + CLASS INTERFACE name:IBase modality:ABSTRACT visibility:public flags: superTypes:[kotlin.Any] $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:IBase flags: - superClasses: - CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Any modality:OPEN visibility:public flags: - TYPE_PARAMETER name:T index:0 variance: upperBounds:[kotlin.Any?] - superClassifiers: - CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Any modality:OPEN visibility:public flags: - FUN name:foo visibility:public modality:ABSTRACT <> ($this:IBase, x:kotlin.Int) returnType:Unit flags: + TYPE_PARAMETER name:T index:0 variance: superTypes:[kotlin.Any?] + FUN name:foo visibility:public modality:ABSTRACT <> ($this:IBase, x:kotlin.Int) returnType:kotlin.Unit flags: $this: VALUE_PARAMETER name: type:IBase flags: VALUE_PARAMETER name:x index:0 type:kotlin.Int flags: - PROPERTY name:bar type:kotlin.Int visibility:public modality:ABSTRACT flags:val - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:IBase) returnType:Int flags: - correspondingProperty: PROPERTY name:bar type:kotlin.Int visibility:public modality:ABSTRACT flags:val + PROPERTY name:bar visibility:public modality:ABSTRACT flags:val + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:IBase) returnType:kotlin.Int flags: + correspondingProperty: PROPERTY name:bar visibility:public modality:ABSTRACT flags:val $this: VALUE_PARAMETER name: type:IBase flags: - FUN name:qux visibility:public modality:ABSTRACT ($this:IBase, t:T, x:X) returnType:Unit flags: - TYPE_PARAMETER name:X index:0 variance: upperBounds:[kotlin.Any?] - superClassifiers: - CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Any modality:OPEN visibility:public flags: + FUN name:qux visibility:public modality:ABSTRACT ($this:IBase, t:T, x:X) returnType:kotlin.Unit flags: + TYPE_PARAMETER name:X index:0 variance: superTypes:[kotlin.Any?] $this: VALUE_PARAMETER name: type:IBase flags: VALUE_PARAMETER name:t index:0 type:T flags: VALUE_PARAMETER name:x index:1 type:X flags: - FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:Boolean flags: + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: overridden: - FUN IR_EXTERNAL_DECLARATION_STUB name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:Boolean flags: + FUN IR_EXTERNAL_DECLARATION_STUB name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: $this: VALUE_PARAMETER name: type:kotlin.Any flags: VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags: - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:Int flags: + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: overridden: - FUN IR_EXTERNAL_DECLARATION_STUB name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:Int flags: + FUN IR_EXTERNAL_DECLARATION_STUB name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: $this: VALUE_PARAMETER name: type:kotlin.Any flags: - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:String flags: + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: overridden: - FUN IR_EXTERNAL_DECLARATION_STUB name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:String flags: + FUN IR_EXTERNAL_DECLARATION_STUB name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: $this: VALUE_PARAMETER name: type:kotlin.Any flags: - CLASS CLASS name:Test modality:FINAL visibility:public flags: + CLASS CLASS name:Test modality:FINAL visibility:public flags: superTypes:[IBase] $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:Test flags: - superClasses: - CLASS INTERFACE name:IBase modality:ABSTRACT visibility:public flags: - TYPE_PARAMETER name:TT index:0 variance: upperBounds:[kotlin.Any?] - superClassifiers: - CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Any modality:OPEN visibility:public flags: + TYPE_PARAMETER name:TT index:0 variance: superTypes:[kotlin.Any?] CONSTRUCTOR visibility:public <> (impl:IBase) returnType:Test flags:primary VALUE_PARAMETER name:impl index:0 type:IBase flags: BLOCK_BODY @@ -48,12 +38,10 @@ FILE fqName: fileName:/delegatedMembers.kt FIELD DELEGATE name:Test$IBase$delegate type:IBase visibility:private flags:final EXPRESSION_BODY GET_VAR 'value-parameter impl: IBase' type=IBase origin=null - FUN DELEGATED_MEMBER name:qux visibility:public modality:OPEN ($this:Test, t:TT, x:X) returnType:Unit flags: + FUN DELEGATED_MEMBER name:qux visibility:public modality:OPEN ($this:Test, t:TT, x:X) returnType:kotlin.Unit flags: overridden: - FUN name:qux visibility:public modality:ABSTRACT ($this:IBase, t:T, x:X) returnType:Unit flags: - TYPE_PARAMETER name:X index:0 variance: upperBounds:[kotlin.Any?] - superClassifiers: - CLASS IR_EXTERNAL_DECLARATION_STUB CLASS name:Any modality:OPEN visibility:public flags: + FUN name:qux visibility:public modality:ABSTRACT ($this:IBase, t:T, x:X) returnType:kotlin.Unit flags: + TYPE_PARAMETER name:X index:0 variance: superTypes:[kotlin.Any?] $this: VALUE_PARAMETER name: type:Test flags: VALUE_PARAMETER name:t index:0 type:TT flags: VALUE_PARAMETER name:x index:1 type:X flags: @@ -64,9 +52,9 @@ FILE fqName: fileName:/delegatedMembers.kt receiver: GET_VAR 'this@Test: Test' type=Test origin=null t: GET_VAR 'value-parameter t: TT' type=TT origin=null x: GET_VAR 'value-parameter x: X' type=X origin=null - FUN DELEGATED_MEMBER name:foo visibility:public modality:OPEN <> ($this:Test, x:kotlin.Int) returnType:Unit flags: + FUN DELEGATED_MEMBER name:foo visibility:public modality:OPEN <> ($this:Test, x:kotlin.Int) returnType:kotlin.Unit flags: overridden: - FUN name:foo visibility:public modality:ABSTRACT <> ($this:IBase, x:kotlin.Int) returnType:Unit flags: + FUN name:foo visibility:public modality:ABSTRACT <> ($this:IBase, x:kotlin.Int) returnType:kotlin.Unit flags: $this: VALUE_PARAMETER name: type:Test flags: VALUE_PARAMETER name:x index:0 type:kotlin.Int flags: BLOCK_BODY @@ -74,28 +62,27 @@ FILE fqName: fileName:/delegatedMembers.kt $this: GET_FIELD '`Test$IBase$delegate`: IBase' type=IBase origin=null receiver: GET_VAR 'this@Test: Test' type=Test origin=null x: GET_VAR 'value-parameter x: Int' type=kotlin.Int origin=null - PROPERTY DELEGATED_MEMBER name:bar type:kotlin.Int visibility:public modality:OPEN flags:val - FUN DELEGATED_MEMBER name: visibility:public modality:OPEN <> ($this:Test) returnType:Int flags: - correspondingProperty: PROPERTY DELEGATED_MEMBER name:bar type:kotlin.Int visibility:public modality:OPEN flags:val + PROPERTY DELEGATED_MEMBER name:bar visibility:public modality:OPEN flags:val + FUN DELEGATED_MEMBER name: visibility:public modality:OPEN <> ($this:Test) returnType:kotlin.Int flags: + correspondingProperty: PROPERTY DELEGATED_MEMBER name:bar visibility:public modality:OPEN flags:val overridden: - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:IBase) returnType:Int flags: + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:IBase) returnType:kotlin.Int flags: $this: VALUE_PARAMETER name: type:Test flags: BLOCK_BODY RETURN type=kotlin.Nothing from='(): Int' CALL '(): Int' type=kotlin.Int origin=null $this: GET_FIELD '`Test$IBase$delegate`: IBase' type=IBase origin=null receiver: GET_VAR 'this@Test: Test' type=Test origin=null - FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:Boolean flags: + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: overridden: - FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:Boolean flags: + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean flags: $this: VALUE_PARAMETER name: type:kotlin.Any flags: VALUE_PARAMETER name:other index:0 type:kotlin.Any? flags: - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:Int flags: + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: overridden: - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:Int flags: + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int flags: $this: VALUE_PARAMETER name: type:kotlin.Any flags: - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:String flags: + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: overridden: - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:String flags: + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String flags: $this: VALUE_PARAMETER name: type:kotlin.Any flags: -