Skip to content

Commit 8c610f8

Browse files
committed
Add grouping of results by the source check (#670).
1 parent e8320fb commit 8c610f8

File tree

6 files changed

+34
-12
lines changed

6 files changed

+34
-12
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
# CheckStyle-IDEA Changelog
33

4+
* **5.109.1** New: Added grouping of results by the source check (#670).
45
* **5.109.0** New: Added Checkstyle 10.26.1.
56
* **5.108.1** Fixed: Resolved edge case if Piccolo is in the project classpath (#668).
67
* **5.108.0** New: Added Checkstyle 10.25.1 & 10.26.0.

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ plugins {
1919
id("org.infernus.idea.checkstyle.build")
2020
}
2121

22-
version = "5.109.0"
22+
version = "5.109.1"
2323

2424
intellijPlatform {
2525
pluginConfiguration {
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.infernus.idea.checkstyle.actions;
2+
3+
import org.infernus.idea.checkstyle.toolwindow.ResultGrouping;
4+
5+
public class GroupBySourceCheck extends GroupingAction {
6+
7+
public GroupBySourceCheck() {
8+
super(ResultGrouping.BY_SOURCE_CHECK);
9+
}
10+
}

src/main/java/org/infernus/idea/checkstyle/toolwindow/ResultGrouping.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ public enum ResultGrouping {
55
BY_FILE,
66
BY_PACKAGE,
77
BY_SEVERITY,
8-
BY_CONFIGURATION_LOCATION
8+
BY_CONFIGURATION_LOCATION,
9+
BY_SOURCE_CHECK
910

1011
}

src/main/java/org/infernus/idea/checkstyle/toolwindow/ResultTreeModel.java

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.Serial;
44
import java.util.*;
5+
import java.util.function.Function;
56
import javax.swing.tree.DefaultMutableTreeNode;
67
import javax.swing.tree.DefaultTreeModel;
78
import javax.swing.tree.TreeNode;
@@ -87,7 +88,8 @@ private void rebuildTree() {
8788
switch (grouping) {
8889
case BY_PACKAGE -> groupResultsByPackage();
8990
case BY_SEVERITY -> groupResultsBySeverity();
90-
case BY_CONFIGURATION_LOCATION -> groupResultsByConfigurationLocation();
91+
case BY_CONFIGURATION_LOCATION -> groupResultsBy(ResultProblem::locationDescription);
92+
case BY_SOURCE_CHECK -> groupResultsBy(ResultProblem::sourceCheck);
9193
default -> groupResultsByFile();
9294
}
9395

@@ -295,14 +297,14 @@ private SortedMap<SeverityLevel, Map<PsiFile, List<ResultProblem>>> groupBySever
295297
return groupedBySeverity;
296298
}
297299

298-
private void groupResultsByConfigurationLocation() {
300+
private void groupResultsBy(final Function<ResultProblem, String> groupingKeyFunction) {
299301
int problemCount = 0;
300302

301-
var groupedByConfigurationLocation = groupByConfigurationLocation(lastResults);
302-
for (String locationDescription : groupedByConfigurationLocation.keySet()) {
303+
var groupsResults = groupBy(lastResults, groupingKeyFunction);
304+
for (String locationDescription : groupsResults.keySet()) {
303305
final var locationNode = new ToggleableTreeNode();
304306

305-
final var fileToProblems = groupedByConfigurationLocation.get(locationDescription);
307+
final var fileToProblems = groupsResults.get(locationDescription);
306308
final var childProblemCount = createFileNodes(sortByFileName(fileToProblems), fileToProblems, locationNode);
307309
if (childProblemCount > 0) {
308310
final var packageInfo = new ConfigurationLocationGroupTreeInfo(locationDescription, childProblemCount);
@@ -316,19 +318,20 @@ private void groupResultsByConfigurationLocation() {
316318
setRootMessage(problemCount);
317319
}
318320

319-
private SortedMap<String, Map<PsiFile, List<ResultProblem>>> groupByConfigurationLocation(final Map<PsiFile, List<ResultProblem>> results) {
321+
private SortedMap<String, Map<PsiFile, List<ResultProblem>>> groupBy(final Map<PsiFile, List<ResultProblem>> results,
322+
final Function<ResultProblem, String> groupingKeyFunction) {
320323
if (results == null || results.isEmpty()) {
321324
return Collections.emptySortedMap();
322325
}
323-
final var groupedByConfigurationLocation = new TreeMap<String, Map<PsiFile, List<ResultProblem>>>();
326+
final var groupedProblems = new TreeMap<String, Map<PsiFile, List<ResultProblem>>>();
324327
results.forEach((file, problems) -> {
325328
for (ResultProblem problem : problems) {
326-
groupedByConfigurationLocation
327-
.computeIfAbsent(problem.locationDescription(), locationKey -> new HashMap<>())
329+
groupedProblems
330+
.computeIfAbsent(groupingKeyFunction.apply(problem), key -> new HashMap<>())
328331
.computeIfAbsent(file, keyFile -> new ArrayList<>()).add(problem);
329332
}
330333
});
331-
return groupedByConfigurationLocation;
334+
return groupedProblems;
332335
}
333336

334337
private void setRootMessage(final int problemCount) {

src/main/resources/META-INF/plugin.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<change-notes>
2626
<![CDATA[
2727
<ul>
28+
<li>5.109.1: New: Added grouping of results by the source check (#670).</li>
2829
<li>5.109.0: New: Added Checkstyle 10.26.1.</li>
2930
<li>5.108.1: Fixed: Resolved edge case if Piccolo is in the project classpath (#668).</li>
3031
<li>5.108.0: New: Added Checkstyle 10.25.1 & 10.26.0.</li>
@@ -169,6 +170,12 @@
169170
text="Group Results By Rules File"
170171
description="Group the displayed results by the rules files that contained the rule"
171172
icon="/actions/GroupByPrefix.svg"/>
173+
174+
<action id="CheckStyleGroupBySourceCheckAction"
175+
class="org.infernus.idea.checkstyle.actions.GroupBySourceCheck"
176+
text="Group Results By Source Check"
177+
description="Group the displayed results by their check that was the source of the problem"
178+
icon="/actions/GroupByClass.svg"/>
172179
</group>
173180

174181
<group id="CheckStylePluginActions" text="CheckStyle" popup="true">

0 commit comments

Comments
 (0)