From c7087d170e80b8577ce67d1eafc19f8266551340 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 18 Mar 2014 09:06:04 +0400 Subject: [PATCH] Refactoring: extracted isInvokeCallOnVariable --- .../jet/lang/resolve/calls/CallResolver.java | 4 ++-- .../jet/lang/resolve/calls/CallResolverUtil.java | 16 ++++++++++++---- .../lang/resolve/calls/CandidateResolver.java | 4 ++-- 3 files changed, 16 insertions(+), 8 deletions(-) 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 bf50c0e3723..a40fbf35d31 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 @@ -399,7 +399,7 @@ public class CallResolver { @NotNull OverloadResolutionResultsImpl results, @NotNull TracingStrategy tracing ) { - if (context.call.getCallType() == Call.CallType.INVOKE) return; + if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return; if (!results.isSingleResult()) { if (results.getResultCode() == INCOMPLETE_TYPE_INFERENCE) { argumentTypeResolver.checkTypesWithNoCallee(context, RESOLVE_FUNCTION_ARGUMENTS); @@ -417,7 +417,7 @@ public class CallResolver { @NotNull OverloadResolutionResultsImpl results, @NotNull TracingStrategy tracing ) { - if (context.call.getCallType() == Call.CallType.INVOKE) return results; + if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return results; if (results.isSingleResult()) { Set unmappedArguments = results.getResultingCall().getCallToCompleteTypeArgumentInference().getUnmappedArguments(); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java index 955672de4be..6d79a52df7c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolverUtil.java @@ -21,12 +21,12 @@ import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; -import org.jetbrains.jet.lang.psi.Call; -import org.jetbrains.jet.lang.psi.CallKey; -import org.jetbrains.jet.lang.psi.JetExpression; +import org.jetbrains.jet.lang.psi.*; 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.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.lang.KotlinBuiltIns; @@ -104,7 +104,7 @@ public class CallResolverUtil { @Nullable public static CallKey createCallKey(@NotNull BasicCallResolutionContext context) { - if (context.call.getCallType() == Call.CallType.INVOKE) { + if (isInvokeCallOnVariable(context.call)) { return null; } PsiElement callElement = context.call.getCallElement(); @@ -146,4 +146,12 @@ public class CallResolverUtil { } 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; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java index 0c108d01432..16119e0ca6c 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CandidateResolver.java @@ -324,7 +324,7 @@ public class CandidateResolver { public void completeNestedCallsInference( @NotNull CallCandidateResolutionContext context ) { - if (context.call.getCallType() == Call.CallType.INVOKE) return; + if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return; ResolvedCallImpl resolvedCall = context.candidateCall; for (Map.Entry entry : resolvedCall.getValueArguments().entrySet()) { ValueParameterDescriptor parameterDescriptor = entry.getKey(); @@ -398,7 +398,7 @@ public class CandidateResolver { } private void completeNestedCallsForNotResolvedInvocation(@NotNull CallResolutionContext context, @NotNull Collection arguments) { - if (context.call.getCallType() == Call.CallType.INVOKE) return; + if (CallResolverUtil.isInvokeCallOnVariable(context.call)) return; if (context.checkArguments == CheckValueArgumentsMode.DISABLED) return; for (ValueArgument argument : arguments) {