From 06eca8a8a0da0d09907a3059061db2478517eac8 Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Fri, 18 Apr 2025 14:50:34 +0200 Subject: [PATCH] [xml] WEB-72084 Use information from InjectedLanguageManager to adjust the inspection severity level. GitOrigin-RevId: 5bc575f71bf20511808ab1227927a71accd9a084 --- .../fenceInjection/CodeFenceInjector.kt | 1 + .../impl/analysis/XmlHighlightVisitor.java | 9 +++---- .../HtmlUnknownAttributeInspectionBase.java | 5 ++++ .../RequiredAttributesInspectionBase.java | 27 ++++++++----------- .../xml/util/CheckTagEmptyBodyInspection.java | 10 ++----- 5 files changed, 22 insertions(+), 30 deletions(-) diff --git a/plugins/markdown/fenceInjection/src/main/java/org/intellij/plugins/markdown/fenceInjection/CodeFenceInjector.kt b/plugins/markdown/fenceInjection/src/main/java/org/intellij/plugins/markdown/fenceInjection/CodeFenceInjector.kt index 39cc86a0170c..3a96ccc4d501 100644 --- a/plugins/markdown/fenceInjection/src/main/java/org/intellij/plugins/markdown/fenceInjection/CodeFenceInjector.kt +++ b/plugins/markdown/fenceInjection/src/main/java/org/intellij/plugins/markdown/fenceInjection/CodeFenceInjector.kt @@ -43,6 +43,7 @@ internal open class CodeFenceInjector : MultiHostInjector { } registrar.startInjecting(language) injectAsOnePlace(host, registrar, language) + registrar.makeInspectionsLenient(true) registrar.doneInjecting() } diff --git a/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java b/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java index c6399145c059..10d11eb54e0d 100644 --- a/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java +++ b/xml/xml-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/XmlHighlightVisitor.java @@ -253,11 +253,6 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV } HighlightInfoType type = getTagProblemInfoType(tag); - if (InjectedLanguageManager.getInstance(tag.getProject()).getInjectionHost(tag) != null) { - // disabled in injected fragments - return; - } - addElementsForTagWithManyQuickFixes(tag, XmlAnalysisBundle.message("xml.inspections.element.is.not.allowed.here", name), type); return; } @@ -296,7 +291,9 @@ public class XmlHighlightVisitor extends XmlElementVisitor implements HighlightV } public static boolean isInjectedWithoutValidation(PsiElement element) { - return InjectedLanguageManager.getInstance(element.getProject()).isFrankensteinInjection(element); + InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(element.getProject()); + return injectedLanguageManager.isFrankensteinInjection(element) + || injectedLanguageManager.shouldInspectionsBeLenient(element); } public static boolean skipValidation(PsiElement context) { diff --git a/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/HtmlUnknownAttributeInspectionBase.java b/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/HtmlUnknownAttributeInspectionBase.java index ec71455e229d..23d49ce725cf 100644 --- a/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/HtmlUnknownAttributeInspectionBase.java +++ b/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/HtmlUnknownAttributeInspectionBase.java @@ -2,6 +2,7 @@ package com.intellij.codeInspection.htmlInspections; import com.intellij.codeInsight.daemon.impl.analysis.RemoveAttributeIntentionFix; +import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; @@ -115,6 +116,10 @@ public class HtmlUnknownAttributeInspectionBase extends HtmlUnknownElementInspec highlightType = providerHighlightType; } } + if (XmlHighlightVisitor.isInjectedWithoutValidation(tag) + && ProblemHighlightType.WEAK_WARNING.ordinal() < highlightType.ordinal()) { + highlightType = ProblemHighlightType.WEAK_WARNING; + } return highlightType; } } diff --git a/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RequiredAttributesInspectionBase.java b/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RequiredAttributesInspectionBase.java index 22d081ec4f2d..6e4ef221590b 100644 --- a/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RequiredAttributesInspectionBase.java +++ b/xml/xml-analysis-impl/src/com/intellij/codeInspection/htmlInspections/RequiredAttributesInspectionBase.java @@ -5,7 +5,6 @@ import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightingAwareElement import com.intellij.codeInspection.*; import com.intellij.codeInspection.util.InspectionMessage; import com.intellij.html.impl.providers.HtmlAttributeValueProvider; -import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.NlsSafe; @@ -99,21 +98,17 @@ public class RequiredAttributesInspectionBase extends HtmlLocalInspectionTool im if (!hasAttribute(tag, attrName) && !XmlExtension.getExtension(tag.getContainingFile()).isRequiredAttributeImplicitlyPresent(tag, attrName)) { - if (InjectedLanguageManager.getInstance(tag.getProject()).getInjectionHost(tag) == null) { - // disabled in injected fragments - - LocalQuickFix insertRequiredAttributeIntention = - isOnTheFly ? XmlQuickFixFactory.getInstance().insertRequiredAttributeFix(tag, attrName) : null; - reportOneTagProblem( - tag, - attrName, - XmlAnalysisBundle.message("xml.inspections.element.doesnt.have.required.attribute", name, attrName), - insertRequiredAttributeIntention, - holder, - getIntentionAction(attrName), - isOnTheFly - ); - } + LocalQuickFix insertRequiredAttributeIntention = + isOnTheFly ? XmlQuickFixFactory.getInstance().insertRequiredAttributeFix(tag, attrName) : null; + reportOneTagProblem( + tag, + attrName, + XmlAnalysisBundle.message("xml.inspections.element.doesnt.have.required.attribute", name, attrName), + insertRequiredAttributeIntention, + holder, + getIntentionAction(attrName), + isOnTheFly + ); } } } diff --git a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java index 94c880552e51..6aef39979e35 100644 --- a/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java +++ b/xml/xml-analysis-impl/src/com/intellij/xml/util/CheckTagEmptyBodyInspection.java @@ -2,11 +2,11 @@ package com.intellij.xml.util; +import com.intellij.codeInsight.daemon.impl.analysis.XmlHighlightVisitor; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.codeInspection.XmlSuppressableInspectionTool; import com.intellij.lang.ASTNode; -import com.intellij.lang.injection.InjectedLanguageManager; import com.intellij.lang.xml.XMLLanguage; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElementVisitor; @@ -21,19 +21,13 @@ import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; public final class CheckTagEmptyBodyInspection extends XmlSuppressableInspectionTool { - private final boolean enableInInjectedCode; public CheckTagEmptyBodyInspection() { - this(false); - } - - public CheckTagEmptyBodyInspection(boolean enableInInjectedCode) { - this.enableInInjectedCode = enableInInjectedCode; } @Override public @NotNull PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly) { - if (!enableInInjectedCode && InjectedLanguageManager.getInstance(holder.getProject()).isInjectedFragment(holder.getFile())) { + if (XmlHighlightVisitor.isInjectedWithoutValidation(holder.getFile())) { // not inside injected code return PsiElementVisitor.EMPTY_VISITOR; }