diff --git a/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java b/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java
index ef2b29661806..5538f40b51f3 100644
--- a/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java
+++ b/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java
@@ -34,7 +34,7 @@ import java.util.Map;
* @author Maxim.Mossienko
*/
public class HtmlLineMarkerProvider implements LineMarkerProvider {
- private final Map embeddedLanguagesLineMarkerProviders = new THashMap<>();
+ private final Map> embeddedLanguagesLineMarkerProviders = new THashMap<>();
@Override
public LineMarkerInfo getLineMarkerInfo(@NotNull final PsiElement element) {
@@ -42,29 +42,33 @@ public class HtmlLineMarkerProvider implements LineMarkerProvider {
final Language language = element.getLanguage();
if (!(language instanceof XMLLanguage)) {
- final LineMarkerProvider markerProvider = getLineMarkerProviderFromLanguage(language, embeddedLanguagesLineMarkerProviders);
-
- if (markerProvider != null) return markerProvider.getLineMarkerInfo(element);
+ List markerProviders = getAllLineMarkerProvidersForLanguage(language, embeddedLanguagesLineMarkerProviders);
+ for (LineMarkerProvider provider : markerProviders) {
+ LineMarkerInfo info = provider.getLineMarkerInfo(element);
+ if (info != null) {
+ return info;
+ }
+ }
}
return null;
}
- private static LineMarkerProvider getLineMarkerProviderFromLanguage(final Language language,
- final Map embeddedLanguagesLineMarkerProviders) {
- final LineMarkerProvider markerProvider;
-
- if (!embeddedLanguagesLineMarkerProviders.containsKey(language)) {
- embeddedLanguagesLineMarkerProviders.put(language, markerProvider = LineMarkerProviders.INSTANCE.forLanguage(language));
+ @NotNull
+ private static List getAllLineMarkerProvidersForLanguage(
+ @NotNull Language language,
+ @NotNull Map> embeddedLanguagesLineMarkerProviders
+ ) {
+ List markerProviders = embeddedLanguagesLineMarkerProviders.get(language);
+ if (markerProviders == null) {
+ markerProviders = LineMarkerProviders.INSTANCE.allForLanguage(language);
+ embeddedLanguagesLineMarkerProviders.put(language, markerProviders);
}
- else {
- markerProvider = embeddedLanguagesLineMarkerProviders.get(language);
- }
- return markerProvider;
+ return markerProviders;
}
@Override
public void collectSlowLineMarkers(@NotNull final List elements, @NotNull final Collection result) {
- Map localEmbeddedLanguagesLineMarkerProviders = null;
+ Map> localEmbeddedLanguagesLineMarkerProviders = null;
Map> embeddedLineMarkersWorkItems = null;
for(PsiElement element:elements) {
@@ -76,11 +80,11 @@ public class HtmlLineMarkerProvider implements LineMarkerProvider {
localEmbeddedLanguagesLineMarkerProviders = new THashMap<>();
}
- final LineMarkerProvider lineMarkerProvider = getLineMarkerProviderFromLanguage(language, localEmbeddedLanguagesLineMarkerProviders);
-
- if (lineMarkerProvider != null) {
+ List lineMarkerProviders = getAllLineMarkerProvidersForLanguage(language,
+ localEmbeddedLanguagesLineMarkerProviders);
+ for (LineMarkerProvider provider : lineMarkerProviders) {
if (embeddedLineMarkersWorkItems == null) embeddedLineMarkersWorkItems = new THashMap<>();
- List elementList = embeddedLineMarkersWorkItems.computeIfAbsent(lineMarkerProvider, k -> new ArrayList<>(5));
+ List elementList = embeddedLineMarkersWorkItems.computeIfAbsent(provider, k -> new ArrayList<>(5));
elementList.add(element);
}