From bc03062f2431186eddbf0b85adbd990858c2b839 Mon Sep 17 00:00:00 2001 From: Sergey Simonchik Date: Wed, 23 May 2018 18:38:49 +0300 Subject: [PATCH] prevent SOE when a non-xml language has HTML base language (EA-120937) The following case is addressed: https://plugins.jetbrains.com/plugin/10253-illuminated-cloud-2 plugin has "com.illuminatedcloud.intellij.EmbeddedMarkupLanguage extends Language" with "HTML" base language. Also, there is "com.illuminatedcloud.intellij.editor.EmbeddedMarkupLineMarkerProvider extends HtmlLineMarkerProvider", which was probably added to prevent SOA previously. --- .../src/com/intellij/html/HtmlLineMarkerProvider.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java b/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java index 31c9c26fd7ac..3131f846b21a 100644 --- a/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java +++ b/xml/impl/src/com/intellij/html/HtmlLineMarkerProvider.java @@ -20,7 +20,6 @@ import com.intellij.codeInsight.daemon.LineMarkerProvider; import com.intellij.codeInsight.daemon.LineMarkerProviders; import com.intellij.lang.Language; import com.intellij.lang.xml.XMLLanguage; -import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiWhiteSpace; import com.intellij.util.containers.ContainerUtil; @@ -37,8 +36,6 @@ import java.util.Map; */ public class HtmlLineMarkerProvider implements LineMarkerProvider { - private static final Logger LOG = Logger.getInstance(HtmlLineMarkerProvider.class); - private final Map> embeddedLanguagesLineMarkerProviders = ContainerUtil.newConcurrentMap(); @Override @@ -49,10 +46,7 @@ public class HtmlLineMarkerProvider implements LineMarkerProvider { if (!(language instanceof XMLLanguage)) { List markerProviders = getAllLineMarkerProvidersForLanguage(language, embeddedLanguagesLineMarkerProviders); for (LineMarkerProvider provider : markerProviders) { - if (provider == this) { - LOG.error("Found " + HtmlLineMarkerProvider.class.getName() + " in " + LineMarkerProviders.EP_NAME + " for " + language); - continue; - } + if (provider instanceof HtmlLineMarkerProvider) continue; LineMarkerInfo info = provider.getLineMarkerInfo(element); if (info != null) { return info; @@ -92,6 +86,7 @@ public class HtmlLineMarkerProvider implements LineMarkerProvider { List lineMarkerProviders = getAllLineMarkerProvidersForLanguage(language, localEmbeddedLanguagesLineMarkerProviders); for (LineMarkerProvider provider : lineMarkerProviders) { + if (provider instanceof HtmlLineMarkerProvider) continue; if (embeddedLineMarkersWorkItems == null) embeddedLineMarkersWorkItems = new THashMap<>(); List elementList = embeddedLineMarkersWorkItems.computeIfAbsent(provider, k -> new ArrayList<>(5));