OC-1152 Shift+F1 does not work on selectors + more AppCode QuickDock fixes

This commit is contained in:
Alexey Pegov
2011-09-20 14:28:48 +04:00
parent 7bbf2d5ca8
commit 63ecd0546f
3 changed files with 51 additions and 4 deletions
@@ -20,6 +20,7 @@ import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
@@ -76,6 +77,29 @@ public class CompositeDocumentationProvider implements DocumentationProvider, Ex
return false;
}
@Override
public boolean canFetchDocumentationLink(String link) {
for (DocumentationProvider provider : myProviders) {
if (provider instanceof ExternalDocumentationHandler && ((ExternalDocumentationHandler)provider).canFetchDocumentationLink(link)) {
return true;
}
}
return false;
}
@NotNull
@Override
public String fetchExternalDocumentation(String link, Project project) {
for (DocumentationProvider provider : myProviders) {
if (provider instanceof ExternalDocumentationHandler && ((ExternalDocumentationHandler)provider).canFetchDocumentationLink(link)) {
return ((ExternalDocumentationHandler)provider).fetchExternalDocumentation(link, project);
}
}
throw new IllegalStateException("Unable to find a provider to fetch documentation link!");
}
public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) {
for ( DocumentationProvider provider : myProviders ) {
String result = provider.getQuickNavigateInfo(element, originalElement);
@@ -15,8 +15,10 @@
*/
package com.intellij.lang.documentation;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiManager;
import org.jetbrains.annotations.NotNull;
/**
* User: spLeaner
@@ -24,4 +26,8 @@ import com.intellij.psi.PsiManager;
public interface ExternalDocumentationHandler {
boolean handleExternal(PsiElement element, PsiElement originalElement);
boolean handleExternalLink(PsiManager psiManager, String link, PsiElement context);
boolean canFetchDocumentationLink(String link);
@NotNull
String fetchExternalDocumentation(String link, Project project);
}
@@ -837,7 +837,7 @@ public class DocumentationManager {
return originalElementPointer != null ? originalElementPointer.getElement() : null;
}
void navigateByLink(final DocumentationComponent component, String url) {
void navigateByLink(final DocumentationComponent component, final String url) {
component.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
final PsiElement psiElement = component.getElement();
final PsiManager manager = PsiManager.getInstance(getProject(psiElement));
@@ -863,9 +863,26 @@ public class DocumentationManager {
boolean processed = false;
if (provider instanceof CompositeDocumentationProvider) {
for (DocumentationProvider documentationProvider : ((CompositeDocumentationProvider)provider).getProviders()) {
if (documentationProvider instanceof ExternalDocumentationHandler && ((ExternalDocumentationHandler)documentationProvider).handleExternalLink(manager, url, psiElement)) {
processed = true;
break;
if (documentationProvider instanceof ExternalDocumentationHandler) {
final ExternalDocumentationHandler externalDocumentationHandler = (ExternalDocumentationHandler)documentationProvider;
if (externalDocumentationHandler.canFetchDocumentationLink(url)) {
fetchDocInfo(new DocumentationCollector() {
@Override
public String getDocumentation() throws Exception {
return externalDocumentationHandler.fetchExternalDocumentation(url, myProject);
}
@Override
public PsiElement getElement() {
return psiElement;
}
}, component);
processed = true;
}
else if (externalDocumentationHandler.handleExternalLink(manager, url, psiElement)) {
processed = true;
break;
}
}
}
}