Skip to content

Commit 1029446

Browse files
committed
fix: removes filetreenodes if they have no visiable issuenodes
1 parent 7ad1bb3 commit 1029446

3 files changed

Lines changed: 35 additions & 17 deletions

File tree

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeFilterManager.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ private void updateTree(TreeViewer treeView) {
8383
treeView.getControl().setRedraw(false);
8484
treeView.refresh();
8585
treeView.getControl().setRedraw(true);
86+
treeView.expandAll();
8687
}
8788

8889
}

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilter.java

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.concurrent.ConcurrentHashMap;
55
import java.util.function.Predicate;
66

7+
import org.eclipse.jface.viewers.ITreeContentProvider;
78
import org.eclipse.jface.viewers.TreeViewer;
89
import org.eclipse.jface.viewers.Viewer;
910
import org.eclipse.jface.viewers.ViewerFilter;
@@ -19,22 +20,39 @@ public TreeViewerFilter() {
1920

2021
@Override
2122
public boolean select(Viewer viewer, Object parentElement, Object element) {
22-
if (!(element instanceof IssueTreeNode) || !(viewer instanceof TreeViewer))
23-
return true;
24-
25-
IssueTreeNode IssueTreeNode = (IssueTreeNode) element;
26-
var issue = IssueTreeNode.getIssue();
27-
if (issue == null) {
28-
return true;
29-
}
30-
31-
for (var kv : this.filters.entrySet()) {
32-
var filter = kv.getValue();
33-
if (!filter.test(issue)) {
34-
return false;
35-
}
36-
}
37-
return true;
23+
if (element instanceof FileTreeNode) {
24+
return hasVisibleChildren((FileTreeNode) element, viewer);
25+
}
26+
27+
if (!(element instanceof IssueTreeNode) || !(viewer instanceof TreeViewer)) {
28+
return true;
29+
}
30+
31+
return isIssueVisible((IssueTreeNode) element);
32+
}
33+
34+
private boolean hasVisibleChildren(FileTreeNode fileNode, Viewer viewer) {
35+
Object[] children = ((ITreeContentProvider) ((TreeViewer) viewer).getContentProvider()).getChildren(fileNode);
36+
for (Object child : children) {
37+
if (child instanceof IssueTreeNode && isIssueVisible((IssueTreeNode) child)) {
38+
return true;
39+
}
40+
}
41+
return false;
42+
}
43+
44+
private boolean isIssueVisible(IssueTreeNode issueNode) {
45+
Issue issue = issueNode.getIssue();
46+
if (issue == null) {
47+
return true;
48+
}
49+
50+
for (var filter : this.filters.values()) {
51+
if (!filter.test(issue)) {
52+
return false;
53+
}
54+
}
55+
return true;
3856
}
3957

4058
public void setFilterPredicate(String filterName, Predicate<? super Issue> predicate) {

plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/FixableFilter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,5 @@ public void applyFilter() {
2424
} else {
2525
this.filterManager.removeTreeFilter(this.preferenceKey);
2626
}
27-
2827
}
2928
}

0 commit comments

Comments
 (0)