diff --git a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index a14ad3bed92..ac8cedd2378 100644 --- a/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/idea/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -693,6 +693,10 @@ public class ExpressionCodegen extends JetVisitor { if (callee instanceof JetSimpleNameExpression) { DeclarationDescriptor funDescriptor = bindingContext.resolveReferenceExpression((JetSimpleNameExpression) callee); + if (funDescriptor == null) { + throw new CompilationException("Cannot resolve: " + callee.getText()); + } + if (funDescriptor instanceof ConstructorDescriptor) { generateConstructorCall(expression, (JetSimpleNameExpression) callee); } diff --git a/idea/src/org/jetbrains/jet/lang/types/JetStandardClasses.java b/idea/src/org/jetbrains/jet/lang/types/JetStandardClasses.java index 7bfaf8700e0..071b4049cc7 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetStandardClasses.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetStandardClasses.java @@ -153,7 +153,7 @@ public class JetStandardClasses { ClassDescriptorImpl receiverFunction = new ClassDescriptorImpl( STANDARD_CLASSES_NAMESPACE, Collections.emptyList(), - "ReceiverFunction" + i); + "ExtensionFunction" + i); List parameters = createTypeParameters(i, receiverFunction); parameters.add(0, TypeParameterDescriptor.createWithDefaultBound( receiverFunction, diff --git a/idea/testData/codegen/classes/extensionClosure.jet b/idea/testData/codegen/classes/extensionClosure.jet new file mode 100644 index 00000000000..6db68d6a190 --- /dev/null +++ b/idea/testData/codegen/classes/extensionClosure.jet @@ -0,0 +1,11 @@ +fun box() : String { + val answer = apply("OK", { String.() : Int => + length() + }) + + return if (answer == 2) "OK" else "FAIL" +} + +fun apply(arg:String, f : {String.() : Int}) : Int { + return arg.f() +} diff --git a/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java b/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java index b3b96d74a68..6be33e761e0 100644 --- a/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java +++ b/idea/tests/org/jetbrains/jet/codegen/ClosuresGenTest.java @@ -19,4 +19,8 @@ public class ClosuresGenTest extends CodegenTestCase { public void testClosureWithParameterAndBoxing() throws Exception { blackBoxFile("classes/closureWithParameterAndBoxing.jet"); } + + public void testExtensionClosure() throws Exception { + blackBoxFile("classes/extensionClosure.jet"); + } }