From 06c8a1dda73ea8def22cc55901b6072d116d6984 Mon Sep 17 00:00:00 2001 From: Vadym Hula Date: Mon, 29 Sep 2025 23:39:04 +0300 Subject: [PATCH 1/3] Show popup menu on PMD rule nodes This popup menu allows suppressing multiple PMD violations of the same type. --- .../intellij/plugins/bodhi/pmd/PMDResultPanel.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java b/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java index 50926e5..81ae5a3 100644 --- a/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java +++ b/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java @@ -39,10 +39,7 @@ import javax.swing.*; import javax.swing.event.ChangeListener; -import javax.swing.tree.DefaultMutableTreeNode; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeModel; -import javax.swing.tree.TreePath; +import javax.swing.tree.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; @@ -373,6 +370,14 @@ private void showPopup(DefaultMutableTreeNode treeNode, MouseEvent e) { if (treeNode instanceof PMDViolationNode) { popupMenu.addViolation(((PMDViolationNode) treeNode).getPmdViolation()); } + if (treeNode instanceof PMDRuleNode pmdRuleNode) { + for (int i = 0; i < pmdRuleNode.getChildCount(); i++) { + TreeNode childAt = pmdRuleNode.getChildAt(i); + if (childAt instanceof PMDViolationNode) { + popupMenu.addViolation(((PMDViolationNode) childAt).getPmdViolation()); + } + } + } //Display popup only if actions are possible if (popupMenu.hasVisibleMenuItems()) { popupMenu.getMenu().show(resultTree, e.getX(), e.getY()); From 366fc8479f992cf007d2dc3d6a80a1b1e771aa80 Mon Sep 17 00:00:00 2001 From: Vadym Hula Date: Mon, 29 Sep 2025 23:42:53 +0300 Subject: [PATCH 2/3] Restore imports --- .../java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java b/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java index 81ae5a3..2eafcc5 100644 --- a/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java +++ b/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java @@ -39,7 +39,11 @@ import javax.swing.*; import javax.swing.event.ChangeListener; -import javax.swing.tree.*; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import javax.swing.tree.TreeNode; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; From bf3f283b71f9fcf1c159d5719b0e2da6db21f1f7 Mon Sep 17 00:00:00 2001 From: Vadym Hula Date: Mon, 29 Sep 2025 23:55:45 +0300 Subject: [PATCH 3/3] Use pattern matching for the child node --- .../java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java b/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java index 2eafcc5..0adbb9c 100644 --- a/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java +++ b/src/main/java/com/intellij/plugins/bodhi/pmd/PMDResultPanel.java @@ -376,9 +376,8 @@ private void showPopup(DefaultMutableTreeNode treeNode, MouseEvent e) { } if (treeNode instanceof PMDRuleNode pmdRuleNode) { for (int i = 0; i < pmdRuleNode.getChildCount(); i++) { - TreeNode childAt = pmdRuleNode.getChildAt(i); - if (childAt instanceof PMDViolationNode) { - popupMenu.addViolation(((PMDViolationNode) childAt).getPmdViolation()); + if (pmdRuleNode.getChildAt(i) instanceof PMDViolationNode pmdViolationNode) { + popupMenu.addViolation(pmdViolationNode.getPmdViolation()); } } }