fixed PY-8440 Doctest: Unused import: false positive if there is an empty-line between usage and import

This commit is contained in:
Ekaterina Tuzova
2013-01-13 15:23:19 +04:00
parent 860891ab38
commit 61dbb0458e
@@ -262,35 +262,20 @@ public class PyUnresolvedReferencesInspection extends PyInspection {
if (file instanceof CythonFile && ((CythonFile)file).isIncludeFile()) {
return;
}
final InjectedLanguageManager injectedLanguageManager =
InjectedLanguageManager.getInstance(node.getProject());
if (injectedLanguageManager.isInjectedFragment(file)) {
final PsiLanguageInjectionHost host =
injectedLanguageManager.getInjectionHost(node);
processInjection(host);
}
if (node instanceof PyReferenceOwner) {
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext);
processReference(node, ((PyReferenceOwner)node).getReference(resolveContext));
}
else {
if (node instanceof PsiLanguageInjectionHost) {
final List<Pair<PsiElement,TextRange>> files = InjectedLanguageManager.getInstance(node.getProject()).getInjectedPsiFiles(node);
if (files != null) {
for (Pair<PsiElement,TextRange> pair : files) {
new PyRecursiveElementVisitor() {
@Override
public void visitPyElement(PyElement element) {
super.visitPyElement(element);
if (element instanceof PyReferenceOwner) {
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext);
final PsiPolyVariantReference reference = ((PyReferenceOwner)element).getReference(resolveContext);
if (reference != null) {
final ResolveResult[] resolveResults = reference.multiResolve(false);
for (ResolveResult resolveResult : resolveResults) {
if (resolveResult instanceof ImportedResolveResult) {
myUsedImports.addAll(((ImportedResolveResult)resolveResult).getNameDefiners());
}
}
}
}
}
}.visitElement(pair.getFirst());
}
}
processInjection((PsiLanguageInjectionHost)node);
}
for (final PsiReference reference : node.getReferences()) {
processReference(node, reference);
@@ -298,6 +283,34 @@ public class PyUnresolvedReferencesInspection extends PyInspection {
}
}
private void processInjection(@Nullable PsiLanguageInjectionHost node) {
if (node == null) return;
final List<Pair<PsiElement,TextRange>>
files = InjectedLanguageManager.getInstance(node.getProject()).getInjectedPsiFiles(node);
if (files != null) {
for (Pair<PsiElement,TextRange> pair : files) {
new PyRecursiveElementVisitor() {
@Override
public void visitPyElement(PyElement element) {
super.visitPyElement(element);
if (element instanceof PyReferenceOwner) {
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(myTypeEvalContext);
final PsiPolyVariantReference reference = ((PyReferenceOwner)element).getReference(resolveContext);
if (reference != null) {
final ResolveResult[] resolveResults = reference.multiResolve(false);
for (ResolveResult resolveResult : resolveResults) {
if (resolveResult instanceof ImportedResolveResult) {
myUsedImports.addAll(((ImportedResolveResult)resolveResult).getNameDefiners());
}
}
}
}
}
}.visitElement(pair.getFirst());
}
}
}
private void processReference(PyElement node, @Nullable PsiReference reference) {
if (reference == null || reference.isSoft()) return;
HighlightSeverity severity = HighlightSeverity.ERROR;