PY-255 parse __init__.py for * imports

This commit is contained in:
Dennis Ushakov
2010-01-27 15:53:40 +03:00
parent ddcbe140aa
commit 05d45456d3
7 changed files with 24 additions and 6 deletions
@@ -17,9 +17,7 @@
package com.jetbrains.python.psi.impl;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.ResolveState;
import com.intellij.psi.scope.PsiScopeProcessor;
import com.intellij.psi.tree.TokenSet;
@@ -106,10 +104,7 @@ public class PyFromImportStatementImpl extends PyElementImpl implements PyFromIm
PyReferenceExpression expr = getImportSource();
if (expr != null) {
final PsiElement importedFile = ResolveImportUtil.resolveImportReference(expr);
if (importedFile instanceof PsiDirectory) {
PsiFile file = ((PsiDirectory)importedFile).findFile(PyNames.INIT_DOT_PY);
if (file != null) return file.processDeclarations(processor, state, null, place);
} else if (importedFile != null) {
if (importedFile != null) {
return importedFile.processDeclarations(processor, state, null, place);
}
}
@@ -173,6 +173,10 @@ public class ResolveImportUtil {
if (imported_from_module == null) imported_from_module = resolveModuleInRoots(module_reference, source_file);
}
}
if (imported_from_module instanceof PsiDirectory) {
PsiFile file = ((PsiDirectory)imported_from_module).findFile(PyNames.INIT_DOT_PY);
if (file != null) imported_from_module = file;
}
return imported_from_module;
}
finally {
@@ -0,0 +1,3 @@
from completion import mymodule
a = mymodule.Foo
@@ -0,0 +1,3 @@
from completion import mymodule
a = mymodule.F<caret>
@@ -0,0 +1 @@
from completion.mymodule.mysubmodule import *
@@ -0,0 +1,2 @@
class Foo:
pass
@@ -42,4 +42,14 @@ public class PythonCompletionTest extends PyLightFixtureTestCase {
public void testPredefinedMethodNot() throws Exception {
doTest();
}
public void testPy255() throws Exception {
final String dirname = "completion/";
final String testName = dirname + "moduleClass";
myFixture.configureByFile(testName + ".py");
myFixture.copyDirectoryToProject(dirname + "mymodule", dirname + "mymodule");
myFixture.copyDirectoryToProject(dirname + "mymodule/mysubmodule", dirname + "mymodule/mysubmodule");
myFixture.completeBasic();
myFixture.checkResultByFile(testName + ".after.py");
}
}