do not try properties named 'invoke' when resolve 'invoke'

This commit is contained in:
Svetlana Isakova
2014-01-22 17:58:48 +04:00
parent b51e3dc464
commit 1c4db84d92
4 changed files with 30 additions and 2 deletions
@@ -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<FunctionDescriptor> resolveCallWithGivenName(
@NotNull BasicCallResolutionContext context,
@NotNull JetReferenceExpression functionReference,
@NotNull Name name,
boolean allowVariableWithInvoke
) {
List<CallableDescriptorCollector<? extends CallableDescriptor>> collectors =
allowVariableWithInvoke ? CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES :
Collections.<CallableDescriptorCollector<? extends CallableDescriptor>>singletonList(CallableDescriptorCollectors.FUNCTIONS);
List<ResolutionTask<CallableDescriptor, FunctionDescriptor>> tasks =
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, functionReference, CallableDescriptorCollectors.FUNCTIONS_AND_VARIABLES);
TaskPrioritizer.<CallableDescriptor, FunctionDescriptor>computePrioritizedTasks(context, name, functionReference, collectors);
return doResolveCallOrGetCachedResults(ResolutionResultsCache.FUNCTION_MEMBER_TYPE,
context, tasks, CallTransformer.FUNCTION_CALL_TRANSFORMER, functionReference);
}
@@ -200,7 +200,8 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
functionCall, context.checkArguments, context.dataFlowInfoForArguments);
// 'invoke' call resolve
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(basicCallResolutionContext, task.reference, Name.identifier("invoke"));
OverloadResolutionResults<FunctionDescriptor> results = callResolver.resolveCallWithGivenName(
basicCallResolutionContext, task.reference, Name.identifier("invoke"), false);
Collection<ResolvedCallWithTrace<FunctionDescriptor>> calls = ((OverloadResolutionResultsImpl<FunctionDescriptor>)results).getResultingCalls();
return Collections2.transform(calls, new Function<ResolvedCallWithTrace<FunctionDescriptor>, ResolvedCallWithTrace<FunctionDescriptor>>() {
@@ -0,0 +1,9 @@
trait A
fun foo(invoke: A.()->Unit, a: A) {
a.invoke()
}
fun bar(invoke: Any.()->Any, a: Any) {
a.invoke()
}
@@ -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")