diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 559facf430b..d7d3d14cb08 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -121,8 +121,21 @@ public class CallResolver { @NotNull BasicCallResolutionContext context, @NotNull JetReferenceExpression functionReference, @NotNull Name name) { + return resolveCallWithGivenName(context, functionReference, name, true); + } + + @NotNull + public OverloadResolutionResults resolveCallWithGivenName( + @NotNull BasicCallResolutionContext context, + @NotNull JetReferenceExpression functionReference, + @NotNull Name name, + boolean allowVariableWithInvoke + ) { + List> collectors = + allowVariableWithInvoke ? CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES : + Collections.>singletonList(CallableDescriptorCollectors.FUNCTIONS); List> tasks = - TaskPrioritizer.computePrioritizedTasks(context, name, functionReference, CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES); + TaskPrioritizer.computePrioritizedTasks(context, name, functionReference, collectors); return doResolveCallOrGetCachedResults(ResolutionResultsCache.FUNCTION_MEMBER_TYPE, context, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, functionReference); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java index ca6369a307a..ab485aad1ad 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallTransformer.java @@ -200,7 +200,8 @@ public class CallTransformer { functionCall, context.checkArguments, context.dataFlowInfoForArguments); // 'invoke' call resolve - OverloadResolutionResults results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke")); + OverloadResolutionResults results = callResolver.resolveCallWithGivenName( + basicCallResolutionContext, task.reference, Name.identifier("invoke"), false); Collection> calls = ((OverloadResolutionResultsImpl)results).getResultingCalls(); return Collections2.transform(calls, new Function, ResolvedCallWithTrace>() { diff --git a/compiler/testData/diagnostics/tests/resolve/invoke/valNamedInvoke.kt b/compiler/testData/diagnostics/tests/resolve/invoke/valNamedInvoke.kt new file mode 100644 index 00000000000..548dba784c6 --- /dev/null +++ b/compiler/testData/diagnostics/tests/resolve/invoke/valNamedInvoke.kt @@ -0,0 +1,9 @@ +trait A + +fun foo(invoke: A.()->Unit, a: A) { + a.invoke() +} + +fun bar(invoke: Any.()->Any, a: Any) { + a.invoke() +} diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 91372f90588..22ad1b728b5 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -5983,6 +5983,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/resolve/invoke/kt4204-completeNestedCallsForInvoke.kt"); } + @TestMetadata("valNamedInvoke.kt") + public void testValNamedInvoke() throws Exception { + doTest("compiler/testData/diagnostics/tests/resolve/invoke/valNamedInvoke.kt"); + } + } @TestMetadata("compiler/testData/diagnostics/tests/resolve/nestedCalls")