IJPL-227634 [inspections]: group by inspection correctly in Problems|File

fixes grouping for inspections with a separate suppressID and custom RegExp/SSR inspections

GitOrigin-RevId: 5e736d5991b358483bb34ce6087f56bc59466909
This commit is contained in:
Bas Leijdekkers
2026-01-16 13:57:13 +00:00
committed by intellij-monorepo-bot
parent fa8b6f52ca
commit 62b7fb77e7
4 changed files with 23 additions and 23 deletions
@@ -8,6 +8,7 @@ import com.intellij.codeInspection.ex.*;
import com.intellij.find.FindManager;
import com.intellij.find.FindModel;
import com.intellij.find.FindResult;
import com.intellij.lang.annotation.ProblemGroup;
import com.intellij.modcommand.ModPsiUpdater;
import com.intellij.modcommand.PsiUpdateModCommandQuickFix;
import com.intellij.openapi.application.ApplicationManager;
@@ -115,6 +116,10 @@ public final class CustomRegExpInspection extends LocalInspectionTool implements
: new LocalQuickFix[] {new CustomRegExpQuickFix(findManager, model, text, result)};
final ProblemDescriptor descriptor =
manager.createProblemDescriptor(element, warningRange, problemDescriptor, GENERIC_ERROR_OR_WARNING, isOnTheFly, fix);
descriptor.setProblemGroup(new ProblemGroup() {
@Override
public String getProblemName() { return uuid; }
});
descriptors.add(new ProblemDescriptorWithReporterName((ProblemDescriptorBase)descriptor, uuid));
result = findManager.findString(text, result.getEndOffset(), model, vFile);
}
@@ -135,12 +140,7 @@ public final class CustomRegExpInspection extends LocalInspectionTool implements
}
final String suppressId = configuration.getSuppressId();
final String name = configuration.getName();
if (suppressId == null) {
HighlightDisplayKey.register(shortName, () -> name, SHORT_NAME, null, configuration);
}
else {
HighlightDisplayKey.register(shortName, () -> name, suppressId, SHORT_NAME, configuration);
}
HighlightDisplayKey.register(shortName, () -> name, StringUtil.isEmpty(suppressId) ? SHORT_NAME : suppressId, null, configuration);
}, ModalityState.nonModal());
}
@@ -1,4 +1,4 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.analysis.problemsView.toolWindow
import com.intellij.CommonBundle
@@ -83,8 +83,8 @@ open class HighlightingProblem(
override val group: String?
get() {
val id = info?.inspectionToolId ?: return null
return HighlightDisplayKey.getDisplayNameByKey(HighlightDisplayKey.findById(id))
val id = info?.problemGroup?.problemName ?: info?.inspectionToolId ?: return null
return HighlightDisplayKey.getDisplayNameByKey(HighlightDisplayKey.find(id))
}
override val contextGroup: CodeInsightContext?
@@ -1,4 +1,4 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.codeInsight.daemon.impl;
import com.intellij.codeInspection.ProblemDescriptorBase;
@@ -21,6 +21,7 @@ public final class ProblemDescriptorWithReporterName extends ProblemDescriptorBa
pd.getHighlightType(), pd.isAfterEndOfLine(), pd.getTextRangeInElement(), pd.showTooltip(),
pd.isOnTheFly(), pd.getTooltipTemplate()
);
setProblemGroup(pd.getProblemGroup());
myReportingToolShortName = reportingToolShortName;
}
@@ -1,4 +1,4 @@
// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
// Copyright 2000-2026 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package com.intellij.structuralsearch.inspection;
import com.intellij.codeInsight.daemon.HighlightDisplayKey;
@@ -8,6 +8,7 @@ import com.intellij.codeInspection.*;
import com.intellij.codeInspection.ex.*;
import com.intellij.dupLocator.iterators.CountingNodeIterator;
import com.intellij.dupLocator.iterators.NodeIterator;
import com.intellij.lang.annotation.ProblemGroup;
import com.intellij.notification.NotificationGroupManager;
import com.intellij.notification.NotificationType;
import com.intellij.openapi.application.ApplicationManager;
@@ -193,12 +194,7 @@ public class SSBasedInspection extends LocalInspectionTool implements DynamicGro
}
final String suppressId = configuration.getSuppressId();
final String name = configuration.getName();
if (suppressId == null) {
HighlightDisplayKey.register(shortName, () -> name, SHORT_NAME, null, configuration);
}
else {
HighlightDisplayKey.register(shortName, () -> name, suppressId, SHORT_NAME, configuration);
}
HighlightDisplayKey.register(shortName, () -> name, StringUtil.isEmpty(suppressId) ? SHORT_NAME : suppressId, null, configuration);
}, ModalityState.nonModal());
}
@@ -340,19 +336,22 @@ public class SSBasedInspection extends LocalInspectionTool implements DynamicGro
private void registerProblem(@NotNull MatchResult matchResult, @NotNull Configuration configuration, @NotNull ProblemsHolder holder) {
final PsiElement element = matchResult.getMatch();
PsiFile containingFile = element.getContainingFile();
PsiFile templateFile = PsiUtilCore.getTemplateLanguageFile(containingFile);
final PsiFile containingFile = element.getContainingFile();
final PsiFile templateFile = PsiUtilCore.getTemplateLanguageFile(containingFile);
if (!element.isPhysical() || holder.getFile() != containingFile && holder.getFile() != templateFile) {
return;
}
final LocalQuickFix fix = createQuickFix(element.getProject(), matchResult, configuration);
final Configuration mainConfiguration = getMainConfiguration(configuration);
final String name = ObjectUtils.notNull(mainConfiguration.getProblemDescriptor(), mainConfiguration.getName());
final InspectionManager manager = holder.getManager();
final ProblemDescriptor descriptor =
manager.createProblemDescriptor(element, name, fix, GENERIC_ERROR_OR_WARNING, holder.isOnTheFly());
final String toolName = configuration.getUuid();
holder.registerProblem(new ProblemDescriptorWithReporterName((ProblemDescriptorBase)descriptor, toolName));
holder.getManager().createProblemDescriptor(element, name, fix, GENERIC_ERROR_OR_WARNING, holder.isOnTheFly());
final String uuid = mainConfiguration.getUuid();
descriptor.setProblemGroup(new ProblemGroup() {
@Override
public String getProblemName() { return uuid; }
});
holder.registerProblem(new ProblemDescriptorWithReporterName((ProblemDescriptorBase)descriptor, uuid));
}
@Override