fix VueTypeScriptHighlightingTest

Test failures were caused by added com.intellij.javascript.jest.JestSnapshotReferenceLineMarkerProvider for JavaScript language.
Use LineMarkerProviders.INSTANCE.allForLanguage(language) instead of LineMarkerProviders.INSTANCE.forLanguage(language) when collecting line markers from non-xml elements.
This commit is contained in:
Sergey Simonchik
2018-04-04 19:28:54 +03:00
parent 793d868ef2
commit 1145384502
@@ -34,7 +34,7 @@ import java.util.Map;
* @author Maxim.Mossienko
*/
public class HtmlLineMarkerProvider implements LineMarkerProvider {
private final Map<Language, LineMarkerProvider> embeddedLanguagesLineMarkerProviders = new THashMap<>();
private final Map<Language, List<LineMarkerProvider>> 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<LineMarkerProvider> 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<Language, LineMarkerProvider> embeddedLanguagesLineMarkerProviders) {
final LineMarkerProvider markerProvider;
if (!embeddedLanguagesLineMarkerProviders.containsKey(language)) {
embeddedLanguagesLineMarkerProviders.put(language, markerProvider = LineMarkerProviders.INSTANCE.forLanguage(language));
@NotNull
private static List<LineMarkerProvider> getAllLineMarkerProvidersForLanguage(
@NotNull Language language,
@NotNull Map<Language, List<LineMarkerProvider>> embeddedLanguagesLineMarkerProviders
) {
List<LineMarkerProvider> 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<PsiElement> elements, @NotNull final Collection<LineMarkerInfo> result) {
Map<Language, LineMarkerProvider> localEmbeddedLanguagesLineMarkerProviders = null;
Map<Language, List<LineMarkerProvider>> localEmbeddedLanguagesLineMarkerProviders = null;
Map<LineMarkerProvider, List<PsiElement>> 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<LineMarkerProvider> lineMarkerProviders = getAllLineMarkerProvidersForLanguage(language,
localEmbeddedLanguagesLineMarkerProviders);
for (LineMarkerProvider provider : lineMarkerProviders) {
if (embeddedLineMarkersWorkItems == null) embeddedLineMarkersWorkItems = new THashMap<>();
List<PsiElement> elementList = embeddedLineMarkersWorkItems.computeIfAbsent(lineMarkerProvider, k -> new ArrayList<>(5));
List<PsiElement> elementList = embeddedLineMarkersWorkItems.computeIfAbsent(provider, k -> new ArrayList<>(5));
elementList.add(element);
}