diff --git a/python/src/com/jetbrains/python/psi/impl/PyStarImportElementImpl.java b/python/src/com/jetbrains/python/psi/impl/PyStarImportElementImpl.java index 14eac1e5f26d..98a3d8ee17ed 100644 --- a/python/src/com/jetbrains/python/psi/impl/PyStarImportElementImpl.java +++ b/python/src/com/jetbrains/python/psi/impl/PyStarImportElementImpl.java @@ -7,7 +7,6 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.containers.HashSet; import com.jetbrains.python.psi.*; import com.jetbrains.python.psi.resolve.PyResolveUtil; -import com.jetbrains.python.psi.resolve.ResolveImportUtil; import com.jetbrains.python.toolbox.ChainIterable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -29,8 +28,7 @@ public class PyStarImportElementImpl extends PyElementImpl implements PyStarImpo public Iterable iterateNames() { if (getParent() instanceof PyFromImportStatement) { PyFromImportStatement fromImportStatement = (PyFromImportStatement)getParent(); - final List importedFiles = - ResolveImportUtil.resolveFromImportStatementSource(fromImportStatement, fromImportStatement.getImportSourceQName()); + final List importedFiles = fromImportStatement.resolveImportSourceCandidates(); ChainIterable chain = new ChainIterable(); for (PsiElement importedFile : new HashSet(importedFiles)) { // resolver gives lots of duplicates final PsiElement source = PyUtil.turnDirIntoInit(importedFile); @@ -50,8 +48,7 @@ public class PyStarImportElementImpl extends PyElementImpl implements PyStarImpo } if (getParent() instanceof PyFromImportStatement) { PyFromImportStatement fromImportStatement = (PyFromImportStatement)getParent(); - final List importedFiles = - ResolveImportUtil.resolveFromImportStatementSource(fromImportStatement, fromImportStatement.getImportSourceQName()); + final List importedFiles = fromImportStatement.resolveImportSourceCandidates(); for (PsiElement importedFile : new HashSet(importedFiles)) { // resolver gives lots of duplicates final PsiElement source = PyUtil.turnDirIntoInit(importedFile); if (source instanceof PyFile) { diff --git a/python/testData/resolve/multiFile/relativePackageStarImport/b/__init__.py b/python/testData/resolve/multiFile/relativePackageStarImport/b/__init__.py new file mode 100644 index 000000000000..b937ba6ac582 --- /dev/null +++ b/python/testData/resolve/multiFile/relativePackageStarImport/b/__init__.py @@ -0,0 +1 @@ +def foo(): pass diff --git a/python/testData/resolve/multiFile/relativePackageStarImport/b/c/__init__.py b/python/testData/resolve/multiFile/relativePackageStarImport/b/c/__init__.py new file mode 100644 index 000000000000..4f95228042b1 --- /dev/null +++ b/python/testData/resolve/multiFile/relativePackageStarImport/b/c/__init__.py @@ -0,0 +1,3 @@ +from .. import * +foo() +# \ No newline at end of file diff --git a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java index 574229f3b9e0..1166b9921072 100644 --- a/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java +++ b/python/testSrc/com/jetbrains/python/PyMultiFileResolveTest.java @@ -258,6 +258,16 @@ public class PyMultiFileResolveTest extends PyResolveTestCase { assertResolvesTo(PyFunction.class, "foo"); } + public void testRelativePackageStarImport() { // PY-7204 + myTestFileName = "b/c/__init__.py"; + try { + assertResolvesTo(PyFunction.class, "foo", "/src/b/__init__.py"); + } + finally { + myTestFileName = null; + } + } + public void testCythonFromModuleCImport() { assertResolvesTo(CythonFunction.class, "foo"); }