PY-25260: Do not resolve qnames to empty folders.

spam.eggs.ham may be resolved to
"spam/eggs.py#def ham"
But empty folder "spam/eggs/" may go before "eggs.py" and break resolve process.

We exclude folders without of python files from test process.
This commit is contained in:
Ilya.Kazakevich
2018-08-29 23:36:34 +03:00
parent b6a5191c82
commit 50e1c91f8d
@@ -30,6 +30,7 @@ import com.intellij.psi.util.QualifiedName
import com.jetbrains.extensions.getSdk
import com.jetbrains.python.PyNames
import com.jetbrains.python.psi.PyClass
import com.jetbrains.python.psi.PyFile
import com.jetbrains.python.psi.resolve.*
import com.jetbrains.python.psi.stubs.PyModuleNameIndex
import com.jetbrains.python.psi.types.TypeEvalContext
@@ -134,7 +135,10 @@ fun QualifiedName.getElementAndResolvableName(context: QNameResolveContext, stop
// Drill as deep, as we can
while (currentName.componentCount > 0 && element == null) {
if (psiDirectory != null) { // Resolve against folder
element = resolveModuleAt(currentName, psiDirectory, resolveContext).firstOrNull()
// There could be folder and module on the same level. Empty folder should be ignored in this case.
element = resolveModuleAt(currentName, psiDirectory, resolveContext).filterNot {
it is PsiDirectory && it.children.filterIsInstance<PyFile>().isEmpty()
}.firstOrNull()
}
if (element == null) { // Resolve against roots