diff options
author | Tor Norbye <tnorbye@google.com> | 2014-09-04 20:44:00 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-04 20:44:01 +0000 |
commit | fb5a02906f644d044eb0286bf27d413ba0e05216 (patch) | |
tree | bca7d49005d81d10c70bc3f547df041c636b4300 /python/src/com/jetbrains/python/psi/types/PyTypeChecker.java | |
parent | 9cde0e3c015174898df8b8f3672185941fad4786 (diff) | |
parent | d245f58efbfc26b13b9b9d5e52e6a83a0d76216c (diff) | |
download | idea-fb5a02906f644d044eb0286bf27d413ba0e05216.tar.gz |
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge"
Diffstat (limited to 'python/src/com/jetbrains/python/psi/types/PyTypeChecker.java')
-rw-r--r-- | python/src/com/jetbrains/python/psi/types/PyTypeChecker.java | 90 |
1 files changed, 43 insertions, 47 deletions
diff --git a/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java b/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java index 9881d6cc106c..2e7c58c8201c 100644 --- a/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java +++ b/python/src/com/jetbrains/python/psi/types/PyTypeChecker.java @@ -428,41 +428,39 @@ public class PyTypeChecker { public static AnalyzeCallResults analyzeCall(@NotNull PyBinaryExpression expr, @NotNull TypeEvalContext context) { final PsiPolyVariantReference ref = expr.getReference(PyResolveContext.noImplicits().withTypeEvalContext(context)); final ResolveResult[] resolveResult; - if (ref != null) { - resolveResult = ref.multiResolve(false); - AnalyzeCallResults firstResults = null; - for (ResolveResult result : resolveResult) { - final PsiElement resolved = result.getElement(); - if (resolved instanceof PyTypedElement) { - final PyTypedElement typedElement = (PyTypedElement)resolved; - final PyType type = context.getType(typedElement); - if (!(type instanceof PyFunctionType)) { - return null; - } - final Callable callable = ((PyFunctionType)type).getCallable(); - final boolean isRight = PyNames.isRightOperatorName(typedElement.getName()); - final PyExpression arg = isRight ? expr.getLeftExpression() : expr.getRightExpression(); - final PyExpression receiver = isRight ? expr.getRightExpression() : expr.getLeftExpression(); - final PyParameter[] parameters = callable.getParameterList().getParameters(); - if (parameters.length >= 2) { - final PyNamedParameter param = parameters[1].getAsNamed(); - if (arg != null && param != null) { - final Map<PyExpression, PyNamedParameter> arguments = new LinkedHashMap<PyExpression, PyNamedParameter>(); - arguments.put(arg, param); - final AnalyzeCallResults results = new AnalyzeCallResults(callable, receiver, arguments); - if (firstResults == null) { - firstResults = results; - } - if (match(context.getType(param), context.getType(arg), context)) { - return results; - } + resolveResult = ref.multiResolve(false); + AnalyzeCallResults firstResults = null; + for (ResolveResult result : resolveResult) { + final PsiElement resolved = result.getElement(); + if (resolved instanceof PyTypedElement) { + final PyTypedElement typedElement = (PyTypedElement)resolved; + final PyType type = context.getType(typedElement); + if (!(type instanceof PyFunctionType)) { + return null; + } + final Callable callable = ((PyFunctionType)type).getCallable(); + final boolean isRight = PyNames.isRightOperatorName(typedElement.getName()); + final PyExpression arg = isRight ? expr.getLeftExpression() : expr.getRightExpression(); + final PyExpression receiver = isRight ? expr.getRightExpression() : expr.getLeftExpression(); + final PyParameter[] parameters = callable.getParameterList().getParameters(); + if (parameters.length >= 2) { + final PyNamedParameter param = parameters[1].getAsNamed(); + if (arg != null && param != null) { + final Map<PyExpression, PyNamedParameter> arguments = new LinkedHashMap<PyExpression, PyNamedParameter>(); + arguments.put(arg, param); + final AnalyzeCallResults results = new AnalyzeCallResults(callable, receiver, arguments); + if (firstResults == null) { + firstResults = results; + } + if (match(context.getType(param), context.getType(arg), context)) { + return results; } } } } - if (firstResults != null) { - return firstResults; - } + } + if (firstResults != null) { + return firstResults; } return null; } @@ -471,22 +469,20 @@ public class PyTypeChecker { public static AnalyzeCallResults analyzeCall(@NotNull PySubscriptionExpression expr, @NotNull TypeEvalContext context) { final PsiReference ref = expr.getReference(PyResolveContext.noImplicits().withTypeEvalContext(context)); final PsiElement resolved; - if (ref != null) { - resolved = ref.resolve(); - if (resolved instanceof PyTypedElement) { - final PyType type = context.getType((PyTypedElement)resolved); - if (type instanceof PyFunctionType) { - final Callable callable = ((PyFunctionType)type).getCallable(); - final PyParameter[] parameters = callable.getParameterList().getParameters(); - if (parameters.length == 2) { - final PyNamedParameter param = parameters[1].getAsNamed(); - if (param != null) { - final Map<PyExpression, PyNamedParameter> arguments = new LinkedHashMap<PyExpression, PyNamedParameter>(); - final PyExpression arg = expr.getIndexExpression(); - if (arg != null) { - arguments.put(arg, param); - return new AnalyzeCallResults(callable, expr.getOperand(), arguments); - } + resolved = ref.resolve(); + if (resolved instanceof PyTypedElement) { + final PyType type = context.getType((PyTypedElement)resolved); + if (type instanceof PyFunctionType) { + final Callable callable = ((PyFunctionType)type).getCallable(); + final PyParameter[] parameters = callable.getParameterList().getParameters(); + if (parameters.length == 2) { + final PyNamedParameter param = parameters[1].getAsNamed(); + if (param != null) { + final Map<PyExpression, PyNamedParameter> arguments = new LinkedHashMap<PyExpression, PyNamedParameter>(); + final PyExpression arg = expr.getIndexExpression(); + if (arg != null) { + arguments.put(arg, param); + return new AnalyzeCallResults(callable, expr.getOperand(), arguments); } } } |