Refactoring: extracted isInvokeCallOnVariable

This commit is contained in:
Svetlana Isakova
2014-03-18 09:06:04 +04:00
parent a194756327
commit c7087d170e
3 changed files with 16 additions and 8 deletions
@@ -399,7 +399,7 @@ public class CallResolver {
@NotNull OverloadResolutionResultsImpl<D> results, @NotNull OverloadResolutionResultsImpl<D> results,
@NotNull TracingStrategy tracing @NotNull TracingStrategy tracing
) { ) {
if (context.call.getCallType() == Call.CallType.INVOKE) return; if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return;
if (!results.isSingleResult()) { if (!results.isSingleResult()) {
if (results.getResultCode() == INCOMPLETE_TYPE_INFERENCE) { if (results.getResultCode() == INCOMPLETE_TYPE_INFERENCE) {
argumentTypeResolver.checkTypesWithNoCallee(context, RESOLVE_FUNCTION_ARGUMENTS); argumentTypeResolver.checkTypesWithNoCallee(context, RESOLVE_FUNCTION_ARGUMENTS);
@@ -417,7 +417,7 @@ public class CallResolver {
@NotNull OverloadResolutionResultsImpl<D> results, @NotNull OverloadResolutionResultsImpl<D> results,
@NotNull TracingStrategy tracing @NotNull TracingStrategy tracing
) { ) {
if (context.call.getCallType() == Call.CallType.INVOKE) return results; if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return results;
if (results.isSingleResult()) { if (results.isSingleResult()) {
Set<ValueArgument> unmappedArguments = results.getResultingCall().getCallToCompleteTypeArgumentInference().getUnmappedArguments(); Set<ValueArgument> unmappedArguments = results.getResultingCall().getCallToCompleteTypeArgumentInference().getUnmappedArguments();
@@ -21,12 +21,12 @@ import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.Call; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.psi.CallKey;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext; import org.jetbrains.jet.lang.resolve.calls.context.BasicCallResolutionContext;
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintPosition; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintPosition;
import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystem; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystem;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ExpressionReceiver;
import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
@@ -104,7 +104,7 @@ public class CallResolverUtil {
@Nullable @Nullable
public static CallKey createCallKey(@NotNull BasicCallResolutionContext context) { public static CallKey createCallKey(@NotNull BasicCallResolutionContext context) {
if (context.call.getCallType() == Call.CallType.INVOKE) { if (isInvokeCallOnVariable(context.call)) {
return null; return null;
} }
PsiElement callElement = context.call.getCallElement(); PsiElement callElement = context.call.getCallElement();
@@ -146,4 +146,12 @@ public class CallResolverUtil {
} }
return false; return false;
} }
public static boolean isInvokeCallOnVariable(@NotNull Call call) {
if (call.getCallType() != Call.CallType.INVOKE) return false;
ReceiverValue thisObject = call.getThisObject();
//calleeExpressionAsThisObject for invoke is always ExpressionReceiver, see CallForImplicitInvoke
JetExpression expression = ((ExpressionReceiver) thisObject).getExpression();
return expression instanceof JetSimpleNameExpression;
}
} }
@@ -324,7 +324,7 @@ public class CandidateResolver {
public <D extends CallableDescriptor> void completeNestedCallsInference( public <D extends CallableDescriptor> void completeNestedCallsInference(
@NotNull CallCandidateResolutionContext<D> context @NotNull CallCandidateResolutionContext<D> context
) { ) {
if (context.call.getCallType() == Call.CallType.INVOKE) return; if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return;
ResolvedCallImpl<D> resolvedCall = context.candidateCall; ResolvedCallImpl<D> resolvedCall = context.candidateCall;
for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) { for (Map.Entry<ValueParameterDescriptor, ResolvedValueArgument> entry : resolvedCall.getValueArguments().entrySet()) {
ValueParameterDescriptor parameterDescriptor = entry.getKey(); ValueParameterDescriptor parameterDescriptor = entry.getKey();
@@ -398,7 +398,7 @@ public class CandidateResolver {
} }
private void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> arguments) { private void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext<?> context, @NotNull Collection<? extends ValueArgument> arguments) {
if (context.call.getCallType() == Call.CallType.INVOKE) return; if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return;
if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return; if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return;
for (ValueArgument argument : arguments) { for (ValueArgument argument : arguments) {