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>>() {