fixed PY-8151 Don't highlight deprecation on symbols imported as fallbacks after ImportError

This commit is contained in:
Ekaterina Tuzova
2014-04-01 16:33:07 +04:00
parent 03c4328b97
commit c0ea251be6
5 changed files with 21 additions and 3 deletions
@@ -21,6 +21,7 @@ import com.intellij.codeInspection.ProblemsHolder;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.PsiPolyVariantReference;
import com.intellij.psi.util.PsiTreeUtil;
import com.jetbrains.python.psi.*;
import org.jetbrains.annotations.Nls;
@@ -58,7 +59,14 @@ public class PyDeprecationInspection extends PyInspection {
final PyExpression exceptClass = exceptPart.getExceptClass();
if (exceptClass != null && "ImportError".equals(exceptClass.getText())) return;
}
PsiElement resolveResult = node.getReference(getResolveContext()).resolve();
final PsiPolyVariantReference reference = node.getReference(getResolveContext());
if (reference == null) return;
final PsiElement resolveResult = reference.resolve();
final PyFromImportStatement importStatement = PsiTreeUtil.getParentOfType(node, PyFromImportStatement.class);
if (importStatement != null) {
final PsiElement element = importStatement.resolveImportSource();
if (resolveResult != null && element != resolveResult.getContainingFile()) return;
}
String deprecationMessage = null;
if (resolveResult instanceof PyFunction) {
deprecationMessage = ((PyFunction) resolveResult).getDeprecationMessage();
@@ -1,4 +1,4 @@
try:
from urlparse import parse_qs, parse_qsl
except ImportError:
from cgi import parse_qs, parse_qsl
from tmp import bar
@@ -0,0 +1 @@
from deprecatedAsFallback import bar
+3
View File
@@ -0,0 +1,3 @@
def bar():
import warnings
warnings.warn("this is deprecated", DeprecationWarning, 2)
@@ -55,7 +55,13 @@ public class PyDeprecationTest extends PyTestCase {
public void testDeprecatedAsFallback() {
myFixture.enableInspections(PyDeprecationInspection.class);
myFixture.configureByFile("deprecation/deprecatedAsFallback.py");
myFixture.configureByFiles("deprecation/deprecatedAsFallback.py", "deprecation/tmp.py");
myFixture.checkHighlighting(true, false, false);
}
public void testDeprecatedFallback2() {
myFixture.enableInspections(PyDeprecationInspection.class);
myFixture.configureByFiles("deprecation/deprecatedFallback2.py", "deprecation/tmp.py", "deprecation/deprecatedAsFallback.py");
myFixture.checkHighlighting(true, false, false);
}