From 1188be90704bbfa08addea88f0a16db8bd3a55f8 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Wed, 4 Mar 2015 19:18:08 +0100 Subject: [PATCH] generate correct bytecode for constructors using infix call syntax #KT-4589 Fixed --- .../kotlin/codegen/ExpressionCodegen.java | 4 ++++ .../codegen/box/innerNested/innerInfixCall.kt | 15 +++++++++++++++ .../generated/BlackBoxCodegenTestGenerated.java | 6 ++++++ 3 files changed, 25 insertions(+) create mode 100644 compiler/testData/codegen/box/innerNested/innerInfixCall.kt diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index 5306c5f557e..82fc6e8d1b9 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2912,6 +2912,10 @@ public class ExpressionCodegen extends JetVisitor implem ResolvedCall resolvedCall = getResolvedCallWithAssert(expression, bindingContext); FunctionDescriptor descriptor = (FunctionDescriptor) resolvedCall.getResultingDescriptor(); + if (descriptor instanceof ConstructorDescriptor) { + return generateConstructorCall(resolvedCall, expressionType(expression)); + } + Callable callable = resolveToCallable(descriptor, false); if (callable instanceof IntrinsicMethod) { Type returnType = typeMapper.mapType(descriptor); diff --git a/compiler/testData/codegen/box/innerNested/innerInfixCall.kt b/compiler/testData/codegen/box/innerNested/innerInfixCall.kt new file mode 100644 index 00000000000..97441a3b1bc --- /dev/null +++ b/compiler/testData/codegen/box/innerNested/innerInfixCall.kt @@ -0,0 +1,15 @@ +class Z() { + + inner class Z2(val s: String) { + + } + + fun a(): String { + val s = Z() Z2 "OK" + return s.s + } +} + +fun box(): String { + return Z().a() +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java index 5d42a665cd0..164a70f4dbe 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -4042,6 +4042,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("innerInfixCall.kt") + public void testInnerInfixCall() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/innerInfixCall.kt"); + doTest(fileName); + } + @TestMetadata("innerLabeledThis.kt") public void testInnerLabeledThis() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/box/innerNested/innerLabeledThis.kt");