diff --git a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 6c4e8b43e6f..e898dc1c878 100644 --- a/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -1477,6 +1477,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { runTest("compiler/testData/codegen/box/bridges/kt12416.kt"); diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt index 2134fcf7ac5..d2309d11fcf 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/IrBasedDescriptors.kt @@ -635,13 +635,7 @@ open class IrBasedClassDescriptor(owner: IrClass) : ClassDescriptor, IrBasedDecl } private fun collectTypeParameters(): List = - generateSequence(owner as IrTypeParametersContainer, - { current -> - val parent = current.parent as? IrTypeParametersContainer - if (parent is IrClass && current is IrClass && !current.isInner) null - else parent - }) - .flatMap { it.typeParameters } + owner.typeConstructorParameters .map { it.toIrBasedDescriptor() } .toList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt index 17d07f4982e..56c6d5ed28a 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/descriptors/WrappedDescriptors.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.types.classifierOrFail import org.jetbrains.kotlin.ir.types.toKotlinType +import org.jetbrains.kotlin.ir.types.typeConstructorParameters import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.constants.* @@ -612,13 +613,7 @@ open class WrappedClassDescriptor : ClassDescriptor, WrappedDeclarationDescripto } private fun collectTypeParameters(): List = - generateSequence(owner as IrTypeParametersContainer, - { current -> - val parent = current.parent as? IrTypeParametersContainer - if (parent is IrClass && current is IrClass && !current.isInner) null - else parent - }) - .flatMap { it.typeParameters } + owner.typeConstructorParameters .map { it.descriptor } .toList() diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt index 6bfe07779c8..f7f14c8288d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/types/irTypes.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrTypeParameter +import org.jetbrains.kotlin.ir.declarations.IrTypeParametersContainer import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.symbols.IrClassSymbol import org.jetbrains.kotlin.ir.symbols.IrClassifierSymbol @@ -149,10 +150,19 @@ val IrClassSymbol.starProjectedType: IrSimpleType get() = IrSimpleTypeImpl( this, hasQuestionMark = false, - arguments = owner.typeParameters.map { IrStarProjectionImpl }, + arguments = owner.typeConstructorParameters.map { IrStarProjectionImpl }.toList(), annotations = emptyList() ) +val IrClass.typeConstructorParameters: Sequence + get() = generateSequence(this as IrTypeParametersContainer, + { current -> + val parent = current.parent as? IrTypeParametersContainer + if (parent is IrClass && current is IrClass && !current.isInner) null + else parent + }) + .flatMap { it.typeParameters } + fun IrClassifierSymbol.typeWithParameters(parameters: List): IrSimpleType = typeWith(parameters.map { it.defaultType }) diff --git a/compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt b/compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt new file mode 100644 index 00000000000..b304450a2a3 --- /dev/null +++ b/compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt @@ -0,0 +1,14 @@ + +class Outer { + inner class Inner + + fun withInner(block: Inner.() -> String) = Inner().block() +} + +fun withOuter(block: Outer.() -> String) = Outer().block() + +fun box() = withOuter { + withInner { + "OK" + } +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 15da4f904f5..faa85333856 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -1497,6 +1497,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { runTest("compiler/testData/codegen/box/bridges/kt12416.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 61e8d84ba9d..c5514bad51d 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -1497,6 +1497,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { runTest("compiler/testData/codegen/box/bridges/kt12416.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index eb0b9a52b57..2169f0d43a6 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -1477,6 +1477,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { runTest("compiler/testData/codegen/box/bridges/kt12416.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index 8a93f451b35..4fb20b28d39 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -1082,6 +1082,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("jsName.kt") public void testJsName() throws Exception { runTest("compiler/testData/codegen/box/bridges/jsName.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index ba4dc21b9da..1575cf9e650 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -1082,6 +1082,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("jsName.kt") public void testJsName() throws Exception { runTest("compiler/testData/codegen/box/bridges/jsName.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index b0ebe3915a4..7da05baf7ee 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -1082,6 +1082,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("jsName.kt") public void testJsName() throws Exception { runTest("compiler/testData/codegen/box/bridges/jsName.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java index ba7392a379a..4fe8dec78c2 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java @@ -937,6 +937,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest runTest("compiler/testData/codegen/box/bridges/genericProperty.kt"); } + @TestMetadata("innerClassTypeParameters.kt") + public void testInnerClassTypeParameters() throws Exception { + runTest("compiler/testData/codegen/box/bridges/innerClassTypeParameters.kt"); + } + @TestMetadata("kt12416.kt") public void testKt12416() throws Exception { runTest("compiler/testData/codegen/box/bridges/kt12416.kt");