From 42740c8b97d4f4a7791d86b07f4d127a667e16f0 Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Mon, 7 Oct 2019 17:43:34 +0300 Subject: [PATCH] Fix capturing of outer type parameters for classes declared inside init block --- .../codegen/box/regressions/kt24913.kt | 18 ++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++++ .../LightAnalysisModeTestGenerated.java | 5 +++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 +++++ .../kotlin/descriptors/typeParameterUtils.kt | 4 +++- .../semantics/IrJsCodegenBoxTestGenerated.java | 5 +++++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++++ 7 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/box/regressions/kt24913.kt diff --git a/compiler/testData/codegen/box/regressions/kt24913.kt b/compiler/testData/codegen/box/regressions/kt24913.kt new file mode 100644 index 00000000000..ef2ed878041 --- /dev/null +++ b/compiler/testData/codegen/box/regressions/kt24913.kt @@ -0,0 +1,18 @@ +// !DIAGNOSTICS: -UNUSED_VARIABLE + +class Outer (val v: T) { + val prop: Any? + + init { + class Inner(val v: T) { + override fun toString() = v.toString() + } + + val value: Inner = Inner(v) + prop = value + } +} + +fun box(): String { + return Outer("OK").prop.toString() +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index fef21898b64..11aa096c6be 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -23103,6 +23103,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/regressions/kt2318.kt"); } + @TestMetadata("kt24913.kt") + public void testKt24913() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt24913.kt"); + } + @TestMetadata("Kt2495Test.kt") public void testKt2495Test() throws Exception { runTest("compiler/testData/codegen/box/regressions/Kt2495Test.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 01ba40ac852..c5fc5e46255 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -23103,6 +23103,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/regressions/kt2318.kt"); } + @TestMetadata("kt24913.kt") + public void testKt24913() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt24913.kt"); + } + @TestMetadata("Kt2495Test.kt") public void testKt2495Test() throws Exception { runTest("compiler/testData/codegen/box/regressions/Kt2495Test.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index fc97a744559..1af6d052a9c 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -22003,6 +22003,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/regressions/kt2318.kt"); } + @TestMetadata("kt24913.kt") + public void testKt24913() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt24913.kt"); + } + @TestMetadata("Kt2495Test.kt") public void testKt2495Test() throws Exception { runTest("compiler/testData/codegen/box/regressions/Kt2495Test.kt"); diff --git a/core/descriptors/src/org/jetbrains/kotlin/descriptors/typeParameterUtils.kt b/core/descriptors/src/org/jetbrains/kotlin/descriptors/typeParameterUtils.kt index cc0f840c982..4bdd8ab8b4a 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/descriptors/typeParameterUtils.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/descriptors/typeParameterUtils.kt @@ -30,7 +30,9 @@ fun ClassifierDescriptorWithTypeParameters.computeConstructorTypeParameters(): L val parametersFromContainingFunctions = parents.takeWhile { it is CallableDescriptor } - .flatMap { (it as CallableDescriptor).typeParameters.asSequence() }.toList() + .filter { it !is ConstructorDescriptor } + .flatMap { (it as CallableDescriptor).typeParameters.asSequence() } + .toList() val containingClassTypeConstructorParameters = parents.firstIsInstanceOrNull()?.typeConstructor?.parameters.orEmpty() if (parametersFromContainingFunctions.isEmpty() && containingClassTypeConstructorParameters.isEmpty()) return declaredTypeParameters 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 debf16e1498..0d149478a79 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 @@ -17753,6 +17753,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/regressions/kt2246.kt"); } + @TestMetadata("kt24913.kt") + public void testKt24913() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt24913.kt"); + } + @TestMetadata("Kt2495Test.kt") public void testKt2495Test() throws Exception { runTest("compiler/testData/codegen/box/regressions/Kt2495Test.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 f3a8e2c3645..bf223d04a43 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 @@ -18908,6 +18908,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/regressions/kt2246.kt"); } + @TestMetadata("kt24913.kt") + public void testKt24913() throws Exception { + runTest("compiler/testData/codegen/box/regressions/kt24913.kt"); + } + @TestMetadata("Kt2495Test.kt") public void testKt2495Test() throws Exception { runTest("compiler/testData/codegen/box/regressions/Kt2495Test.kt");