From 3019a471c5bef4dcfd7863c870d8ccf6b931d069 Mon Sep 17 00:00:00 2001 From: Andrey Vlasovskikh Date: Fri, 18 Nov 2011 22:31:12 +0400 Subject: [PATCH] Shared TypeEvalContext for all inspections in the current session --- .../codeInsight/dataflow/scope/ScopeUtil.java | 16 ------------ .../imports/PyImportOptimizer.java | 6 ++++- .../PyArgumentEqualDefaultInspection.java | 25 ++++++++++++------- .../PyAugmentAssignmentInspection.java | 13 ++++++---- .../PyBroadExceptionInspection.java | 13 ++++++---- .../inspections/PyByteLiteralInspection.java | 13 ++++++---- .../PyCallingNonCallableInspection.java | 10 +++++--- .../PyChainedComparisonsInspection.java | 12 ++++++--- .../PyClassicStyleClassInspection.java | 13 ++++++---- .../PyComparisonWithNoneInspection.java | 13 ++++++---- .../inspections/PyDecoratorInspection.java | 13 ++++++---- .../PyDefaultArgumentInspection.java | 13 ++++++---- .../inspections/PyDeprecationInspection.java | 9 +++---- .../inspections/PyDictCreationInspection.java | 15 ++++++----- .../PyDictDuplicateKeysInspection.java | 12 +++++---- .../inspections/PyDocstringInspection.java | 12 +++++---- .../PyExceptionInheritInspection.java | 15 ++++++----- .../PyFromFutureImportInspection.java | 13 ++++++---- .../PyInitNewSignatureInspection.java | 16 ++++++------ .../inspections/PyInspectionVisitor.java | 14 ++++++----- .../inspections/PyListCreationInspection.java | 13 ++++++---- .../PyMandatoryEncodingInspection.java | 13 ++++++---- .../PyMethodFirstArgAssignmentInspection.java | 11 +++++--- .../PyMethodOverridingInspection.java | 13 ++++++---- .../PyMethodParametersInspection.java | 15 +++++------ .../PyMissingConstructorInspection.java | 13 ++++++---- .../PyNestedDecoratorsInspection.java | 13 ++++++---- .../PyOldStyleClassesInspection.java | 13 ++++++---- .../PyPropertyDefinitionInspection.java | 2 +- .../PyRaisingNewStyleClassInspection.java | 16 ++++++------ .../PyRedeclarationInspection.java | 15 ++++++----- .../PyRedundantParenthesesInspection.java | 15 ++++++++--- .../PyReturnFromInitInspection.java | 15 +++++------ .../PySetFunctionToLiteralInspection.java | 12 ++++++--- .../PySimplifyBooleanCheckInspection.java | 18 +++++++------ .../PySingleQuotedDocstringInspection.java | 12 ++++++--- .../PyStatementEffectInspection.java | 6 ++--- .../PyStringExceptionInspection.java | 13 ++++++---- .../PyTrailingSemicolonInspection.java | 14 +++++++---- .../PyTupleAssignmentBalanceInspection.java | 15 ++++++----- .../inspections/PyTypeCheckerInspection.java | 2 +- .../PyUnboundLocalVariableInspection.java | 4 +-- .../PyUnnecessaryBackslashInspection.java | 11 +++++--- .../PyUnreachableCodeInspection.java | 12 ++++++--- .../PyUnresolvedReferencesInspection.java | 9 ++++--- .../inspections/PyUnusedLocalInspection.java | 9 +++++-- .../PyUnusedLocalInspectionVisitor.java | 10 +++----- .../python/psi/impl/PyBaseElementImpl.java | 6 +++-- .../python/psi/resolve/PyResolveContext.java | 3 ++- .../python/psi/types/TypeEvalContext.java | 17 ++++++------- 50 files changed, 354 insertions(+), 252 deletions(-) diff --git a/python/src/com/jetbrains/python/codeInsight/dataflow/scope/ScopeUtil.java b/python/src/com/jetbrains/python/codeInsight/dataflow/scope/ScopeUtil.java index 5ae0f33bb94f..5086564fdb98 100644 --- a/python/src/com/jetbrains/python/codeInsight/dataflow/scope/ScopeUtil.java +++ b/python/src/com/jetbrains/python/codeInsight/dataflow/scope/ScopeUtil.java @@ -2,7 +2,6 @@ package com.jetbrains.python.codeInsight.dataflow.scope; import com.intellij.codeInsight.controlflow.ControlFlow; import com.intellij.codeInsight.controlflow.Instruction; -import com.intellij.codeInsight.dataflow.DFALimitExceededException; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache; @@ -77,21 +76,6 @@ public class ScopeUtil { return null; } - public static boolean isDeclaredAndBoundInScope(PsiElement anchor, String name) throws DFALimitExceededException { - if (name != null) { - final ScopeOwner owner = getScopeOwner(anchor); - if (owner != null) { - final Scope scope = ControlFlowCache.getScope(owner); - for (ScopeVariable v : scope.getAllDeclaredVariables()) { - if (v.getName().equals(name)) { - return true; - } - } - } - } - return false; - } - @NotNull public static Collection getReadWriteElements(String name, ScopeOwner scopeOwner, boolean isReadAccess, boolean isWriteAccess) { ControlFlow flow = ControlFlowCache.getControlFlow(scopeOwner); diff --git a/python/src/com/jetbrains/python/codeInsight/imports/PyImportOptimizer.java b/python/src/com/jetbrains/python/codeInsight/imports/PyImportOptimizer.java index 3a60612f34dc..d245752c8b12 100644 --- a/python/src/com/jetbrains/python/codeInsight/imports/PyImportOptimizer.java +++ b/python/src/com/jetbrains/python/codeInsight/imports/PyImportOptimizer.java @@ -1,5 +1,6 @@ package com.jetbrains.python.codeInsight.imports; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.lang.ImportOptimizer; import com.intellij.psi.PsiFile; import com.jetbrains.python.inspections.PyUnresolvedReferencesInspection; @@ -19,7 +20,10 @@ public class PyImportOptimizer implements ImportOptimizer { @NotNull public Runnable processFile(PsiFile file) { - final PyUnresolvedReferencesInspection.Visitor visitor = new PyUnresolvedReferencesInspection.Visitor(null, Collections.emptyList()); + final LocalInspectionToolSession session = new LocalInspectionToolSession(file, 0, file.getTextLength()); + final PyUnresolvedReferencesInspection.Visitor visitor = new PyUnresolvedReferencesInspection.Visitor(null, + session, + Collections.emptyList()); file.accept(new PyRecursiveElementVisitor() { @Override public void visitPyElement(PyElement node) { diff --git a/python/src/com/jetbrains/python/inspections/PyArgumentEqualDefaultInspection.java b/python/src/com/jetbrains/python/inspections/PyArgumentEqualDefaultInspection.java index 15b1c96fa6d6..1756b1031eac 100644 --- a/python/src/com/jetbrains/python/inspections/PyArgumentEqualDefaultInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyArgumentEqualDefaultInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -8,9 +9,9 @@ import com.jetbrains.python.PyBundle; import com.jetbrains.python.actions.RemoveArgumentEqualDefaultQuickFix; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; -import com.jetbrains.python.psi.resolve.PyResolveContext; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.HashSet; import java.util.Map; @@ -34,14 +35,20 @@ public class PyArgumentEqualDefaultInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); + } + + @Override + public boolean isEnabledByDefault() { + return false; } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override @@ -87,7 +94,7 @@ public class PyArgumentEqualDefaultInspection extends PyInspection { } } - private static boolean isEqual(PyExpression key, PyExpression defaultValue) { + private boolean isEqual(PyExpression key, PyExpression defaultValue) { if (key instanceof PyNumericLiteralExpression && defaultValue instanceof PyNumericLiteralExpression) { if (key.getText().equals(defaultValue.getText())) return true; @@ -98,10 +105,10 @@ public class PyArgumentEqualDefaultInspection extends PyInspection { } else { PsiReference keyRef = key instanceof PyReferenceExpression - ? ((PyReferenceExpression) key).getReference(PyResolveContext.noImplicits()) + ? ((PyReferenceExpression) key).getReference(resolveWithoutImplicits()) : key.getReference(); PsiReference defRef = defaultValue instanceof PyReferenceExpression - ? ((PyReferenceExpression) defaultValue).getReference(PyResolveContext.noImplicits()) + ? ((PyReferenceExpression) defaultValue).getReference(resolveWithoutImplicits()) : defaultValue.getReference(); if (keyRef != null && defRef != null) { PsiElement keyResolve = keyRef.resolve(); diff --git a/python/src/com/jetbrains/python/inspections/PyAugmentAssignmentInspection.java b/python/src/com/jetbrains/python/inspections/PyAugmentAssignmentInspection.java index 08e337b1249b..634adb86f0a3 100644 --- a/python/src/com/jetbrains/python/inspections/PyAugmentAssignmentInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyAugmentAssignmentInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.tree.TokenSet; @@ -12,6 +13,7 @@ import com.jetbrains.python.psi.types.PyType; import com.jetbrains.python.psi.types.PyTypeChecker; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -28,14 +30,15 @@ public class PyAugmentAssignmentInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyBroadExceptionInspection.java b/python/src/com/jetbrains/python/inspections/PyBroadExceptionInspection.java index 28f848d9bf97..d3f4d90b77f8 100644 --- a/python/src/com/jetbrains/python/inspections/PyBroadExceptionInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyBroadExceptionInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -10,6 +11,7 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.types.PyType; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -27,14 +29,15 @@ public class PyBroadExceptionInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyByteLiteralInspection.java b/python/src/com/jetbrains/python/inspections/PyByteLiteralInspection.java index 0c4637834e0b..9d9e04d96d6b 100644 --- a/python/src/com/jetbrains/python/inspections/PyByteLiteralInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyByteLiteralInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; @@ -10,6 +11,7 @@ import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyStringLiteralExpression; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; @@ -32,14 +34,15 @@ public class PyByteLiteralInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyCallingNonCallableInspection.java b/python/src/com/jetbrains/python/inspections/PyCallingNonCallableInspection.java index 4679b11609ad..4c7610eaa071 100644 --- a/python/src/com/jetbrains/python/inspections/PyCallingNonCallableInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyCallingNonCallableInspection.java @@ -26,13 +26,15 @@ public class PyCallingNonCallableInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - public Visitor(@NotNull ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java b/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java index 0c47546f1a15..a526e9920cbd 100644 --- a/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyChainedComparisonsInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; @@ -8,6 +9,7 @@ import com.jetbrains.python.actions.ChainedComparisonsQuickFix; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -25,16 +27,18 @@ public class PyChainedComparisonsInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { boolean myIsLeft; boolean myIsRight; - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyClassicStyleClassInspection.java b/python/src/com/jetbrains/python/inspections/PyClassicStyleClassInspection.java index 965543ea35a6..dd17b6c92d3c 100644 --- a/python/src/com/jetbrains/python/inspections/PyClassicStyleClassInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyClassicStyleClassInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElementVisitor; @@ -9,6 +10,7 @@ import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyExpression; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -28,14 +30,15 @@ public class PyClassicStyleClassInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java b/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java index 1c5dc082c448..53a49fc15889 100644 --- a/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyComparisonWithNoneInspection.java @@ -1,6 +1,7 @@ package com.jetbrains.python.inspections; import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; @@ -13,6 +14,7 @@ import com.jetbrains.python.psi.PyExpression; import com.jetbrains.python.psi.PyReferenceExpression; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -27,14 +29,15 @@ public class PyComparisonWithNoneInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyDecoratorInspection.java b/python/src/com/jetbrains/python/inspections/PyDecoratorInspection.java index 5da42d2800b3..b70d5d73c982 100644 --- a/python/src/com/jetbrains/python/inspections/PyDecoratorInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDecoratorInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; @@ -10,6 +11,7 @@ import com.jetbrains.python.psi.PyDecoratorList; import com.jetbrains.python.psi.PyFunction; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -27,14 +29,15 @@ public class PyDecoratorInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java b/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java index 84a6a71babf9..b40e173a1c1c 100644 --- a/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDefaultArgumentInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; @@ -7,6 +8,7 @@ import com.jetbrains.python.actions.PyDefaultArgumentQuickFix; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -21,14 +23,15 @@ public class PyDefaultArgumentInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java b/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java index e13e08ba42ec..a119489b548e 100644 --- a/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDeprecationInspection.java @@ -9,7 +9,6 @@ import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.PyReferenceExpression; -import com.jetbrains.python.psi.resolve.PyResolveContext; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,14 +27,14 @@ public class PyDeprecationInspection extends PyInspection { @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, - boolean isOnTheFly, + final boolean isOnTheFly, @NotNull LocalInspectionToolSession session) { - return new Visitor(holder); + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - public Visitor(@Nullable final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyDictCreationInspection.java b/python/src/com/jetbrains/python/inspections/PyDictCreationInspection.java index 778aad164878..827e43cd71d7 100644 --- a/python/src/com/jetbrains/python/inspections/PyDictCreationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDictCreationInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiElement; @@ -11,6 +12,7 @@ import com.jetbrains.python.actions.DictCreationQuickFix; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -28,14 +30,15 @@ public class PyDictCreationInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override @@ -92,7 +95,7 @@ loop: @Override public void visitPyReferenceExpression(PyReferenceExpression node) { super.visitPyReferenceExpression(node); - final PsiPolyVariantReference ref = node.getReference(); + final PsiPolyVariantReference ref = node.getReference(resolveWithoutImplicits()); if (ref.isReferenceTo(target)) { refs.add(node); } diff --git a/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java b/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java index 5ca22eeee5bb..8fc8ee292f19 100644 --- a/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDictDuplicateKeysInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; @@ -28,14 +29,15 @@ public class PyDictDuplicateKeysInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java b/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java index 0079640495b7..331073cc8fe8 100644 --- a/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyDocstringInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.SuppressIntentionAction; import com.intellij.lang.ASTNode; @@ -44,14 +45,15 @@ public class PyDocstringInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyExceptionInheritInspection.java b/python/src/com/jetbrains/python/inspections/PyExceptionInheritInspection.java index df32212e0eda..71bb911cd2b7 100644 --- a/python/src/com/jetbrains/python/inspections/PyExceptionInheritInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyExceptionInheritInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -7,6 +8,7 @@ import com.jetbrains.python.PyBundle; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -21,14 +23,15 @@ public class PyExceptionInheritInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override @@ -41,7 +44,7 @@ public class PyExceptionInheritInspection extends PyInspection { if (expression instanceof PyCallExpression) { PyExpression callee = ((PyCallExpression)expression).getCallee(); if (callee instanceof PyReferenceExpression) { - PsiElement psiElement = ((PyReferenceExpression)callee).getReference().resolve(); + PsiElement psiElement = ((PyReferenceExpression)callee).getReference(resolveWithoutImplicits()).resolve(); if (psiElement instanceof PyClass) { PyClass aClass = (PyClass) psiElement; for (PyClassRef pyClass : aClass.iterateAncestors()) { diff --git a/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java b/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java index fe0a19bf8644..074463fea1a6 100644 --- a/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyFromFutureImportInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; @@ -9,6 +10,7 @@ import com.jetbrains.python.actions.MoveFromFutureImportQuickFix; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.List; @@ -25,14 +27,15 @@ public class PyFromFutureImportInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyInitNewSignatureInspection.java b/python/src/com/jetbrains/python/inspections/PyInitNewSignatureInspection.java index 0b816d30c88e..c85ccde869e9 100644 --- a/python/src/com/jetbrains/python/inspections/PyInitNewSignatureInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyInitNewSignatureInspection.java @@ -1,8 +1,7 @@ package com.jetbrains.python.inspections; -import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; -import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; import com.jetbrains.python.PyNames; @@ -10,9 +9,9 @@ import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.PyParameterList; import com.jetbrains.python.psi.impl.PyBuiltinCache; -import com.jetbrains.python.psi.search.PySuperMethodsSearch; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Detect and report incompatibilities between __new__ and __init__ signatures. @@ -27,14 +26,15 @@ public class PyInitNewSignatureInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyInspectionVisitor.java b/python/src/com/jetbrains/python/inspections/PyInspectionVisitor.java index b33585c0cea4..ec815e1759d6 100644 --- a/python/src/com/jetbrains/python/inspections/PyInspectionVisitor.java +++ b/python/src/com/jetbrains/python/inspections/PyInspectionVisitor.java @@ -17,23 +17,20 @@ import org.jetbrains.annotations.Nullable; */ public abstract class PyInspectionVisitor extends PyElementVisitor { @Nullable private final ProblemsHolder myHolder; + @NotNull private final LocalInspectionToolSession mySession; protected final TypeEvalContext myTypeEvalContext; public static final Key INSPECTION_TYPE_EVAL_CONTEXT = Key.create("PyInspectionTypeEvalContext"); - public PyInspectionVisitor(@Nullable final ProblemsHolder holder) { - myHolder = holder; - myTypeEvalContext = TypeEvalContext.fastStubOnly(holder == null ? null : holder.getFile()); - } - public PyInspectionVisitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { myHolder = holder; + mySession = session; TypeEvalContext context; synchronized (INSPECTION_TYPE_EVAL_CONTEXT) { context = session.getUserData(INSPECTION_TYPE_EVAL_CONTEXT); if (context == null) { - context = TypeEvalContext.fastStubOnly(holder == null ? null : holder.getFile()); + context = TypeEvalContext.fastStubOnly(session.getFile()); session.putUserData(INSPECTION_TYPE_EVAL_CONTEXT, context); } } @@ -48,6 +45,11 @@ public abstract class PyInspectionVisitor extends PyElementVisitor { return myHolder; } + @NotNull + public LocalInspectionToolSession getSession() { + return mySession; + } + protected final void registerProblem(final PsiElement element, final String message){ if (element == null || element.getTextLength() == 0){ diff --git a/python/src/com/jetbrains/python/inspections/PyListCreationInspection.java b/python/src/com/jetbrains/python/inspections/PyListCreationInspection.java index 57d0a76f7d86..25c0466ead58 100644 --- a/python/src/com/jetbrains/python/inspections/PyListCreationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyListCreationInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.util.PsiTreeUtil; @@ -8,6 +9,7 @@ import com.jetbrains.python.actions.ListCreationQuickFix; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User :catherine @@ -22,14 +24,15 @@ public class PyListCreationInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java b/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java index 5ffb7f4344a2..08a861a58e52 100644 --- a/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMandatoryEncodingInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElementVisitor; @@ -9,6 +10,7 @@ import com.jetbrains.python.actions.AddEncodingQuickFix; import com.jetbrains.python.psi.PyFile; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; import java.awt.event.ActionEvent; @@ -32,14 +34,15 @@ public class PyMandatoryEncodingInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyMethodFirstArgAssignmentInspection.java b/python/src/com/jetbrains/python/inspections/PyMethodFirstArgAssignmentInspection.java index 695d5a0e332d..0716e5c352cc 100644 --- a/python/src/com/jetbrains/python/inspections/PyMethodFirstArgAssignmentInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMethodFirstArgAssignmentInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -26,13 +27,15 @@ public class PyMethodFirstArgAssignmentInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } private void complain(PsiElement element, String name) { diff --git a/python/src/com/jetbrains/python/inspections/PyMethodOverridingInspection.java b/python/src/com/jetbrains/python/inspections/PyMethodOverridingInspection.java index 1ffdc2b5e455..2be2d6ce1d33 100644 --- a/python/src/com/jetbrains/python/inspections/PyMethodOverridingInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMethodOverridingInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -10,6 +11,7 @@ import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.search.PySuperMethodsSearch; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -23,14 +25,15 @@ public class PyMethodOverridingInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyMethodParametersInspection.java b/python/src/com/jetbrains/python/inspections/PyMethodParametersInspection.java index b43c5254e9e7..fe2277c4b204 100644 --- a/python/src/com/jetbrains/python/inspections/PyMethodParametersInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMethodParametersInspection.java @@ -1,6 +1,7 @@ package com.jetbrains.python.inspections; import com.intellij.codeHighlighting.HighlightDisplayLevel; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; @@ -36,17 +37,17 @@ public class PyMethodParametersInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { + private Ref myPossibleZopeRef = null; - private Ref myPossibleZopeRef; - - public Visitor(final ProblemsHolder holder) { - super(holder); - myPossibleZopeRef = null; + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Nullable diff --git a/python/src/com/jetbrains/python/inspections/PyMissingConstructorInspection.java b/python/src/com/jetbrains/python/inspections/PyMissingConstructorInspection.java index 4aca010f7ee7..ef9dee54d843 100644 --- a/python/src/com/jetbrains/python/inspections/PyMissingConstructorInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyMissingConstructorInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -10,6 +11,7 @@ import com.jetbrains.python.actions.AddCallSuperQuickFix; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -26,14 +28,15 @@ public class PyMissingConstructorInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyNestedDecoratorsInspection.java b/python/src/com/jetbrains/python/inspections/PyNestedDecoratorsInspection.java index c64d4afa5fc2..cd8f221b9c93 100644 --- a/python/src/com/jetbrains/python/inspections/PyNestedDecoratorsInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyNestedDecoratorsInspection.java @@ -1,6 +1,7 @@ package com.jetbrains.python.inspections; import com.intellij.codeHighlighting.HighlightDisplayLevel; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; @@ -11,6 +12,7 @@ import com.jetbrains.python.psi.PyDecoratorList; import com.jetbrains.python.psi.PyFunction; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Checks nested decorators, especially whatever comes after @classmethod. @@ -32,14 +34,15 @@ public class PyNestedDecoratorsInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyOldStyleClassesInspection.java b/python/src/com/jetbrains/python/inspections/PyOldStyleClassesInspection.java index fb2c02d979ff..4e109dbcb525 100644 --- a/python/src/com/jetbrains/python/inspections/PyOldStyleClassesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyOldStyleClassesInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -8,6 +9,7 @@ import com.jetbrains.python.PyBundle; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -24,14 +26,15 @@ public class PyOldStyleClassesInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyPropertyDefinitionInspection.java b/python/src/com/jetbrains/python/inspections/PyPropertyDefinitionInspection.java index 5caab4dda612..e39725fa017d 100644 --- a/python/src/com/jetbrains/python/inspections/PyPropertyDefinitionInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyPropertyDefinitionInspection.java @@ -132,7 +132,7 @@ public class PyPropertyDefinitionInspection extends PyInspection { assert argument != null : "Parameter mapped to null argument"; Callable callable = null; if (argument instanceof PyReferenceExpression) { - PsiElement resolved = ((PyReferenceExpression)argument).getReference().resolve(); + PsiElement resolved = ((PyReferenceExpression)argument).getReference(resolveWithoutImplicits()).resolve(); if (resolved instanceof PyFunction) callable = (PyFunction)resolved; else if (resolved instanceof PyLambdaExpression) callable = (PyLambdaExpression)resolved; else { diff --git a/python/src/com/jetbrains/python/inspections/PyRaisingNewStyleClassInspection.java b/python/src/com/jetbrains/python/inspections/PyRaisingNewStyleClassInspection.java index 78216360e293..f8d05db58e15 100644 --- a/python/src/com/jetbrains/python/inspections/PyRaisingNewStyleClassInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyRaisingNewStyleClassInspection.java @@ -1,6 +1,6 @@ package com.jetbrains.python.inspections; -import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; @@ -9,6 +9,7 @@ import com.jetbrains.python.PyBundle; import com.jetbrains.python.psi.*; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -23,14 +24,15 @@ public class PyRaisingNewStyleClassInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override @@ -50,7 +52,7 @@ public class PyRaisingNewStyleClassInspection extends PyInspection { if (expression instanceof PyCallExpression) { final PyExpression callee = ((PyCallExpression)expression).getCallee(); if (callee instanceof PyReferenceExpression) { - final PsiElement psiElement = ((PyReferenceExpression)callee).getReference().resolve(); + final PsiElement psiElement = ((PyReferenceExpression)callee).getReference(resolveWithoutImplicits()).resolve(); if (psiElement instanceof PyClass) { if (((PyClass)psiElement).isNewStyleClass()) { registerProblem(expression, "Raising a new style class"); diff --git a/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java b/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java index cc4ffa50b4eb..991d73dfa1d2 100644 --- a/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyRedeclarationInspection.java @@ -2,6 +2,7 @@ package com.jetbrains.python.inspections; import com.intellij.codeHighlighting.HighlightDisplayLevel; import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -12,6 +13,7 @@ import com.jetbrains.python.psi.resolve.PyResolveUtil; import com.jetbrains.python.psi.resolve.ResolveProcessor; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Annotates declarations that unconditionally ovverride other without these being used. @@ -33,16 +35,17 @@ public class PyRedeclarationInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } - + // TODO: This function is a shame; replace with a proper interface. private static String _getKind(PsiElement elt) { if (elt instanceof PyFunction) return PyBundle.message("GNAME.function"); diff --git a/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java b/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java index 2321395c7445..1e31741b573d 100644 --- a/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyRedundantParenthesesInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.ui.MultipleCheckboxOptionsPanel; import com.intellij.psi.PsiElement; @@ -31,15 +32,21 @@ public class PyRedundantParenthesesInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder, myIgnorePercOperator, myIgnoreTupleInReturn); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session, myIgnorePercOperator, myIgnoreTupleInReturn); } private static class Visitor extends PyInspectionVisitor { private final boolean myIgnorePercOperator; private final boolean myIgnoreTupleInReturn; - public Visitor(final ProblemsHolder holder, boolean ignorePercOperator, boolean ignoreTupleInReturn) { - super(holder); + + public Visitor(@NotNull ProblemsHolder holder, + @NotNull LocalInspectionToolSession session, + boolean ignorePercOperator, + boolean ignoreTupleInReturn) { + super(holder, session); myIgnorePercOperator = ignorePercOperator; myIgnoreTupleInReturn = ignoreTupleInReturn; } diff --git a/python/src/com/jetbrains/python/inspections/PyReturnFromInitInspection.java b/python/src/com/jetbrains/python/inspections/PyReturnFromInitInspection.java index 21fb7cd9400d..4734959276e3 100644 --- a/python/src/com/jetbrains/python/inspections/PyReturnFromInitInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyReturnFromInitInspection.java @@ -1,6 +1,6 @@ package com.jetbrains.python.inspections; -import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -9,7 +9,6 @@ import com.jetbrains.python.PyNames; import com.jetbrains.python.psi.PyClass; import com.jetbrains.python.psi.PyFunction; import com.jetbrains.python.psi.PyReturnStatement; -import com.jetbrains.python.psi.PyStatement; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -30,14 +29,16 @@ public class PyReturnFromInitInspection extends PyInspection { } @NotNull - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); //To change body of overridden methods use File | Settings | File Templates. + @Override + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } public void visitPyFunction(PyFunction function) { diff --git a/python/src/com/jetbrains/python/inspections/PySetFunctionToLiteralInspection.java b/python/src/com/jetbrains/python/inspections/PySetFunctionToLiteralInspection.java index 6ea8413dbbae..7e8ac92c7daf 100644 --- a/python/src/com/jetbrains/python/inspections/PySetFunctionToLiteralInspection.java +++ b/python/src/com/jetbrains/python/inspections/PySetFunctionToLiteralInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -11,6 +12,7 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.impl.PyBuiltinCache; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -29,13 +31,15 @@ public class PySetFunctionToLiteralInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java b/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java index 3be9791cd698..f54140db9746 100644 --- a/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java +++ b/python/src/com/jetbrains/python/inspections/PySimplifyBooleanCheckInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; @@ -26,14 +27,15 @@ public class PySimplifyBooleanCheckInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override @@ -41,14 +43,14 @@ public class PySimplifyBooleanCheckInspection extends PyInspection { super.visitPyConditionalStatementPart(node); final PyExpression condition = node.getCondition(); if (condition != null) { - condition.accept(new PyBinaryExpressionVisitor(getHolder())); + condition.accept(new PyBinaryExpressionVisitor(getHolder(), getSession())); } } } private static class PyBinaryExpressionVisitor extends PyInspectionVisitor { - public PyBinaryExpressionVisitor(@Nullable final ProblemsHolder holder) { - super(holder); + public PyBinaryExpressionVisitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PySingleQuotedDocstringInspection.java b/python/src/com/jetbrains/python/inspections/PySingleQuotedDocstringInspection.java index f7ac67862eef..6ffdcdc7e4d9 100644 --- a/python/src/com/jetbrains/python/inspections/PySingleQuotedDocstringInspection.java +++ b/python/src/com/jetbrains/python/inspections/PySingleQuotedDocstringInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElementVisitor; @@ -12,6 +13,7 @@ import com.jetbrains.python.psi.PyStringLiteralExpression; import com.jetbrains.python.psi.impl.PyStringLiteralExpressionImpl; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * User: catherine @@ -29,13 +31,15 @@ public class PySingleQuotedDocstringInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java b/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java index 322a19acd8ff..8f04d388b1b6 100644 --- a/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyStatementEffectInspection.java @@ -109,7 +109,7 @@ public class PyStatementEffectInspection extends PyInspection { PyType type = myTypeEvalContext.getType(binary.getLeftExpression()); if (type != null && !type.isBuiltin(myTypeEvalContext) && - type.resolveMember(method, null, AccessDirection.READ, PyResolveContext.defaultContext()) != null) { + type.resolveMember(method, null, AccessDirection.READ, resolveWithoutImplicits()) != null) { return true; } final PyExpression rhs = binary.getRightExpression(); @@ -117,7 +117,7 @@ public class PyStatementEffectInspection extends PyInspection { type = myTypeEvalContext.getType(rhs); if (type != null) { String rmethod = "__r" + method.substring(2); // __add__ -> __radd__ - if (!type.isBuiltin(myTypeEvalContext) && type.resolveMember(rmethod, null, AccessDirection.READ, PyResolveContext.defaultContext()) != null) { + if (!type.isBuiltin(myTypeEvalContext) && type.resolveMember(rmethod, null, AccessDirection.READ, resolveWithoutImplicits()) != null) { return true; } } @@ -134,7 +134,7 @@ public class PyStatementEffectInspection extends PyInspection { } else if (expression instanceof PyReferenceExpression) { PyReferenceExpression referenceExpression = (PyReferenceExpression)expression; - ResolveResult[] results = referenceExpression.getReference().multiResolve(true); + ResolveResult[] results = referenceExpression.getReference(resolveWithoutImplicits()).multiResolve(true); for (ResolveResult res : results) { if (res.getElement() instanceof PyFunction) { registerProblem(expression, "Statement seems to have no effect and can be replaced with function call to have effect", new StatementEffectFunctionCallQuickFix()); diff --git a/python/src/com/jetbrains/python/inspections/PyStringExceptionInspection.java b/python/src/com/jetbrains/python/inspections/PyStringExceptionInspection.java index 80f85ab45c63..973223d3969f 100644 --- a/python/src/com/jetbrains/python/inspections/PyStringExceptionInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyStringExceptionInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; @@ -8,6 +9,7 @@ import com.jetbrains.python.psi.PyRaiseStatement; import com.jetbrains.python.psi.PyStringLiteralExpression; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -22,14 +24,15 @@ public class PyStringExceptionInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java b/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java index 1544161ea135..81dedcee785a 100644 --- a/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyTrailingSemicolonInspection.java @@ -1,8 +1,10 @@ package com.jetbrains.python.inspections; import com.intellij.codeInspection.LocalInspectionTool; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.tree.TokenSet; import com.intellij.psi.PsiWhiteSpace; import com.jetbrains.python.PyBundle; @@ -12,6 +14,7 @@ import com.jetbrains.python.psi.PyElementVisitor; import com.jetbrains.python.psi.PyStatement; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -25,14 +28,15 @@ public class PyTrailingSemicolonInspection extends PyInspection { @NotNull @Override - public PyElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyTupleAssignmentBalanceInspection.java b/python/src/com/jetbrains/python/inspections/PyTupleAssignmentBalanceInspection.java index 943c357a6c2e..ea8bd0775208 100644 --- a/python/src/com/jetbrains/python/inspections/PyTupleAssignmentBalanceInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyTupleAssignmentBalanceInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; @@ -9,6 +10,7 @@ import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.resolve.PyResolveContext; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * @author Alexey.Ivanov @@ -23,14 +25,15 @@ public class PyTupleAssignmentBalanceInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override @@ -42,7 +45,7 @@ public class PyTupleAssignmentBalanceInspection extends PyInspection { if (lhsExpression instanceof PyParenthesizedExpression) // PY-4360 lhsExpression = ((PyParenthesizedExpression)lhsExpression).getContainedExpression(); if (assignedValue instanceof PyReferenceExpression) { // PY-4357 - assignedValue = ((PyReferenceExpression)assignedValue).followAssignmentsChain(PyResolveContext.defaultContext()).getElement(); + assignedValue = ((PyReferenceExpression)assignedValue).followAssignmentsChain(resolveWithoutImplicits()).getElement(); } if (lhsExpression instanceof PyTupleExpression && assignedValue instanceof PyTupleExpression) { int valuesLength = ((PyTupleExpression)assignedValue).getElements().length; diff --git a/python/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java b/python/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java index 0a7099e8b7e0..0ce454ba7970 100644 --- a/python/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyTypeCheckerInspection.java @@ -32,7 +32,7 @@ public class PyTypeCheckerInspection extends PyInspection { if (LOG.isDebugEnabled()) { session.putUserData(TIME_KEY, System.nanoTime()); } - return new PyInspectionVisitor(holder) { + return new PyInspectionVisitor(holder, session) { // TODO: Visit decorators with arguments @Override public void visitPyCallExpression(PyCallExpression node) { diff --git a/python/src/com/jetbrains/python/inspections/PyUnboundLocalVariableInspection.java b/python/src/com/jetbrains/python/inspections/PyUnboundLocalVariableInspection.java index 4ed98072ea47..f7728784f8a4 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnboundLocalVariableInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnboundLocalVariableInspection.java @@ -42,7 +42,7 @@ public class PyUnboundLocalVariableInspection extends PyInspection { @NotNull public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull final LocalInspectionToolSession session) { session.putUserData(LARGE_FUNCTIONS_KEY, new HashSet()); - return new PyInspectionVisitor(holder){ + return new PyInspectionVisitor(holder, session) { @Override public void visitPyReferenceExpression(final PyReferenceExpression node) { if (CythonLanguageDialect._isDisabledFor(node) || MakoLanguage._isDisabledFor(node)) { @@ -101,7 +101,7 @@ public class PyUnboundLocalVariableInspection extends PyInspection { return; } if (variable == null) { - final PsiElement resolved = node.getReference().resolve(); + final PsiElement resolved = node.getReference(resolveWithoutImplicits()).resolve(); final boolean isBuiltin = PyBuiltinCache.getInstance(node).hasInBuiltins(resolved); if (owner instanceof PyClass) { if (isBuiltin || ScopeUtil.getDeclarationScopeOwner(owner, name) != null) { diff --git a/python/src/com/jetbrains/python/inspections/PyUnnecessaryBackslashInspection.java b/python/src/com/jetbrains/python/inspections/PyUnnecessaryBackslashInspection.java index 592e18d3799f..e218eb671661 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnnecessaryBackslashInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnnecessaryBackslashInspection.java @@ -1,5 +1,6 @@ package com.jetbrains.python.inspections; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -30,13 +31,15 @@ public class PyUnnecessaryBackslashInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } private static class Visitor extends PyInspectionVisitor { - public Visitor(ProblemsHolder holder) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java b/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java index 2ac8f908d634..b44332c60b9f 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnreachableCodeInspection.java @@ -3,6 +3,7 @@ package com.jetbrains.python.inspections; import com.intellij.codeInsight.controlflow.ControlFlow; import com.intellij.codeInsight.controlflow.ControlFlowUtil; import com.intellij.codeInsight.controlflow.Instruction; +import com.intellij.codeInspection.LocalInspectionToolSession; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; @@ -12,6 +13,7 @@ import com.jetbrains.python.codeInsight.controlflow.ControlFlowCache; import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; @@ -28,13 +30,15 @@ public class PyUnreachableCodeInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, final boolean isOnTheFly) { - return new Visitor(holder); + public PsiElementVisitor buildVisitor(@NotNull final ProblemsHolder holder, + boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + return new Visitor(holder, session); } public static class Visitor extends PyInspectionVisitor { - public Visitor(final ProblemsHolder holder) { - super(holder); + public Visitor(@NotNull ProblemsHolder holder, @NotNull LocalInspectionToolSession session) { + super(holder, session); } @Override diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index 80f887d7b1ab..fe0fe9fbbe79 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -72,9 +72,10 @@ public class PyUnresolvedReferencesInspection extends PyInspection { @NotNull @Override - public PsiElementVisitor buildVisitor(@Nullable final ProblemsHolder holder, final boolean isOnTheFly, + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + final boolean isOnTheFly, @NotNull final LocalInspectionToolSession session) { - final Visitor visitor = new Visitor(holder, ignoredIdentifiers); + final Visitor visitor = new Visitor(holder, session, ignoredIdentifiers); // buildVisitor() will be called on injected files in the same session - don't overwrite if we already have one final Visitor existingVisitor = session.getUserData(KEY); if (existingVisitor == null) { @@ -104,8 +105,8 @@ public class PyUnresolvedReferencesInspection extends PyInspection { private Set myAllImports = Collections.synchronizedSet(new HashSet()); private final ImmutableSet myIgnoredIdentifiers; - public Visitor(final ProblemsHolder holder, List ignoredIdentifiers) { - super(holder); + public Visitor(@Nullable ProblemsHolder holder, @NotNull LocalInspectionToolSession session, List ignoredIdentifiers) { + super(holder, session); myIgnoredIdentifiers = ImmutableSet.copyOf(ignoredIdentifiers); } diff --git a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspection.java b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspection.java index fa8271dfcfb1..242d22d6d6a7 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspection.java @@ -28,8 +28,13 @@ public class PyUnusedLocalInspection extends PyInspection { } @NotNull - public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) { - final PyUnusedLocalInspectionVisitor visitor = new PyUnusedLocalInspectionVisitor(holder, ignoreTupleUnpacking, ignoreLambdaParameters, + public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, + final boolean isOnTheFly, + @NotNull LocalInspectionToolSession session) { + final PyUnusedLocalInspectionVisitor visitor = new PyUnusedLocalInspectionVisitor(holder, + session, + ignoreTupleUnpacking, + ignoreLambdaParameters, ignoreLoopIterationVariables); // buildVisitor() will be called on injected files in the same session - don't overwrite if we already have one final PyUnusedLocalInspectionVisitor existingVisitor = session.getUserData(KEY); diff --git a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java index ab0c9b190f66..45a28f988c1b 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java +++ b/python/src/com/jetbrains/python/inspections/PyUnusedLocalInspectionVisitor.java @@ -3,10 +3,7 @@ package com.jetbrains.python.inspections; import com.intellij.codeInsight.CodeInsightUtilBase; import com.intellij.codeInsight.controlflow.ControlFlowUtil; import com.intellij.codeInsight.controlflow.Instruction; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ProblemHighlightType; -import com.intellij.codeInspection.ProblemsHolder; +import com.intellij.codeInspection.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.command.CommandProcessor; import com.intellij.openapi.extensions.Extensions; @@ -48,11 +45,12 @@ class PyUnusedLocalInspectionVisitor extends PyInspectionVisitor { private final HashSet myUnusedElements; private final HashSet myUsedElements; - public PyUnusedLocalInspectionVisitor(final ProblemsHolder holder, + public PyUnusedLocalInspectionVisitor(@NotNull ProblemsHolder holder, + @NotNull LocalInspectionToolSession session, boolean ignoreTupleUnpacking, boolean ignoreLambdaParameters, boolean ignoreRangeIterationVariables) { - super(holder); + super(holder, session); myIgnoreTupleUnpacking = ignoreTupleUnpacking; myIgnoreLambdaParameters = ignoreLambdaParameters; myIgnoreRangeIterationVariables = ignoreRangeIterationVariables; diff --git a/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java index b09af63f2d58..2580baafcbab 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyBaseElementImpl.java @@ -147,8 +147,10 @@ public class PyBaseElementImpl extends StubBasedPsiElemen private static void addReferences(int offset, PsiElement element, final Collection outReferences) { final PsiReference[] references; if (element instanceof PyReferenceOwner) { - final PyResolveContext context = PyResolveContext.defaultContext() - .withTypeEvalContext(TypeEvalContext.fast(element.getContainingFile())); + final PsiFile file = element.getContainingFile(); + final PyResolveContext context = file != null ? + PyResolveContext.defaultContext().withTypeEvalContext(TypeEvalContext.fast(file)) : + PyResolveContext.defaultContext(); final PsiPolyVariantReference reference = ((PyReferenceOwner)element).getReference(context); references = reference == null ? PsiReference.EMPTY_ARRAY : new PsiReference[] {reference}; } diff --git a/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java b/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java index f40b94692765..c61374a541db 100644 --- a/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java +++ b/python/src/com/jetbrains/python/psi/resolve/PyResolveContext.java @@ -1,6 +1,7 @@ package com.jetbrains.python.psi.resolve; import com.jetbrains.python.psi.types.TypeEvalContext; +import org.jetbrains.annotations.NotNull; /** * @author yole @@ -46,7 +47,7 @@ public class PyResolveContext { return ourNoPropertiesContext; } - public PyResolveContext withTypeEvalContext(TypeEvalContext context) { + public PyResolveContext withTypeEvalContext(@NotNull TypeEvalContext context) { return new PyResolveContext(myAllowImplicits, myAllowProperties, context); } diff --git a/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java b/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java index 54a6cb96546a..2923f6c7d2d5 100644 --- a/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java +++ b/python/src/com/jetbrains/python/psi/types/TypeEvalContext.java @@ -31,6 +31,11 @@ public class TypeEvalContext { myOrigin = origin; } + @Override + public String toString() { + return String.format("TypeEvalContext(%b, %b, %s)", myAllowDataFlow, myAllowStubToAST, myOrigin); + } + public boolean allowDataFlow(PsiElement element) { return myAllowDataFlow || element.getContainingFile() == myOrigin; } @@ -39,10 +44,6 @@ public class TypeEvalContext { return myAllowDataFlow || element.getContainingFile() == myOrigin; } - public boolean allowStubToAST() { - return myAllowStubToAST; - } - public static TypeEvalContext slow() { return new TypeEvalContext(true, true, null); } @@ -50,7 +51,7 @@ public class TypeEvalContext { public static TypeEvalContext fast() { return new TypeEvalContext(false, true, null); } - + /** * Creates a TypeEvalContext for performing analysis operations on the specified file which is currently open in the editor. * For such a file, additional slow operations are allowed. @@ -58,14 +59,10 @@ public class TypeEvalContext { * @param origin the file open in the editor * @return the type eval context for the file. */ - public static TypeEvalContext fast(@Nullable PsiFile origin) { + public static TypeEvalContext fast(@NotNull PsiFile origin) { return new TypeEvalContext(false, true, origin); } - public static TypeEvalContext fastStubOnly() { - return new TypeEvalContext(false, false, null); - } - /** * Creates a TypeEvalContext for performing analysis operations on the specified file which is currently open in the editor, * without accessing stubs. For such a file, additional slow operations are allowed.