Fixed resolve for nested comprehensions (PY-6316)

This commit is contained in:
Andrey Vlasovskikh
2012-04-23 15:50:34 +04:00
parent ab0ce2890c
commit 04a8991cbe
3 changed files with 13 additions and 3 deletions
@@ -147,9 +147,12 @@ public class PyReferenceImpl implements PsiReferenceEx, PsiPolyVariantReference
PsiElement definition = instruction.getElement();
NameDefiner definer = null;
// TODO: This check may slow down resolving, but it is the current solution to the comprehension scopes problem
final PyComprehensionElement defComprh = PsiTreeUtil.getParentOfType(definition, PyComprehensionElement.class);
if (defComprh != null && defComprh != PsiTreeUtil.getParentOfType(element, PyComprehensionElement.class)) {
continue;
final PyComprehensionElement definitionComprehension = PsiTreeUtil.getParentOfType(definition, PyComprehensionElement.class);
if (definitionComprehension != null) {
final PyComprehensionElement elementComprehension = PsiTreeUtil.getParentOfType(element, PyComprehensionElement.class);
if (elementComprehension == null || !PsiTreeUtil.isAncestor(definitionComprehension, elementComprehension, false)) {
continue;
}
}
if (definition instanceof NameDefiner && !(definition instanceof PsiNamedElement)) {
definer = (NameDefiner)definition;
@@ -0,0 +1,2 @@
def f(xs, ys):
return [[(x, y) for y in ys] for x in xs]
@@ -97,6 +97,11 @@ public class PyUnresolvedReferencesInspectionTest extends PyTestCase {
doTest();
}
// PY-6316
public void testNestedComprehensions() {
doTest();
}
private void doMultiFileTest() {
myFixture.copyFileToProject("inspections/PyUnresolvedReferencesInspection/__init__.py", "PyUnresolvedReferencesInspection/__init__.py");
myFixture.copyFileToProject("inspections/PyUnresolvedReferencesInspection/" + getTestName(true) + ".py",