diff --git a/pom.xml b/pom.xml index 099a2ae49..5bcb8efdc 100644 --- a/pom.xml +++ b/pom.xml @@ -883,7 +883,7 @@ .*.filters.IntMatchFilter10090 - .*.filters.SuppressElement6978 + .*.filters.SuppressElement8288 .*.filters.SuppressionCommentFilter8387 .*.filters.SuppressionCommentFilter\$.*4169 .*.filters.SuppressionFilter00 diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java b/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java index 205627779..1e8acd56e 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java @@ -19,13 +19,14 @@ package com.puppycrawl.tools.checkstyle.filters; +import com.puppycrawl.tools.checkstyle.Utils; import com.puppycrawl.tools.checkstyle.api.AuditEvent; import com.puppycrawl.tools.checkstyle.api.Filter; -import com.puppycrawl.tools.checkstyle.Utils; -import java.util.regex.Pattern; - import org.apache.commons.beanutils.ConversionException; +import java.util.Objects; +import java.util.regex.Pattern; + /** * This filter processes {@link com.puppycrawl.tools.checkstyle.api.AuditEvent} * objects based on the criteria of file, check, module id, line, and @@ -41,17 +42,14 @@ import org.apache.commons.beanutils.ConversionException; */ public class SuppressElement implements Filter { - /** hash function multiplicand */ - private static final int HASH_MULT = 29; - /** the regexp to match file names against */ - private final Pattern fileRegexp; + private final transient Pattern fileRegexp; /** the pattern for file names*/ private final String filePattern; /** the regexp to match check names against */ - private Pattern checkRegexp; + private transient Pattern checkRegexp; /** the pattern for check class names*/ private String checkPattern; @@ -60,13 +58,13 @@ public class SuppressElement private String moduleId; /** line number filter */ - private CSVFilter lineFilter; + private transient CSVFilter lineFilter; /** CSV for line number filter */ private String linesCSV; /** column number filter */ - private CSVFilter columnFilter; + private transient CSVFilter columnFilter; /** CSV for column number filter */ private String columnsCSV; @@ -161,84 +159,24 @@ public class SuppressElement return true; } - @Override - public String toString() { - return "SuppressElement[files=" + filePattern + ",checks=" - + checkPattern + ",lines=" + linesCSV + ",columns=" - + columnsCSV + "]"; - } - @Override public int hashCode() { - int result = HASH_MULT * filePattern.hashCode(); - if (checkPattern != null) { - result = HASH_MULT * result + checkPattern.hashCode(); - } - if (moduleId != null) { - result = HASH_MULT * result + moduleId.hashCode(); - } - if (linesCSV != null) { - result = HASH_MULT * result + linesCSV.hashCode(); - } - if (columnsCSV != null) { - result = HASH_MULT * result + columnsCSV.hashCode(); - } - return result; + return Objects.hash(filePattern, checkPattern, moduleId, linesCSV, columnsCSV); } @Override - public boolean equals(Object object) { - if (object instanceof SuppressElement) { - final SuppressElement other = (SuppressElement) object; - - // same file pattern? - if (!this.filePattern.equals(other.filePattern)) { - return false; - } - - // same check pattern? - if (checkPattern != null) { - if (!checkPattern.equals(other.checkPattern)) { - return false; - } - } - else if (other.checkPattern != null) { - return false; - } - - // same module id? - if (moduleId != null) { - if (!moduleId.equals(other.moduleId)) { - return false; - } - } - else if (other.moduleId != null) { - return false; - } - - // same line number filter? - if (lineFilter != null) { - if (!lineFilter.equals(other.lineFilter)) { - return false; - } - } - else if (other.lineFilter != null) { - return false; - } - - // same column number filter? - if (columnFilter != null) { - if (!columnFilter.equals(other.columnFilter)) { - return false; - } - } - else if (other.columnFilter != null) { - return false; - } - - // everything is the same + public boolean equals(Object o) { + if (this == o) { return true; } - return false; + if (o == null || getClass() != o.getClass()) { + return false; + } + final SuppressElement that = (SuppressElement) o; + return Objects.equals(filePattern, that.filePattern) + && Objects.equals(checkPattern, that.checkPattern) + && Objects.equals(moduleId, that.moduleId) + && Objects.equals(linesCSV, that.linesCSV) + && Objects.equals(columnsCSV, that.columnsCSV); } } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressElementTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressElementTest.java index 3b60491b2..718160fdb 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressElementTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/filters/SuppressElementTest.java @@ -26,6 +26,9 @@ import static org.junit.Assert.assertTrue; import com.puppycrawl.tools.checkstyle.api.AuditEvent; import com.puppycrawl.tools.checkstyle.api.LocalizedMessage; import java.util.regex.PatternSyntaxException; + +import nl.jqno.equalsverifier.EqualsVerifier; +import nl.jqno.equalsverifier.Warning; import org.junit.Before; import org.junit.Test; @@ -103,4 +106,12 @@ public class SuppressElementTest { filter2.setColumns("1-10"); assertEquals("filter, filter2", filter, filter2); } + + @Test + public void testEqualsAndHashCode() { + EqualsVerifier.forClass(SuppressElement.class) + .usingGetClass() + .suppress(Warning.NONFINAL_FIELDS) + .verify(); + } }