prompt to configure external documentation location if none is configured

This commit is contained in:
Dmitry Jemerov
2011-04-04 17:09:41 +02:00
parent 424065d6b5
commit aa7f24dbd4
6 changed files with 75 additions and 5 deletions
@@ -681,6 +681,15 @@ public class JavaDocumentationProvider implements CodeDocumentationProvider, Ext
return CompositeDocumentationProvider.hasUrlsFor(this, element, originalElement);
}
@Override
public boolean canPromptToConfigureDocumentation(PsiElement element) {
return false;
}
@Override
public void promptToConfigureDocumentation(PsiElement element) {
}
public static String fetchExternalJavadoc(PsiElement element, final Project project, final List<String> docURLs) {
final JavaDocExternalFilter docFilter = new JavaDocExternalFilter(project);
@@ -148,6 +148,28 @@ public class CompositeDocumentationProvider implements DocumentationProvider, Ex
return false;
}
@Override
public boolean canPromptToConfigureDocumentation(PsiElement element) {
for (DocumentationProvider provider : myProviders) {
if (provider instanceof ExternalDocumentationProvider &&
((ExternalDocumentationProvider)provider).canPromptToConfigureDocumentation(element)) {
return true;
}
}
return false;
}
@Override
public void promptToConfigureDocumentation(PsiElement element) {
for (DocumentationProvider provider : myProviders) {
if (provider instanceof ExternalDocumentationProvider &&
((ExternalDocumentationProvider)provider).canPromptToConfigureDocumentation(element)) {
((ExternalDocumentationProvider)provider).promptToConfigureDocumentation(element);
break;
}
}
}
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;
@@ -39,4 +39,19 @@ public interface ExternalDocumentationProvider {
* @return true if the external documentation action should be enabled, false otherwise.
*/
boolean hasDocumentationFor(PsiElement element, PsiElement originalElement);
/**
* Checks if the provider is capable of asking the user to configure external documentation for an element.
*
* @param element the element for which no documentation was found
* @return true if the element is applicable to this provider and the provider has a UI to configure the documentation location, false otherwise
*/
boolean canPromptToConfigureDocumentation(PsiElement element);
/**
* Prompts the user to configure the external documentation for an element if none was found.
*
* @param element the element for which no documentation was found
*/
void promptToConfigureDocumentation(PsiElement element);
}
@@ -68,9 +68,15 @@ public class ExternalJavaDocAction extends AnAction {
DocumentationManager.storeOriginalElement(project, originalElement, element);
final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element);
final List<String> urls = provider.getUrlFor(element, originalElement);
assert urls != null;
assert !urls.isEmpty();
showExternalJavadoc(urls);
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(List<String> urls) {
@@ -103,7 +109,8 @@ public class ExternalJavaDocAction extends AnAction {
final DocumentationProvider provider = DocumentationManager.getProviderFromElement(element);
boolean enabled;
if (provider instanceof ExternalDocumentationProvider) {
enabled = ((ExternalDocumentationProvider) provider).hasDocumentationFor(element, originalElement);
final ExternalDocumentationProvider edProvider = (ExternalDocumentationProvider)provider;
enabled = edProvider.hasDocumentationFor(element, originalElement) || edProvider.canPromptToConfigureDocumentation(element);
}
else {
final List<String> urls = provider.getUrlFor(element, originalElement);
@@ -18,7 +18,6 @@ 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;
@@ -85,6 +84,15 @@ public class AndroidDocumentationProvider implements DocumentationProvider, Exte
return false;
}
@Override
public boolean canPromptToConfigureDocumentation(PsiElement element) {
return false;
}
@Override
public void promptToConfigureDocumentation(PsiElement element) {
}
private static boolean isMyContext(@NotNull final PsiElement element, @NotNull final Project project) {
if (element instanceof PsiClass) {
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
@@ -298,6 +298,15 @@ public class GroovyDocumentationProvider implements CodeDocumentationProvider, E
return CompositeDocumentationProvider.hasUrlsFor(this, element, originalElement);
}
@Override
public boolean canPromptToConfigureDocumentation(PsiElement element) {
return false;
}
@Override
public void promptToConfigureDocumentation(PsiElement element) {
}
private static String getMethodCandidateInfo(GrReferenceExpression expr) {
final GroovyResolveResult[] candidates = expr.multiResolve(false);
final String text = expr.getText();