IDEA-169924 add utility methods to BreadcrumbsInfoProvider

This commit is contained in:
Sergey Malenkov
2017-04-13 16:46:19 +03:00
parent 1d77df03bc
commit ab242e1db5
3 changed files with 27 additions and 12 deletions
@@ -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();
}
@@ -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 {
@@ -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<BreadcrumbsInfoProvider> EP_NAME = ExtensionPointName.create("com.intellij.breadcrumbsInfoProvider");
public static final ExtensionPointName<BreadcrumbsInfoProvider> 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<Language> getSupportedLanguages() {
LinkedHashMap<String, Language> 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<Language> predicate) {
for (BreadcrumbsInfoProvider provider : EP_NAME.getExtensions()) {
for (Language language : provider.getLanguages()) {
if (predicate.test(language)) return provider;
}
}
return null;
}
}