diff --git a/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java b/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java index 537d367c7bdb..9a6a53966be9 100644 --- a/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java +++ b/java/jsp-base-openapi/src/com/intellij/psi/jsp/JspDirectiveKind.java @@ -19,6 +19,7 @@ package com.intellij.psi.jsp; * @author ven */ public enum JspDirectiveKind { + /** Mapped to both page and tag directives */ PAGE, INCLUDE, TAGLIB, diff --git a/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java b/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java index 6b3c81872974..443078992067 100644 --- a/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java +++ b/platform/lang-api/src/com/intellij/lang/LanguageDocumentation.java @@ -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 { public static final LanguageDocumentation INSTANCE = new LanguageDocumentation(); @@ -32,11 +30,6 @@ public class LanguageDocumentation extends LanguageExtension providers = allForLanguage(l); - if (providers.size() < 2) { - return super.forLanguage(l); - } - - return new CompositeDocumentationProvider(providers); + return CompositeDocumentationProvider.wrapProviders(allForLanguage(l)); } } \ No newline at end of file diff --git a/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java b/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java index 98aa3ac92463..0cdf910f30da 100644 --- a/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java +++ b/platform/lang-api/src/com/intellij/lang/documentation/CompositeDocumentationProvider.java @@ -28,24 +28,25 @@ public class CompositeDocumentationProvider implements DocumentationProvider, Ex private final List myProviders; - public CompositeDocumentationProvider (DocumentationProvider ... documentationProviders) { - this(Arrays.asList(documentationProviders)); + public static DocumentationProvider wrapProviders(Collection providers) { + ArrayList list = new ArrayList(); + 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 providers) { - myProviders = new ArrayList(providers); - } - - public void inject (DocumentationProvider provider) { - myProviders.add ( provider ); - } - - public void remove (DocumentationProvider provider) { - myProviders.remove ( provider ); + private CompositeDocumentationProvider(List providers) { + myProviders = providers; } public List getProviders() { - return Collections.unmodifiableList(myProviders); + return myProviders; } public String getQuickNavigateInfo(PsiElement element) { diff --git a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java index 9f1ddcece42c..0f6dcfa19449 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/documentation/DocumentationManager.java @@ -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 result, final DocumentationProvider t) { - if (t instanceof CompositeDocumentationProvider) result.addAll(((CompositeDocumentationProvider)t).getProviders()); - else ContainerUtil.addIfNotNull(t, result); + return CompositeDocumentationProvider.wrapProviders(result); } @Nullable