From 059d692bc0fd2dc2bb46b62c02e271ea24fa6c80 Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Tue, 9 Aug 2011 19:30:01 +0200 Subject: [PATCH] resolve target expression to self if trying to resolve it got a result in another file (e.g. builtins) (PY-4256) --- .../jetbrains/python/psi/impl/PyTargetReference.java | 11 ++++++++++- .../testData/resolve/DontResolveTargetToBuiltins.py | 2 ++ .../testSrc/com/jetbrains/python/PyResolveTest.java | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 python/testData/resolve/DontResolveTargetToBuiltins.py diff --git a/python/src/com/jetbrains/python/psi/impl/PyTargetReference.java b/python/src/com/jetbrains/python/psi/impl/PyTargetReference.java index 2aeaeac5c526..fe2032edfa3a 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyTargetReference.java +++ b/python/src/com/jetbrains/python/psi/impl/PyTargetReference.java @@ -1,5 +1,6 @@ package com.jetbrains.python.psi.impl; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementResolveResult; import com.intellij.psi.ResolveResult; import com.intellij.psi.util.PsiTreeUtil; @@ -21,7 +22,15 @@ public class PyTargetReference extends PyReferenceImpl { @Override public ResolveResult[] multiResolve(boolean incompleteCode) { final ResolveResult[] results = super.multiResolve(incompleteCode); - if (results.length > 0) { + boolean resolvedToAnotherFile = false; + for (ResolveResult result : results) { + final PsiElement element = result.getElement(); + if (element != null && element.getContainingFile() != myElement.getContainingFile()) { + resolvedToAnotherFile = true; + break; + } + } + if (results.length > 0 && !resolvedToAnotherFile) { return results; } // resolve to self if no other target found diff --git a/python/testData/resolve/DontResolveTargetToBuiltins.py b/python/testData/resolve/DontResolveTargetToBuiltins.py new file mode 100644 index 000000000000..bb60f960ea49 --- /dev/null +++ b/python/testData/resolve/DontResolveTargetToBuiltins.py @@ -0,0 +1,2 @@ +str = "foo" +# diff --git a/python/testSrc/com/jetbrains/python/PyResolveTest.java b/python/testSrc/com/jetbrains/python/PyResolveTest.java index 898892d1564a..e4a933e29aa4 100644 --- a/python/testSrc/com/jetbrains/python/PyResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyResolveTest.java @@ -413,4 +413,8 @@ public class PyResolveTest extends PyResolveTestCase { public void testSuperclassResolveScope() { // PY-3554 assertResolvesTo(PyClass.class, "date", "datetime.py"); } + + public void testDontResolveTargetToBuiltins() { // PY-4256 + assertResolvesTo(PyTargetExpression.class, "str"); + } } \ No newline at end of file