From a97bbef003a03fb3e90aeb4fbaaf0661fae8b3d8 Mon Sep 17 00:00:00 2001 From: as23415672 Date: Sat, 23 Apr 2022 22:27:43 +0800 Subject: [PATCH] Issue #11460: Fixed the default behavior of SuppressoinXpathSingleFilter --- .../filters/XpathFilterElement.java | 32 +++++++- .../SuppressionXpathSingleFilterTest.java | 73 +++++++++++++++++++ ...XpathSingleFilterAllNullConfiguration.java | 19 +++++ ...ressionXpathSingleFilterDecideByCheck.java | 20 +++++ ...uppressionXpathSingleFilterDecideById.java | 21 ++++++ ...thSingleFilterDecideByIdAndExpression.java | 22 ++++++ ...nXpathSingleFilterDefaultFileProperty.java | 22 ++++++ 7 files changed, 206 insertions(+), 3 deletions(-) create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterAllNullConfiguration.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByCheck.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideById.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByIdAndExpression.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDefaultFileProperty.java diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/filters/XpathFilterElement.java b/src/main/java/com/puppycrawl/tools/checkstyle/filters/XpathFilterElement.java index 565a2c508bd..0830ed4b45d 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/filters/XpathFilterElement.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/filters/XpathFilterElement.java @@ -70,6 +70,9 @@ public class XpathFilterElement implements TreeWalkerFilter { /** Xpath query. */ private final String xpathQuery; + /** Indicates if all properties are set to Null. */ + private final boolean areAllPropertiesNull; + /** * Creates a {@code XpathElement} instance. * @@ -118,6 +121,11 @@ public XpathFilterElement(String files, String checks, throw new IllegalArgumentException("Unexpected xpath query: " + xpathQuery, ex); } } + areAllPropertiesNull = fileRegexp == null + && checkRegexp == null + && messageRegexp == null + && moduleId == null + && xpathExpression == null; } /** @@ -171,13 +179,29 @@ public XpathFilterElement(Pattern files, Pattern checks, Pattern message, throw new IllegalArgumentException("Incorrect xpath query: " + xpathQuery, ex); } } + areAllPropertiesNull = fileRegexp == null + && checkRegexp == null + && messageRegexp == null + && moduleId == null + && xpathExpression == null; } @Override public boolean accept(TreeWalkerAuditEvent event) { return !isFileNameAndModuleAndModuleNameMatching(event) || !isMessageNameMatching(event) - || !isXpathQueryMatching(event); + || !isXpathQueryMatching(event) + || areAllPropertiesNull(); + } + + /** + * Check if all properties are set to null. + * + * @return true if all properties are set to null + */ + + private boolean areAllPropertiesNull() { + return areAllPropertiesNull; } /** @@ -261,7 +285,8 @@ private List getItems(TreeWalkerAuditEvent event) { @Override public int hashCode() { - return Objects.hash(filePattern, checkPattern, messagePattern, moduleId, xpathQuery); + return Objects.hash(filePattern, checkPattern, messagePattern, + moduleId, xpathQuery, areAllPropertiesNull); } @Override @@ -277,7 +302,8 @@ public boolean equals(Object other) { && Objects.equals(checkPattern, xpathFilter.checkPattern) && Objects.equals(messagePattern, xpathFilter.messagePattern) && Objects.equals(moduleId, xpathFilter.moduleId) - && Objects.equals(xpathQuery, xpathFilter.xpathQuery); + && Objects.equals(xpathQuery, xpathFilter.xpathQuery) + && Objects.equals(areAllPropertiesNull, xpathFilter.areAllPropertiesNull); } } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathSingleFilterTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathSingleFilterTest.java index 8f2907ce09e..3e73c17defe 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathSingleFilterTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressionXpathSingleFilterTest.java @@ -327,6 +327,79 @@ public void testThrowException() throws Exception { } } + @Test + public void testAllNullConfiguration() throws Exception { + final String[] expected = { + "18:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + final String[] suppressed = CommonUtil.EMPTY_STRING_ARRAY; + + verifyFilterWithInlineConfigParser( + getPath("InputSuppressionXpathSingleFilterAllNullConfiguration.java"), + expected, removeSuppressed(expected, suppressed)); + } + + @Test + public void testDecideByIdAndExpression() throws Exception { + final String[] expected = { + "20:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + final String[] suppressed = { + "20:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + verifyFilterWithInlineConfigParser( + getPath("InputSuppressionXpathSingleFilterDecideByIdAndExpression.java"), + expected, removeSuppressed(expected, suppressed)); + } + + @Test + public void testDefaultFileProperty() throws Exception { + final String[] expected = { + "20:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + final String[] suppressed = { + "20:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + verifyFilterWithInlineConfigParser( + getPath("InputSuppressionXpathSingleFilterDefaultFileProperty.java"), + expected, removeSuppressed(expected, suppressed)); + } + + @Test + public void testDecideByCheck() throws Exception { + final String[] expected = { + "18:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + final String[] suppressed = { + "18:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + verifyFilterWithInlineConfigParser( + getPath("InputSuppressionXpathSingleFilterDecideByCheck.java"), + expected, removeSuppressed(expected, suppressed)); + } + + @Test + public void testDecideById() throws Exception { + final String[] expected = { + "19:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + final String[] suppressed = { + "19:1: " + getCheckMessage(MissingJavadocTypeCheck.class, MSG_JAVADOC_MISSING), + }; + + verifyFilterWithInlineConfigParser( + getPath("InputSuppressionXpathSingleFilterDecideById.java"), + expected, removeSuppressed(expected, suppressed)); + } + private static SuppressionXpathSingleFilter createSuppressionXpathSingleFilter( String files, String checks, String message, String moduleId, String query) { final SuppressionXpathSingleFilter filter = new SuppressionXpathSingleFilter(); diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterAllNullConfiguration.java b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterAllNullConfiguration.java new file mode 100644 index 00000000000..fb6e397b03d --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterAllNullConfiguration.java @@ -0,0 +1,19 @@ +/* +SuppressionXpathSingleFilter +files = (default)(null) +checks = (default)(null) +message = (default)(null) +id = (default)(null) +query = (default)(null) + +com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocTypeCheck +scope = (default)public +excludeScope = (default)(null) +skipAnnotations = (default)Generated +tokens = CLASS_DEF + +*/ +package com.puppycrawl.tools.checkstyle.filters.suppressionxpathsinglefilter; + +public class InputSuppressionXpathSingleFilterAllNullConfiguration { // violation +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByCheck.java b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByCheck.java new file mode 100644 index 00000000000..5cdc8c77880 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByCheck.java @@ -0,0 +1,20 @@ +/* +SuppressionXpathSingleFilter +files = (default)(null) +checks = MissingJavadocTypeCheck +message = (default)(null) +id = (default)(null) +query = (default)(null) + +com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocTypeCheck +scope = (default)public +excludeScope = (default)(null) +skipAnnotations = (default)Generated +tokens = CLASS_DEF + +*/ +package com.puppycrawl.tools.checkstyle.filters.suppressionxpathsinglefilter; + +public class InputSuppressionXpathSingleFilterDecideByCheck { // filtered violation + +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideById.java b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideById.java new file mode 100644 index 00000000000..2a79684877a --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideById.java @@ -0,0 +1,21 @@ +/* +SuppressionXpathSingleFilter +files = (default)(null) +checks = (default)(null) +message = (default)(null) +id = 007 +query = (default)(null) + +com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocTypeCheck +id = 007 +scope = (default)public +excludeScope = (default)(null) +skipAnnotations = (default)Generated +tokens = CLASS_DEF + +*/ +package com.puppycrawl.tools.checkstyle.filters.suppressionxpathsinglefilter; + +public class InputSuppressionXpathSingleFilterDecideById { // filtered violation + +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByIdAndExpression.java b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByIdAndExpression.java new file mode 100644 index 00000000000..3000211bf62 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDecideByIdAndExpression.java @@ -0,0 +1,22 @@ +/* +SuppressionXpathSingleFilter +files = (default)(null) +checks = (default)(null) +message = (default)(null) +id = 007 +query = /COMPILATION_UNIT/CLASS_DEF \ + [./IDENT[@text='InputSuppressionXpathSingleFilterDecideByIdAndExpression']] + +com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocTypeCheck +id = 007 +scope = (default)public +excludeScope = (default)(null) +skipAnnotations = (default)Generated +tokens = CLASS_DEF + +*/ +package com.puppycrawl.tools.checkstyle.filters.suppressionxpathsinglefilter; + +public class InputSuppressionXpathSingleFilterDecideByIdAndExpression { // filtered violation + +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDefaultFileProperty.java b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDefaultFileProperty.java new file mode 100644 index 00000000000..10e4870066d --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/filters/suppressionxpathsinglefilter/InputSuppressionXpathSingleFilterDefaultFileProperty.java @@ -0,0 +1,22 @@ +/* +SuppressionXpathSingleFilter +files = (default)(null) +checks = MissingJavadocTypeCheck +message = Missing a Javadoc comment +id = 007 +query = /COMPILATION_UNIT/CLASS_DEF \ + [./IDENT[@text='InputSuppressionXpathSingleFilterDefaultFileProperty']] + +com.puppycrawl.tools.checkstyle.checks.javadoc.MissingJavadocTypeCheck +id = 007 +scope = (default)public +excludeScope = (default)(null) +skipAnnotations = (default)Generated +tokens = CLASS_DEF + +*/ +package com.puppycrawl.tools.checkstyle.filters.suppressionxpathsinglefilter; + +public class InputSuppressionXpathSingleFilterDefaultFileProperty { // filtered violation + +}