String (PsiElement element, PsiElement originalElement) { PsiFileSystemItem file = getFile(element); if (file == null) return null; final Sdk sdk = PyBuiltinCache.findSdkForFile(file); if (sdk == null) { return null; } final QualifiedName qName = QualifiedNameFinder.findCanonicalImportPath(element, originalElement); if (qName == null) { return null; } final PythonDocumentationMap map = PythonDocumentationMap.getInstance(); final String pyVersion = pyVersion(sdk.getVersionString()); PsiNamedElement namedElement = getNamedElement(element); final String url = map.urlFor(qName, namedElement, pyVersion); if (url != null) { return url; } for (PythonDocumentationLinkProvider provider : PythonDocumentationLinkProvider.EP_NAME.getExtensionList()) { final String providerUrl = provider.getExternalDocumentationUrl(element, originalElement); if (providerUrl != null) { return providerUrl; } } return null; }