diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index b93a5f47185..dc2048193a2 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -1246,11 +1246,11 @@ public class ExpressionCodegen extends JetVisitor { if(resolvedCall == null) { throw new CompilationException("Cannot resolve: " + callee.getText(), null, expression); } - receiver = StackValue.receiver(resolvedCall, receiver, this, null); DeclarationDescriptor funDescriptor = resolvedCall.getResultingDescriptor(); if (funDescriptor instanceof ConstructorDescriptor) { + receiver = StackValue.receiver(resolvedCall, receiver, this, null); return generateConstructorCall(expression, (JetSimpleNameExpression) callee, receiver); } else if (funDescriptor instanceof FunctionDescriptor) { @@ -1295,6 +1295,10 @@ public class ExpressionCodegen extends JetVisitor { return returnValueAsStackValue((FunctionDescriptor) fd, callReturnType); } else { + ResolvedCall resolvedCall = bindingContext.get(BindingContext.RESOLVED_CALL, expression.getCalleeExpression()); + assert resolvedCall != null; + receiver = StackValue.receiver(resolvedCall, receiver, this, null); + IntrinsicMethod intrinsic = (IntrinsicMethod) callable; List args = new ArrayList(); for (ValueArgument argument : expression.getValueArguments()) { diff --git a/compiler/testData/codegen/regressions/kt1406.kt b/compiler/testData/codegen/regressions/kt1406.kt new file mode 100644 index 00000000000..f66fdff9dff --- /dev/null +++ b/compiler/testData/codegen/regressions/kt1406.kt @@ -0,0 +1,26 @@ +package pack + +import java.util.Collection +import java.util.ArrayList +import java.util.regex.Pattern + +class C{ + public fun foo(){ + val items : Collection = java.util.Collections.singleton(Item()).sure() + val result = ArrayList() + val pattern: Pattern? = Pattern.compile("...") + items.filterTo(result) { + pattern.sure().matcher(it.name()).sure().matches() + } + } + + private fun Item.name() : String = "" +} + +class Item{ +} + +fun box() : String { + C().foo() + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java index 99f22f965e3..bb61e4ff654 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/PropertyGenTest.java @@ -199,6 +199,7 @@ public class PropertyGenTest extends CodegenTestCase { } public void testKt1170() throws Exception { + createEnvironmentWithFullJdk(); blackBoxFile("regressions/kt1170.kt"); } diff --git a/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java b/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java index bc9dc187f48..b1386f62dd5 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/StdlibTest.java @@ -116,4 +116,8 @@ public class StdlibTest extends CodegenTestCase { throw t instanceof Exception ? (Exception)t : new RuntimeException(t); } } + + public void testKt1406() throws Exception { + blackBoxFile("regressions/kt1406.kt"); + } }