to have same behavior for stub-based and non-stub-based resolve, findExportedName() walks the list of stubs in reverse order

This commit is contained in:
Dmitry Jemerov
2010-07-01 21:53:33 +04:00
parent 5b5edf87ab
commit cdf76f7eed
6 changed files with 23 additions and 1 deletions
@@ -195,7 +195,8 @@ public class PyFileImpl extends PsiFileBase implements PyFile, PyExpression {
final StubElement stub = getStub();
if (stub != null) {
final List children = stub.getChildrenStubs();
for (Object child : children) {
for (int i=children.size()-1; i >= 0; i--) {
Object child = children.get(i);
if (child instanceof NamedStub && name.equals(((NamedStub)child).getName())) {
return ((NamedStub) child).getPsi();
}
@@ -0,0 +1,4 @@
from intermediate import do_stuff
do_stuff()
# <ref>
@@ -0,0 +1,2 @@
from pack1 import do_stuff
from pack2 import do_stuff
@@ -0,0 +1 @@
def do_stuff(): print("wrong stuff")
@@ -0,0 +1 @@
def do_stuff(): print("the good stuff")
@@ -179,10 +179,23 @@ public class PyMultiFileResolveTest extends PyLightFixtureTestCase {
assertResolvesTo(PyFunction.class, "dostuff");
}
public void testNameConflict() throws Exception {
assertResolvesTo(PyFunction.class, "do_stuff", "/src/pack2.py");
}
private <T extends PsiElement> void assertResolvesTo(final Class<T> aClass, final String name) throws Exception {
assertResolvesTo(aClass, name, null);
}
private <T extends PsiElement> void assertResolvesTo(final Class<T> aClass,
final String name,
String containingFilePath) throws Exception {
final PsiElement element = doResolve();
assertInstanceOf(element, aClass);
assertEquals(name, ((PsiNamedElement) element).getName());
if (containingFilePath != null) {
assertEquals(containingFilePath, element.getContainingFile().getVirtualFile().getPath());
}
}
private PsiFile prepareFile() throws Exception {