[xml] WEB-72084 Use information from InjectedLanguageManager to adjust the inspection severity level.

(cherry picked from commit 5bc575f71bf20511808ab1227927a71accd9a084)

IJ-CR-160968

GitOrigin-RevId: f595ede4bb8b5b57bd92917b0c18f138e76ee6e1
This commit is contained in:
Piotr Tomiak
2025-04-18 14:50:34 +02:00
committed by intellij-monorepo-bot
parent 42459505b1
commit 3860bc71fe
5 changed files with 22 additions and 30 deletions

View File

@@ -47,6 +47,7 @@ internal open class CodeFenceInjector : MultiHostInjector {
}
registrar.startInjecting(language)
injectAsOnePlace(host, registrar, language)
registrar.makeInspectionsLenient(true)
registrar.doneInjecting()
}

View File

@@ -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.FRANKENSTEIN_INJECTION.get(element.getContainingFile()) == Boolean.TRUE;
InjectedLanguageManager injectedLanguageManager = InjectedLanguageManager.getInstance(element.getProject());
return injectedLanguageManager.isFrankensteinInjection(element)
|| injectedLanguageManager.shouldInspectionsBeLenient(element);
}
public static boolean skipValidation(PsiElement context) {

View File

@@ -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;
}
}

View File

@@ -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
);
}
}
}

View File

@@ -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;
}