Search in sources :

Example 1 with ExternalDocumentationHandler

use of com.intellij.lang.documentation.ExternalDocumentationHandler in project intellij-community by JetBrains.

the class ExternalJavaDocAction method showExternalJavadoc.

public static void showExternalJavadoc(PsiElement element, PsiElement originalElement, String docUrl, DataContext dataContext) {
    DocumentationProvider provider = DocumentationManager.getProviderFromElement(element);
    if (provider instanceof ExternalDocumentationHandler && ((ExternalDocumentationHandler) provider).handleExternal(element, originalElement)) {
        return;
    }
    Project project = dataContext.getData(CommonDataKeys.PROJECT);
    final Component contextComponent = PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext);
    ApplicationManager.getApplication().executeOnPooledThread(() -> {
        List<String> urls;
        if (StringUtil.isEmptyOrSpaces(docUrl)) {
            urls = ReadAction.compute(() -> provider.getUrlFor(element, originalElement));
        } else {
            urls = Collections.singletonList(docUrl);
        }
        if (provider instanceof ExternalDocumentationProvider && urls != null && urls.size() > 1) {
            for (String url : urls) {
                List<String> thisUrlList = Collections.singletonList(url);
                String doc = ((ExternalDocumentationProvider) provider).fetchExternalDocumentation(project, element, thisUrlList);
                if (doc != null) {
                    urls = thisUrlList;
                    break;
                }
            }
        }
        final List<String> finalUrls = urls;
        ApplicationManager.getApplication().invokeLater(() -> {
            if (ContainerUtil.isEmpty(finalUrls)) {
                if (element != null && provider instanceof ExternalDocumentationProvider) {
                    ExternalDocumentationProvider externalDocumentationProvider = (ExternalDocumentationProvider) provider;
                    if (externalDocumentationProvider.canPromptToConfigureDocumentation(element)) {
                        externalDocumentationProvider.promptToConfigureDocumentation(element);
                    }
                }
            } else if (finalUrls.size() == 1) {
                BrowserUtil.browse(finalUrls.get(0));
            } else {
                JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<String>("Choose external documentation root", ArrayUtil.toStringArray(finalUrls)) {

                    @Override
                    public PopupStep onChosen(final String selectedValue, final boolean finalChoice) {
                        BrowserUtil.browse(selectedValue);
                        return FINAL_CHOICE;
                    }
                }).showInBestPositionFor(DataManager.getInstance().getDataContext(contextComponent));
            }
        }, ModalityState.NON_MODAL);
    });
}
Also used : Project(com.intellij.openapi.project.Project) ExternalDocumentationProvider(com.intellij.lang.documentation.ExternalDocumentationProvider) ExternalDocumentationHandler(com.intellij.lang.documentation.ExternalDocumentationHandler) ExternalDocumentationProvider(com.intellij.lang.documentation.ExternalDocumentationProvider) DocumentationProvider(com.intellij.lang.documentation.DocumentationProvider) BaseListPopupStep(com.intellij.openapi.ui.popup.util.BaseListPopupStep) PopupStep(com.intellij.openapi.ui.popup.PopupStep)

Aggregations

DocumentationProvider (com.intellij.lang.documentation.DocumentationProvider)1 ExternalDocumentationHandler (com.intellij.lang.documentation.ExternalDocumentationHandler)1 ExternalDocumentationProvider (com.intellij.lang.documentation.ExternalDocumentationProvider)1 Project (com.intellij.openapi.project.Project)1 PopupStep (com.intellij.openapi.ui.popup.PopupStep)1 BaseListPopupStep (com.intellij.openapi.ui.popup.util.BaseListPopupStep)1