resolve target expression to self if trying to resolve it got a result in another file (e.g. builtins) (PY-4256)

This commit is contained in:
Dmitry Jemerov
2011-08-09 19:30:01 +02:00
parent ddb080e44e
commit 059d692bc0
3 changed files with 16 additions and 1 deletions
@@ -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
@@ -0,0 +1,2 @@
str = "foo"
#<ref>
@@ -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");
}
}