mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-255 parse __init__.py for * imports
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user