From e775cc697e54146685d03b8d96891ac6af353003 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Wed, 28 Dec 2016 17:52:07 +0100 Subject: [PATCH] Fix for KT-15447: Compiler backend error: "Don't know how to generate outer expression for class" #KT-15447 Fixed --- .../codegen/binding/CodegenAnnotatingVisitor.java | 4 ---- .../box/callableReference/property/kt15447.kt | 12 ++++++++++++ .../callableReference/property/kt15447.txt | 3 +++ .../codegen/ir/IrBlackBoxCodegenTestGenerated.java | 6 ++++++ .../kotlin/codegen/BlackBoxCodegenTestGenerated.java | 6 ++++++ .../LightAnalysisModeCodegenTestGenerated.java | 6 ++++++ .../js/test/semantics/JsCodegenBoxTestGenerated.java | 6 ++++++ 7 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 compiler/testData/codegen/box/callableReference/property/kt15447.kt create mode 100644 compiler/testData/codegen/light-analysis/callableReference/property/kt15447.txt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java index 182aef58442..51d2c0bef42 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/binding/CodegenAnnotatingVisitor.java @@ -340,11 +340,7 @@ class CodegenAnnotatingVisitor extends KtVisitorVoid { closure.setCaptureReceiverType(receiverType); } - classStack.push(classDescriptor); - nameStack.push(name); super.visitCallableReferenceExpression(expression); - nameStack.pop(); - classStack.pop(); } @NotNull diff --git a/compiler/testData/codegen/box/callableReference/property/kt15447.kt b/compiler/testData/codegen/box/callableReference/property/kt15447.kt new file mode 100644 index 00000000000..d1d9a817df9 --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/property/kt15447.kt @@ -0,0 +1,12 @@ +//WITH_RUNTIME + +fun box(): String { + var methodVar = "OK" + + fun localMethod() : String + { + return lazy { methodVar }::value.get() + } + + return localMethod() +} \ No newline at end of file diff --git a/compiler/testData/codegen/light-analysis/callableReference/property/kt15447.txt b/compiler/testData/codegen/light-analysis/callableReference/property/kt15447.txt new file mode 100644 index 00000000000..69fc876bd3b --- /dev/null +++ b/compiler/testData/codegen/light-analysis/callableReference/property/kt15447.txt @@ -0,0 +1,3 @@ +public final class Kt15447Kt { + public final static @org.jetbrains.annotations.NotNull method box(): java.lang.String +} diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index ff5ed810abc..60d8d2e26e2 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -2086,6 +2086,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes doTest(fileName); } + @TestMetadata("kt15447.kt") + public void testKt15447() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt15447.kt"); + doTest(fileName); + } + @TestMetadata("kt6870_privatePropertyReference.kt") public void testKt6870_privatePropertyReference() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt6870_privatePropertyReference.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 0b12785b8e3..201db3093b7 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -2086,6 +2086,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("kt15447.kt") + public void testKt15447() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt15447.kt"); + doTest(fileName); + } + @TestMetadata("kt6870_privatePropertyReference.kt") public void testKt6870_privatePropertyReference() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt6870_privatePropertyReference.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java index 3e946bb00ee..0284afe4976 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeCodegenTestGenerated.java @@ -2086,6 +2086,12 @@ public class LightAnalysisModeCodegenTestGenerated extends AbstractLightAnalysis doTest(fileName); } + @TestMetadata("kt15447.kt") + public void testKt15447() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt15447.kt"); + doTest(fileName); + } + @TestMetadata("kt6870_privatePropertyReference.kt") public void testKt6870_privatePropertyReference() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt6870_privatePropertyReference.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 6ca008fc951..1b8b6362008 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 @@ -2549,6 +2549,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("kt15447.kt") + public void testKt15447() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt15447.kt"); + doTest(fileName); + } + @TestMetadata("kt6870_privatePropertyReference.kt") public void testKt6870_privatePropertyReference() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/callableReference/property/kt6870_privatePropertyReference.kt");