one case of resolving qualified names in superclass list

This commit is contained in:
Dmitry Jemerov
2010-03-11 20:36:05 +03:00
parent 0ec147701f
commit ef7414e533
5 changed files with 33 additions and 7 deletions
@@ -187,6 +187,7 @@ public class PyClassImpl extends PyPresentableElementImpl<PyClassStub> implement
// stub-based resolve currently works correctly only with classes in file level
final PsiElement parent = stub.getParentStub().getPsi();
if (!(parent instanceof PyFile)) {
// TODO[yole] handle this case
return null;
}
@@ -195,15 +196,21 @@ public class PyClassImpl extends PyPresentableElementImpl<PyClassStub> implement
if (qualifiedName == null) {
return null;
}
// TODO[yole] handle more cases
if (qualifiedName.getComponentCount() != 1) {
NameDefiner currentParent = (NameDefiner) parent;
for (String component : qualifiedName.getComponents()) {
PsiElement element = currentParent.getElementNamed(component);
element = PyReferenceExpressionImpl.turnDirIntoInit(element);
if (!(element instanceof NameDefiner)) {
return null;
}
currentParent = (NameDefiner) element;
}
if (!(currentParent instanceof PyClass)) {
return null;
}
final PsiElement superClass = ((PyFile)parent).getElementNamed(qualifiedName.getLastComponent());
if (!(superClass instanceof PyClass)) {
return null;
}
result.add((PyClass) superClass);
result.add((PyClass) currentParent);
}
return result;
}
@@ -0,0 +1,6 @@
import bar
class Foo(bar.Super): pass
Foo().copy()
# <ref>
@@ -0,0 +1,5 @@
import foo
class Super(foo.SuperDuper):
pass
@@ -0,0 +1,2 @@
class SuperDuper(object):
def copy(self): pass
@@ -148,6 +148,12 @@ public class PyMultiFileResolveTest extends PyLightFixtureTestCase {
assertNull(doResolve()); // make sure we don't have a SOE here
}
public void testResolveQualifiedSuperClass() throws Exception {
PsiElement element = doResolve();
assertTrue(element instanceof PyFunction);
assertEquals("copy", ((PyFunction) element).getName());
}
private PsiFile prepareFile() throws Exception {
String testName = getTestName(true);
String fileName = getTestName(false) + ".py";