mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
one case of resolving qualified names in superclass list
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
+6
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user