diff --git a/python/src/com/jetbrains/python/hierarchy/call/PyStaticCallHierarchyUtil.java b/python/src/com/jetbrains/python/hierarchy/call/PyStaticCallHierarchyUtil.java index e5f3276b5ed0..3e061a0e84d8 100644 --- a/python/src/com/jetbrains/python/hierarchy/call/PyStaticCallHierarchyUtil.java +++ b/python/src/com/jetbrains/python/hierarchy/call/PyStaticCallHierarchyUtil.java @@ -66,8 +66,9 @@ public class PyStaticCallHierarchyUtil { public void visitPyCallExpression(PyCallExpression node) { super.visitPyCallExpression(node); + final TypeEvalContext typeEvalContext = TypeEvalContext.userInitiated(element.getProject(), null); StreamEx - .of(node.multiResolveCalleeFunction(PyResolveContext.defaultContext())) + .of(node.multiResolveCalleeFunction(PyResolveContext.defaultContext().withTypeEvalContext(typeEvalContext))) .select(PyFunction.class) .forEach(callees::add); } diff --git a/python/src/com/jetbrains/python/highlighting/PyRainbowVisitor.kt b/python/src/com/jetbrains/python/highlighting/PyRainbowVisitor.kt index a65651449e27..3f7ab5a2f368 100644 --- a/python/src/com/jetbrains/python/highlighting/PyRainbowVisitor.kt +++ b/python/src/com/jetbrains/python/highlighting/PyRainbowVisitor.kt @@ -25,6 +25,7 @@ import com.jetbrains.python.codeInsight.controlflow.ScopeOwner import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil import com.jetbrains.python.psi.* import com.jetbrains.python.psi.resolve.PyResolveContext +import com.jetbrains.python.psi.types.TypeEvalContext class PyRainbowVisitor : RainbowVisitor() { @@ -89,7 +90,9 @@ class PyRainbowVisitor : RainbowVisitor() { val parent = targetExpression.parent if (parent is PyGlobalStatement) return targetExpression.containingFile if (parent is PyNonlocalStatement) { - val outerResolved = targetExpression.reference.resolve() + val typeEvalContext = TypeEvalContext.codeAnalysis(targetExpression.project, targetExpression.containingFile) + val resolveContext = PyResolveContext.defaultContext().withTypeEvalContext(typeEvalContext) + val outerResolved = targetExpression.getReference(resolveContext).resolve() return if (outerResolved is PyTargetExpression) getTargetContext(outerResolved) else null } diff --git a/python/src/com/jetbrains/python/inspections/PyGlobalUndefinedInspection.java b/python/src/com/jetbrains/python/inspections/PyGlobalUndefinedInspection.java index aa9bd97ced39..1808102d82ec 100644 --- a/python/src/com/jetbrains/python/inspections/PyGlobalUndefinedInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyGlobalUndefinedInspection.java @@ -21,6 +21,7 @@ import com.intellij.psi.PsiElementVisitor; import com.jetbrains.python.PyBundle; import com.jetbrains.python.psi.PyGlobalStatement; import com.jetbrains.python.psi.PyTargetExpression; +import com.jetbrains.python.psi.resolve.PyResolveContext; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -57,7 +58,8 @@ public class PyGlobalUndefinedInspection extends PyInspection { final PyTargetExpression[] globals = node.getGlobals(); for (PyTargetExpression global : globals) { - if (global.getReference().resolve() == global) { + final PyResolveContext resolveContext = PyResolveContext.defaultContext().withTypeEvalContext(myTypeEvalContext); + if (global.getReference(resolveContext).resolve() == global) { registerProblem(global, PyBundle.message("INSP.NAME.global.$0.undefined", global.getName())); } } diff --git a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java index 976161e54c95..fe883bc4fc22 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyNamedParameterImpl.java @@ -398,7 +398,8 @@ public class PyNamedParameterImpl extends PyBaseElementImpl { @Override protected boolean applyNotNull(@NotNull final PyTargetExpression input) { - return input.getReference().resolve() instanceof PyTargetExpression; + final TypeEvalContext typeEvalContext = TypeEvalContext.userInitiated(input.getProject(), null); + final PyResolveContext context = PyResolveContext.defaultContext().withTypeEvalContext(typeEvalContext); + return input.getReference(context).resolve() instanceof PyTargetExpression; } } } diff --git a/python/src/com/jetbrains/python/refactoring/classes/membersManager/PropertiesManager.java b/python/src/com/jetbrains/python/refactoring/classes/membersManager/PropertiesManager.java index 84b0566885ec..15d75bc663fd 100644 --- a/python/src/com/jetbrains/python/refactoring/classes/membersManager/PropertiesManager.java +++ b/python/src/com/jetbrains/python/refactoring/classes/membersManager/PropertiesManager.java @@ -20,6 +20,8 @@ import com.intellij.psi.PsiReference; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.MultiMap; import com.jetbrains.python.psi.*; +import com.jetbrains.python.psi.resolve.PyResolveContext; +import com.jetbrains.python.psi.types.TypeEvalContext; import org.jetbrains.annotations.NotNull; import java.util.ArrayList; @@ -185,7 +187,14 @@ class PropertiesManager extends MembersManager { @Override public void visitPyExpression(final PyExpression node) { - final PsiReference reference = node.getReference(); + final PsiReference reference; + if (node instanceof PyReferenceOwner) { + final TypeEvalContext context = TypeEvalContext.userInitiated(node.getProject(), null); + reference = ((PyReferenceOwner)node).getReference(PyResolveContext.defaultContext().withTypeEvalContext(context)); + } + else { + reference = node.getReference(); + } if (reference == null) { return; }