diff --git a/CHANGELOG.md b/CHANGELOG.md index ebfd00c5..6dc92f51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ - add scan summary to custom UI, updating scan statuses live - added support for DeepCode AI Fixes +### Fixes +- fixes open & ignored issue filtering toggles + ## [3.0.0] ### Changes - process api URL from hasAuthenticated message diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilter.java index f520040d..bedc688f 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilter.java @@ -48,7 +48,7 @@ private boolean isIssueVisible(IssueTreeNode issueNode) { } for (var filter : this.filters.values()) { - if (!filter.test(issue)) { + if (filter.test(issue)) { return false; } } diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/BaseFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/BaseFilter.java index 19a8cfd6..faff404e 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/BaseFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/BaseFilter.java @@ -23,9 +23,9 @@ public void applyFilter() { boolean booleanPref = this.preferences.getBooleanPref(this.filterName); if (booleanPref) { - this.filterManager.removeTreeFilter(this.filterName); + this.filterManager.removeTreeFilter(this.filterName); // Showing "a thing" removes it from being filtered out. } else { - this.filterManager.addTreeFilter(this.filterName, predicate); + this.filterManager.addTreeFilter(this.filterName, predicate); // Hiding (unchecking) "a thing" adds a filter to filter it out. } } -} \ No newline at end of file +} diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/FixableFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/FixableFilter.java index 4145be73..2656bdec 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/FixableFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/FixableFilter.java @@ -8,7 +8,7 @@ import io.snyk.languageserver.protocolextension.messageObjects.scanResults.Issue; public class FixableFilter extends BaseFilter { - private static final Predicate predicate = issue -> issue.hasFix(); + private static final Predicate predicate = issue -> !issue.hasFix(); // Inverse predicate, see below. public FixableFilter(TreeFilterManager tfm) { super(FILTER_SHOW_ONLY_FIXABLE, predicate, tfm); @@ -16,7 +16,9 @@ public FixableFilter(TreeFilterManager tfm) { @Override public void applyFilter() { - // this is inverse to the other filters, so we need to overwrite the BaseFilter logic + // This is inverse to the other filters, so we need to overwrite the BaseFilter logic. + // Deselecting show fixable issues should not hide fixable issues and show all issues. + // Therefore when deactivated we cannot have a filter added, so the logic is flipped. boolean booleanPref = preferences.getBooleanPref(this.filterName); if (booleanPref) { diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresIgnoredIssuesFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresIgnoredIssuesFilter.java index dfabde5f..24de654c 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresIgnoredIssuesFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresIgnoredIssuesFilter.java @@ -14,4 +14,4 @@ public IgnoresIgnoredIssuesFilter(TreeFilterManager tfm) { super(FILTER_IGNORES_SHOW_IGNORED_ISSUES, predicate, tfm); } -} \ No newline at end of file +} diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresOpenIssuesFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresOpenIssuesFilter.java index 2efe86a7..e72db00a 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresOpenIssuesFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/IgnoresOpenIssuesFilter.java @@ -1,16 +1,16 @@ package io.snyk.eclipse.plugin.views.snyktoolview.filters; -import static io.snyk.eclipse.plugin.preferences.Preferences.FILTER_IGNORES_SHOW_IGNORED_ISSUES; +import static io.snyk.eclipse.plugin.preferences.Preferences.FILTER_IGNORES_SHOW_OPEN_ISSUES; import java.util.function.Predicate; import io.snyk.eclipse.plugin.views.snyktoolview.TreeFilterManager; import io.snyk.languageserver.protocolextension.messageObjects.scanResults.Issue; -public class IgnoresOpenIssuesFilter extends BaseFilter { +public class IgnoresOpenIssuesFilter extends BaseFilter { private static final Predicate predicate = issue -> !issue.isIgnored(); public IgnoresOpenIssuesFilter(TreeFilterManager tfm) { - super(FILTER_IGNORES_SHOW_IGNORED_ISSUES, predicate, tfm); + super(FILTER_IGNORES_SHOW_OPEN_ISSUES, predicate, tfm); } -} \ No newline at end of file +} diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/ProductFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/ProductFilter.java index 403d892b..12aeb04f 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/ProductFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/ProductFilter.java @@ -22,7 +22,7 @@ public ProductFilter(TreeFilterManager tfm, String filterName) { @SuppressWarnings("rawtypes") private static Predicate getPredicate(String filterName) { String filterableIssueType = preferenceToProductConstants.get(filterName); - Predicate predicate = issue -> !issue.filterableIssueType().equals(filterableIssueType); + Predicate predicate = issue -> issue.filterableIssueType().equals(filterableIssueType); return predicate; } -} \ No newline at end of file +} diff --git a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/SeverityFilter.java b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/SeverityFilter.java index 3aad9fc7..d95c2b0c 100644 --- a/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/SeverityFilter.java +++ b/plugin/src/main/java/io/snyk/eclipse/plugin/views/snyktoolview/filters/SeverityFilter.java @@ -21,7 +21,7 @@ public SeverityFilter(TreeFilterManager tfm, String preferenceKey) { @SuppressWarnings("rawtypes") private static Predicate getPredicate(String preferenceKey) { String severityCondition = preferenceToProductConstants.get(preferenceKey); - Predicate predicate = issue -> !issue.severity().equals(severityCondition); + Predicate predicate = issue -> issue.severity().equals(severityCondition); return predicate; - } -} \ No newline at end of file + } +} diff --git a/plugin/src/main/java/io/snyk/languageserver/SnykIssueCache.java b/plugin/src/main/java/io/snyk/languageserver/SnykIssueCache.java index 7a7285bb..4754539e 100644 --- a/plugin/src/main/java/io/snyk/languageserver/SnykIssueCache.java +++ b/plugin/src/main/java/io/snyk/languageserver/SnykIssueCache.java @@ -56,8 +56,8 @@ public void clearAll() { * @param path The file path for which issues should be removed */ public void removeAllIssuesForPath(String path) { - codeSecurityIssues.clear(); - codeQualityIssues.clear(); + codeSecurityIssues.remove(path); + codeQualityIssues.remove(path); ossIssues.remove(path); iacIssues.remove(path); } diff --git a/tests/src/test/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilterTest.java b/tests/src/test/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilterTest.java index b58f6a4e..bee47d61 100644 --- a/tests/src/test/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilterTest.java +++ b/tests/src/test/java/io/snyk/eclipse/plugin/views/snyktoolview/TreeViewerFilterTest.java @@ -43,10 +43,10 @@ void testSelect_IssueTreeNodeWithMatchingFilter() { Issue issue = mock(Issue.class); when(issueNode.getIssue()).thenReturn(issue); - Predicate predicate = i -> true; // Always matches + Predicate predicate = i -> true; // Always matches, so filtered out. filter.putFilterPredicate("test", predicate); - assertTrue(filter.select(mockViewer, null, issueNode)); + assertFalse(filter.select(mockViewer, null, issueNode)); } @Test @@ -55,10 +55,10 @@ void testSelect_IssueTreeNodeWithNonMatchingFilter() { Issue issue = mock(Issue.class); when(issueNode.getIssue()).thenReturn(issue); - Predicate predicate = i -> false; // Never matches + Predicate predicate = i -> false; // Never matches, so not filtered out. filter.putFilterPredicate("test", predicate); - assertFalse(filter.select(mockViewer, null, issueNode)); + assertTrue(filter.select(mockViewer, null, issueNode)); } @Test @@ -85,13 +85,17 @@ void testSelect_FileTreeNodeWithNoVisibleChildren() { @Test void testRemoveFilterPredicate() { - Predicate predicate = i -> false; + IssueTreeNode issueNode = mock(IssueTreeNode.class); + Issue issue = mock(Issue.class); + when(issueNode.getIssue()).thenReturn(issue); + + Predicate predicate = i -> true; // Always matches, so filtered out. filter.putFilterPredicate("test", predicate); - assertTrue(filter.select(mockViewer, null, mock(IssueTreeNode.class))); + assertFalse(filter.select(mockViewer, null, issueNode)); filter.removeFilterPredicate("test"); - assertTrue(filter.select(mockViewer, null, mock(IssueTreeNode.class))); + assertTrue(filter.select(mockViewer, null, issueNode)); } -} \ No newline at end of file +}