mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
API for quickly checking if external doc is available for an element
This commit is contained in:
@@ -26,6 +26,7 @@ import com.intellij.lang.CodeDocumentationAwareCommenter;
|
||||
import com.intellij.lang.LangBundle;
|
||||
import com.intellij.lang.LanguageCommenters;
|
||||
import com.intellij.lang.documentation.CodeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.CompositeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -675,6 +676,11 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
|
||||
return fetchExternalJavadoc(element, project, docUrls);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDocumentationFor(PsiElement element, PsiElement originalElement) {
|
||||
return CompositeDocumentationProvider.hasUrlsFor(this, element, originalElement);
|
||||
}
|
||||
|
||||
public static String fetchExternalJavadoc(PsiElement element, final Project project, final List<String> docURLs) {
|
||||
final JavaDocExternalFilter docFilter = new JavaDocExternalFilter(project);
|
||||
|
||||
|
||||
+19
@@ -134,4 +134,23 @@ public class CompositeDocumentationProvider implements DocumentationProvider, Ex
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDocumentationFor(PsiElement element, PsiElement originalElement) {
|
||||
for (DocumentationProvider provider : myProviders) {
|
||||
if (provider instanceof ExternalDocumentationProvider) {
|
||||
if (((ExternalDocumentationProvider) provider).hasDocumentationFor(element, originalElement)) return true;
|
||||
}
|
||||
else {
|
||||
if (hasUrlsFor(provider, element, originalElement)) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static boolean hasUrlsFor(DocumentationProvider provider, PsiElement element, PsiElement originalElement) {
|
||||
final List<String> urls = provider.getUrlFor(element, originalElement);
|
||||
if (urls != null && !urls.isEmpty()) return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
+10
@@ -29,4 +29,14 @@ import java.util.List;
|
||||
public interface ExternalDocumentationProvider {
|
||||
@Nullable
|
||||
String fetchExternalDocumentation(final Project project, PsiElement element, final List<String> docUrls);
|
||||
|
||||
/**
|
||||
* Quick check for existence of external documentation for specified element. Called from action update, so must be fast.
|
||||
* If not implemented, update check is performed by calling {@link DocumentationProvider#getUrlFor(com.intellij.psi.PsiElement, com.intellij.psi.PsiElement)}.
|
||||
*
|
||||
* @param element the element to check for existence of documentation
|
||||
* @param originalElement the element at caret (on which the action was invoked)
|
||||
* @return true if the external documentation action should be enabled, false otherwise.
|
||||
*/
|
||||
boolean hasDocumentationFor(PsiElement element, PsiElement originalElement);
|
||||
}
|
||||
@@ -18,9 +18,10 @@ package com.intellij.ide.actions;
|
||||
|
||||
import com.intellij.codeInsight.documentation.DocumentationManager;
|
||||
import com.intellij.ide.BrowserUtil;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.lang.documentation.DocumentationProvider;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.openapi.actionSystem.*;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -33,8 +34,8 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
public class ExternalJavaDocAction extends AnAction {
|
||||
|
||||
@@ -100,8 +101,14 @@ public class ExternalJavaDocAction extends AnAction {
|
||||
final PsiElement originalElement = getOriginalElement(LangDataKeys.PSI_FILE.getData(dataContext), editor);
|
||||
DocumentationManager.storeOriginalElement(PlatformDataKeys.PROJECT.getData(dataContext), originalElement, element);
|
||||
final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element);
|
||||
final List<String> urls = provider.getUrlFor(element, originalElement);
|
||||
boolean enabled = urls != null && !urls.isEmpty();
|
||||
boolean enabled;
|
||||
if (provider instanceof ExternalDocumentationProvider) {
|
||||
enabled = ((ExternalDocumentationProvider) provider).hasDocumentationFor(element, originalElement);
|
||||
}
|
||||
else {
|
||||
final List<String> urls = provider.getUrlFor(element, originalElement);
|
||||
enabled = urls != null && !urls.isEmpty();
|
||||
}
|
||||
if (editor != null) {
|
||||
presentation.setEnabled(enabled);
|
||||
if (event.getPlace().equals(ActionPlaces.MAIN_MENU)) {
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.jetbrains.android;
|
||||
import com.android.sdklib.SdkConstants;
|
||||
import com.intellij.codeInsight.javadoc.JavaDocExternalFilter;
|
||||
import com.intellij.facet.ProjectFacetManager;
|
||||
import com.intellij.lang.documentation.CompositeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.DocumentationProvider;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.lang.java.JavaDocumentationProvider;
|
||||
@@ -79,6 +80,11 @@ public class AndroidDocumentationProvider implements DocumentationProvider, Exte
|
||||
null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDocumentationFor(PsiElement element, PsiElement originalElement) {
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isMyContext(@NotNull final PsiElement element, @NotNull final Project project) {
|
||||
if (element instanceof PsiClass) {
|
||||
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
|
||||
|
||||
+6
@@ -21,6 +21,7 @@ import com.intellij.codeInsight.javadoc.JavaDocUtil;
|
||||
import com.intellij.lang.CodeDocumentationAwareCommenter;
|
||||
import com.intellij.lang.LanguageCommenters;
|
||||
import com.intellij.lang.documentation.CodeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.CompositeDocumentationProvider;
|
||||
import com.intellij.lang.documentation.ExternalDocumentationProvider;
|
||||
import com.intellij.lang.java.JavaDocumentationProvider;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -292,6 +293,11 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
|
||||
return JavaDocumentationProvider.fetchExternalJavadoc(element, project, docUrls);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean hasDocumentationFor(PsiElement element, PsiElement originalElement) {
|
||||
return CompositeDocumentationProvider.hasUrlsFor(this, element, originalElement);
|
||||
}
|
||||
|
||||
private static String getMethodCandidateInfo(GrReferenceExpression expr) {
|
||||
final GroovyResolveResult[] candidates = expr.multiResolve(false);
|
||||
final String text = expr.getText();
|
||||
|
||||
Reference in New Issue
Block a user