@Override public void actionPerformed(AnActionEvent e) { DataContext dataContext = e.getDataContext(); Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project == null) { return; } Editor editor = CommonDataKeys.EDITOR.getData(dataContext); PsiElement element = getElement(dataContext, editor); if (element == null) { Messages.showMessageDialog( project, IdeBundle.message("message.please.select.element.for.javadoc"), IdeBundle.message("title.no.element.selected"), Messages.getErrorIcon() ); return; } PsiFile context = CommonDataKeys.PSI_FILE.getData(dataContext); PsiElement originalElement = getOriginalElement(context, editor); DocumentationManager.storeOriginalElement(project, originalElement, element); final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element); if (provider instanceof ExternalDocumentationHandler && ((ExternalDocumentationHandler)provider).handleExternal(element, originalElement)) { return; } final List<String> urls = provider.getUrlFor(element, originalElement); if (urls != null && !urls.isEmpty()) { showExternalJavadoc(urls, PlatformDataKeys.CONTEXT_COMPONENT.getData(dataContext)); } else if (provider instanceof ExternalDocumentationProvider) { final ExternalDocumentationProvider externalDocumentationProvider = (ExternalDocumentationProvider)provider; if (externalDocumentationProvider.canPromptToConfigureDocumentation(element)) { externalDocumentationProvider.promptToConfigureDocumentation(element); } } }
@Override public void actionPerformed(AnActionEvent e) { DataContext dataContext = e.getDataContext(); Project project = PlatformDataKeys.PROJECT.getData(dataContext); if (project == null) { return; } PsiElement element = LangDataKeys.PSI_ELEMENT.getData(dataContext); if (element == null) { Messages.showMessageDialog( project, IdeBundle.message("message.please.select.element.for.javadoc"), IdeBundle.message("title.no.element.selected"), Messages.getErrorIcon() ); return; } PsiFile context = LangDataKeys.PSI_FILE.getData(dataContext); Editor editor = PlatformDataKeys.EDITOR.getData(dataContext); PsiElement originalElement = getOriginalElement(context, editor); DocumentationManager.storeOriginalElement(project, originalElement, element); final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element); if (provider instanceof ExternalDocumentationHandler && ((ExternalDocumentationHandler)provider).handleExternal(element, originalElement)) { return; } final List<String> urls = provider.getUrlFor(element, originalElement); if (urls != null && !urls.isEmpty()) { showExternalJavadoc(urls); } else if (provider instanceof ExternalDocumentationProvider) { final ExternalDocumentationProvider externalDocumentationProvider = (ExternalDocumentationProvider)provider; if (externalDocumentationProvider.canPromptToConfigureDocumentation(element)) { externalDocumentationProvider.promptToConfigureDocumentation(element); } } }
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 = dataContext.getData(PlatformDataKeys.CONTEXT_COMPONENT); 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); }); }