diff --git a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java index a1196444f812..9c4b9f2ebbbe 100644 --- a/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java +++ b/python/src/com/jetbrains/python/inspections/PyUnresolvedReferencesInspection.java @@ -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> files = InjectedLanguageManager.getInstance(node.getProject()).getInjectedPsiFiles(node); - if (files != null) { - for (Pair 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> + files = InjectedLanguageManager.getInstance(node.getProject()).getInjectedPsiFiles(node); + if (files != null) { + for (Pair 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;