Merge branch 'master' of git@git.labs.intellij.net:idea/community

This commit is contained in:
Eugene Kudelevsky
2010-07-19 12:22:17 +04:00
4 changed files with 20 additions and 32 deletions
@@ -19,6 +19,7 @@ package com.intellij.psi.jsp;
* @author ven
*/
public enum JspDirectiveKind {
/** Mapped to both page and tag directives */
PAGE,
INCLUDE,
TAGLIB,
@@ -22,8 +22,6 @@ package com.intellij.lang;
import com.intellij.lang.documentation.CompositeDocumentationProvider;
import com.intellij.lang.documentation.DocumentationProvider;
import java.util.List;
public class LanguageDocumentation extends LanguageExtension<DocumentationProvider> {
public static final LanguageDocumentation INSTANCE = new LanguageDocumentation();
@@ -32,11 +30,6 @@ public class LanguageDocumentation extends LanguageExtension<DocumentationProvid
}
public DocumentationProvider forLanguage(final Language l) {
final List<DocumentationProvider> providers = allForLanguage(l);
if (providers.size() < 2) {
return super.forLanguage(l);
}
return new CompositeDocumentationProvider(providers);
return CompositeDocumentationProvider.wrapProviders(allForLanguage(l));
}
}
@@ -28,24 +28,25 @@ public class CompositeDocumentationProvider implements DocumentationProvider, Ex
private final List<DocumentationProvider> myProviders;
public CompositeDocumentationProvider (DocumentationProvider ... documentationProviders) {
this(Arrays.asList(documentationProviders));
public static DocumentationProvider wrapProviders(Collection<DocumentationProvider> providers) {
ArrayList<DocumentationProvider> list = new ArrayList<DocumentationProvider>();
for (DocumentationProvider provider : providers) {
if (provider instanceof CompositeDocumentationProvider) {
list.addAll(((CompositeDocumentationProvider)provider).getProviders());
}
else if (provider != null) {
list.add(provider);
}
}
return list.size() == 1 ? list.get(0) : new CompositeDocumentationProvider(Collections.unmodifiableList(list));
}
public CompositeDocumentationProvider(Collection<DocumentationProvider> providers) {
myProviders = new ArrayList<DocumentationProvider>(providers);
}
public void inject (DocumentationProvider provider) {
myProviders.add ( provider );
}
public void remove (DocumentationProvider provider) {
myProviders.remove ( provider );
private CompositeDocumentationProvider(List<DocumentationProvider> providers) {
myProviders = providers;
}
public List<DocumentationProvider> getProviders() {
return Collections.unmodifiableList(myProviders);
return myProviders;
}
public String getQuickNavigateInfo(PsiElement element) {
@@ -64,7 +64,6 @@ import com.intellij.ui.popup.NotLookupOrSearchCondition;
import com.intellij.ui.popup.PopupUpdateProcessor;
import com.intellij.util.Alarm;
import com.intellij.util.Processor;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.ui.update.Activatable;
import com.intellij.util.ui.update.UiNotifyConnector;
import org.jetbrains.annotations.NonNls;
@@ -777,22 +776,16 @@ public class DocumentationManager {
DocumentationProvider elementProvider =
element == null || elementLanguage.is(containingFileLanguage) ? null : LanguageDocumentation.INSTANCE.forLanguage(elementLanguage);
addProviderToResult(result, elementProvider);
addProviderToResult(result, originalProvider);
result.add(elementProvider);
result.add(originalProvider);
if (containingFile != null) {
final Language baseLanguage = containingFile.getViewProvider().getBaseLanguage();
if (!baseLanguage.is(containingFileLanguage)) {
addProviderToResult(result, LanguageDocumentation.INSTANCE.forLanguage(baseLanguage));
result.add(LanguageDocumentation.INSTANCE.forLanguage(baseLanguage));
}
}
// return extensible documentation provider even if the list is empty
return new CompositeDocumentationProvider(result);
}
private static void addProviderToResult(final Set<DocumentationProvider> result, final DocumentationProvider t) {
if (t instanceof CompositeDocumentationProvider) result.addAll(((CompositeDocumentationProvider)t).getProviders());
else ContainerUtil.addIfNotNull(t, result);
return CompositeDocumentationProvider.wrapProviders(result);
}
@Nullable