From ab242e1db51bce87c62afbfce8fbd34c4718aa44 Mon Sep 17 00:00:00 2001 From: Sergey Malenkov Date: Wed, 12 Apr 2017 13:24:25 +0300 Subject: [PATCH] IDEA-169924 add utility methods to BreadcrumbsInfoProvider --- .../yaml/breadcrumbs/YAMLBreadcrumbsTest.java | 3 +-- .../breadcrumbs/BreadcrumbsXmlWrapper.java | 10 +------ .../breadcrumbs/BreadcrumbsInfoProvider.java | 26 ++++++++++++++++++- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java b/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java index bff722295383..58370e072462 100644 --- a/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java +++ b/plugins/yaml/testSrc/org/jetbrains/yaml/breadcrumbs/YAMLBreadcrumbsTest.java @@ -100,8 +100,7 @@ public class YAMLBreadcrumbsTest extends LightPlatformCodeInsightFixtureTestCase } final Language language = element.getContainingFile().getLanguage(); - final BreadcrumbsInfoProvider provider = ContainerUtil.find(Extensions.getExtensions(BreadcrumbsInfoProvider.EP_NAME), - (p) -> Arrays.asList(p.getLanguages()).contains(language)); + final BreadcrumbsInfoProvider provider = BreadcrumbsInfoProvider.find(language::equals); if (provider == null) { return Collections.emptyList(); } diff --git a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java index 2a1729cd84e3..eb0f31205fa4 100644 --- a/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java +++ b/xml/impl/src/com/intellij/xml/breadcrumbs/BreadcrumbsXmlWrapper.java @@ -449,15 +449,7 @@ public class BreadcrumbsXmlWrapper extends JComponent implements Disposable { @Nullable private static BreadcrumbsInfoProvider getInfoProvider(@NotNull final Language language) { - for (final BreadcrumbsInfoProvider provider : Extensions.getExtensions(BreadcrumbsInfoProvider.EP_NAME)) { - for (final Language language1 : provider.getLanguages()) { - if (language.isKindOf(language1)) { - return provider; - } - } - } - - return null; + return BreadcrumbsInfoProvider.find(supported -> supported.isKindOf(language)); } private static class MyUpdate extends Update { diff --git a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java index 9ddf8875132b..56d87d74034a 100644 --- a/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java +++ b/xml/openapi/src/com/intellij/xml/breadcrumbs/BreadcrumbsInfoProvider.java @@ -28,8 +28,12 @@ import com.intellij.openapi.extensions.ExtensionPointName; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.LinkedHashMap; +import java.util.function.Predicate; + public abstract class BreadcrumbsInfoProvider { - public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.breadcrumbsInfoProvider"); + public static final ExtensionPointName EP_NAME + = ExtensionPointName.create("com.intellij.breadcrumbsInfoProvider"); public abstract Language[] getLanguages(); @@ -45,4 +49,24 @@ public abstract class BreadcrumbsInfoProvider { @Nullable public abstract String getElementTooltip(@NotNull final PsiElement e); + + @NotNull + public static Iterable getSupportedLanguages() { + LinkedHashMap map = new LinkedHashMap<>(); + for (BreadcrumbsInfoProvider provider : EP_NAME.getExtensions()) { + for (Language language : provider.getLanguages()) { + map.put(language.getID(), language); + } + } + return map.values(); + } + + public static BreadcrumbsInfoProvider find(Predicate predicate) { + for (BreadcrumbsInfoProvider provider : EP_NAME.getExtensions()) { + for (Language language : provider.getLanguages()) { + if (predicate.test(language)) return provider; + } + } + return null; + } } \ No newline at end of file