diff options
Diffstat (limited to 'python/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java')
-rw-r--r-- | python/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/python/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java b/python/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java index 97a15da105c3..1c081eff9356 100644 --- a/python/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java +++ b/python/src/com/jetbrains/python/psi/resolve/QualifiedNameFinder.java @@ -24,10 +24,14 @@ import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.jetbrains.python.PyNames; +import com.jetbrains.python.codeInsight.controlflow.ScopeOwner; +import com.jetbrains.python.codeInsight.dataflow.scope.ScopeUtil; import com.jetbrains.python.psi.PyClass; +import com.jetbrains.python.psi.PyElement; import com.jetbrains.python.psi.PyFile; import com.jetbrains.python.psi.PyFunction; import com.intellij.psi.util.QualifiedName; +import com.jetbrains.python.psi.impl.PyBuiltinCache; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -156,6 +160,36 @@ public class QualifiedNameFinder { return qname; } + @Nullable + public static String getQualifiedName(@NotNull PyElement element) { + final String name = element.getName(); + if (name != null) { + final ScopeOwner owner = ScopeUtil.getScopeOwner(element); + final PyBuiltinCache builtinCache = PyBuiltinCache.getInstance(element); + if (owner instanceof PyClass) { + final String classQName = ((PyClass)owner).getQualifiedName(); + if (classQName != null) { + return classQName + "." + name; + } + } + else if (owner instanceof PyFile) { + if (builtinCache.isBuiltin(element)) { + return name; + } + else { + final VirtualFile virtualFile = ((PyFile)owner).getVirtualFile(); + if (virtualFile != null) { + final String fileQName = findShortestImportableName(element, virtualFile); + if (fileQName != null) { + return fileQName + "." + name; + } + } + } + } + } + return null; + } + /** * Tries to find roots that contain given vfile, and among them the root that contains at the smallest depth. * For equal depth source root is in preference to library. |