From 8d242382f8bb77488b6da23bdd0d2d61583703fc Mon Sep 17 00:00:00 2001
From: Oleg Sukhodolsky
- A Filter has boolean method accept(Object)
+ A Filter has boolean method accept(AuditEvent)
that returns true if the Filter accepts the
- Object parameter and returns false if the Filter
+ AuditEvent parameter and returns false if the Filter
rejects it.
A FilterSet is a particular Filter
that contains a set of Filters. A FilterSet accepts an
- Object if and only if
- all Filters in the set accept the Object.
+ AuditEvent if and only if
+ all Filters in the set accept the AuditEvent.
Here is a UML diagram for interface Filter
@@ -73,9 +73,7 @@
AutomaticBean
with mutator method setFiles(String) that receives the file name pattern.
An AutomaticBean uses JavaBean introspection to set JavaBean properties such as
- files. Method accept(Object) has the precondition
- that the Object parameter is an AuditEvent, which
- is the case when the Filter is created for a Checker.
+ files.
@@ -101,10 +99,9 @@ public class FilesFilter
setFiles("^$");
}
- public boolean accept(Object aObject)
+ public boolean accept(AuditEvent aEvent)
{
- final AuditEvent event = (AuditEvent) aObject;
- final String fileName = event.getFileName();
+ final String fileName = aEvent.getFileName();
return ((fileName == null) || !mFileRegexp.match(fileName));
}
@@ -138,7 +135,7 @@ public class FilesFilter
documentation. Please do not hesitate to ask questions on the user mailing list,
this will help us to improve this document. Please ask your questions as
precisely as possible. We will not be able to answer questions like "I want
- to write a listener but I don't know how, can you help me?". Tell us
+ to write a filter but I don't know how, can you help me?". Tell us
what you are trying to do (the purpose of the filter), what you have
understood so far, and what exactly you are getting stuck on.
* This filter accepts an integer that matches a CSV value, where * each value is an integer or a range of integers. *
* @author Rick Giles + * @author o_sukhodolsky */ -public class CSVFilter - extends FilterSet +class CSVFilter implements IntFilter { + /** filter set */ + private Set mFilters = new HashSet(); + + /** + * Adds a IntFilter to the set. + * @param aFilter the IntFilter to add. + */ + public void addFilter(IntFilter aFilter) + { + mFilters.add(aFilter); + } + + /** + * Returns the IntFilters of the filter set. + * @return the IntFilters of the filter set. + */ + protected Set getFilters() + { + return mFilters; + } + /** * Constructs aCSVFilter from a CSV, Comma-Separated Values,
* string. Each value is an integer, or a range of integers. A range of
* integers is of the form integer-integer, such as 1-10.
+ * Note: integers must be non-negative.
* @param aPattern the CSV string.
* @throws NumberFormatException if a component substring does not
* contain a parsable integer.
@@ -64,22 +85,43 @@ public class CSVFilter
}
/**
- * Determines whether an Object matches a CSV integer value.
- * @param aObject the Object to check.
- * @return true if aObject is an Integer that matches a CSV value.
+ * Determines whether an Integer matches a CSV integer value.
+ * @param aInt the Integer to check.
+ * @return true if aInt is an Integer that matches a CSV value.
*/
- public boolean accept(Object aObject)
+ public boolean accept(Integer aInt)
{
- if (!(aObject instanceof Integer)) {
- return false;
- }
final Iterator it = getFilters().iterator();
while (it.hasNext()) {
- final Filter filter = (Filter) it.next();
- if (filter.accept(aObject)) {
+ final IntFilter filter = (IntFilter) it.next();
+ if (filter.accept(aInt)) {
return true;
}
}
return false;
}
+
+ /** @see java.lang.Object#toString() */
+ public String toString()
+ {
+ return mFilters.toString();
+ }
+
+ /** @see java.lang.Object#hashCode() */
+ public int hashCode()
+ {
+ return mFilters.hashCode();
+ }
+
+ /** @see java.lang.Object#equals(java.lang.Object) */
+ public boolean equals (Object aObject)
+ {
+ if (aObject instanceof CSVFilter) {
+ final CSVFilter other = (CSVFilter) aObject;
+ return this.mFilters.equals(other.mFilters);
+ }
+ else {
+ return false;
+ }
+ }
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntFilter.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntFilter.java
new file mode 100644
index 000000000..26e7fecb4
--- /dev/null
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntFilter.java
@@ -0,0 +1,34 @@
+////////////////////////////////////////////////////////////////////////////////
+// checkstyle: Checks Java source code for adherence to a set of rules.
+// Copyright (C) 2001-2003 Oliver Burn
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+////////////////////////////////////////////////////////////////////////////////
+package com.puppycrawl.tools.checkstyle.filters;
+
+/**
+ * An interface for filtering Integer.
+ * @author o_sukhodolsky
+ */
+interface IntFilter
+
+{
+ /**
+ * Determines whether or not a filtered Integer is accepted.
+ * @param aInt the Integer to filter.
+ * @return true if the aInt is accepted.
+ */
+ boolean accept(Integer aInt);
+}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntMatchFilter.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntMatchFilter.java
index e7ef82761..d80dc3488 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntMatchFilter.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntMatchFilter.java
@@ -18,14 +18,11 @@
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle.filters;
-import com.puppycrawl.tools.checkstyle.api.Filter;
-
/**
* This filter accepts a matching Integer.
* @author Rick Giles
*/
-public class IntMatchFilter
- implements Filter
+class IntMatchFilter implements IntFilter
{
/** the matching Integer */
private Integer mMatchValue;
@@ -39,10 +36,10 @@ public class IntMatchFilter
mMatchValue = new Integer(aMatchValue);
}
- /** @see com.puppycrawl.tools.checkstyle.api.Filter */
- public boolean accept(Object aObject)
+ /** @see com.puppycrawl.tools.checkstyle.filters.IntFilter */
+ public boolean accept(Integer aInt)
{
- return mMatchValue.equals(aObject);
+ return mMatchValue.equals(aInt);
}
/** @see java.lang.Object#toString() */
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntRangeFilter.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntRangeFilter.java
index 4d585b6f6..d977ff919 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntRangeFilter.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/IntRangeFilter.java
@@ -18,14 +18,11 @@
////////////////////////////////////////////////////////////////////////////////
package com.puppycrawl.tools.checkstyle.filters;
-import com.puppycrawl.tools.checkstyle.api.Filter;
-
/**
* This filter accepts an Integer in a range.
* @author Rick Giles
*/
-public class IntRangeFilter
- implements Filter
+class IntRangeFilter implements IntFilter
{
/** hash function multiplicand */
private static final int HASH_MULT = 29;
@@ -48,14 +45,11 @@ public class IntRangeFilter
mUpperBound = new Integer(aUpperBound);
}
- /** @see com.puppycrawl.tools.checkstyle.api.Filter */
- public boolean accept(Object aObject)
+ /** @see com.puppycrawl.tools.checkstyle.filters.IntFilter */
+ public boolean accept(Integer aInt)
{
- if (!(aObject instanceof Integer)) {
- return false;
- }
- return ((mLowerBound.compareTo(aObject) <= 0)
- && (mUpperBound.compareTo(aObject) >= 0));
+ return ((mLowerBound.compareTo(aInt) <= 0)
+ && (mUpperBound.compareTo(aInt) >= 0));
}
/** @see java.lang.Object#hashCode() */
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SeverityMatchFilter.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SeverityMatchFilter.java
index 93950c3c0..85f432fd2 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SeverityMatchFilter.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SeverityMatchFilter.java
@@ -62,14 +62,9 @@ public class SeverityMatchFilter
}
/** @see com.puppycrawl.tools.checkstyle.api.Filter */
- public boolean accept(Object aObject)
+ public boolean accept(AuditEvent aEvent)
{
- if (!(aObject instanceof AuditEvent)) {
- return false;
- }
-
- final AuditEvent event = (AuditEvent) aObject;
- boolean result = mSeverityLevel.equals(event.getSeverityLevel());
+ boolean result = mSeverityLevel.equals(aEvent.getSeverityLevel());
if (mAcceptOnMatch) {
return result;
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java
index 060485636..dd0367db5 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressElement.java
@@ -32,7 +32,6 @@ import com.puppycrawl.tools.checkstyle.api.Utils;
* name and check name match the filter's file name and check name
* patterns, and the event's line is in the filter's line CSV or the
* check's columns is in the filter's column CSV.
- * It rejects Objects that are not AuditEvents.
*
* @author Rick Giles
*/
@@ -115,19 +114,13 @@ public class SuppressElement
}
/** @see com.puppycrawl.tools.checkstyle.api.Filter */
- public boolean accept(Object aObject)
+ public boolean accept(AuditEvent aEvent)
{
- if (!(aObject instanceof AuditEvent)) {
- return false;
- }
-
- final AuditEvent event = (AuditEvent) aObject;
-
// file and check match?
- if ((event.getFileName() == null)
- || !mFileRegexp.match(event.getFileName())
- || (event.getLocalizedMessage() == null)
- || !mCheckRegexp.match(event.getSourceName()))
+ if ((aEvent.getFileName() == null)
+ || !mFileRegexp.match(aEvent.getFileName())
+ || (aEvent.getLocalizedMessage() == null)
+ || !mCheckRegexp.match(aEvent.getSourceName()))
{
return true;
}
@@ -139,7 +132,7 @@ public class SuppressElement
// reject if line matches a line CSV value.
if (mLineFilter != null) {
- final Integer line = new Integer(event.getLine());
+ final Integer line = new Integer(aEvent.getLine());
if (mLineFilter.accept(line)) {
return false;
}
@@ -147,7 +140,7 @@ public class SuppressElement
// reject if column matches a column CSV value.
if (mColumnFilter != null) {
- final Integer column = new Integer(event.getColumn());
+ final Integer column = new Integer(aEvent.getColumn());
if (mColumnFilter.accept(column)) {
return false;
}
diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressionFilter.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressionFilter.java
index 172ba1898..40a7d4d31 100644
--- a/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressionFilter.java
+++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/filters/SuppressionFilter.java
@@ -29,7 +29,6 @@ import com.puppycrawl.tools.checkstyle.api.FilterSet;
* * This filter accepts AuditEvents according to file, check, line, and * column, as specified in a suppression file. - * It rejects Objects that are not AuditEvents. *
* @author Rick Giles */ @@ -52,14 +51,9 @@ public class SuppressionFilter } /** @see com.puppycrawl.tools.checkstyle.api.Filter */ - public boolean accept(Object aObject) + public boolean accept(AuditEvent aEvent) { - if (!(aObject instanceof AuditEvent)) { - return false; - } - else { - return mFilters.accept(aObject); - } + return mFilters.accept(aEvent); } /** @see java.lang.Object#toString() */ diff --git a/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java b/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java index 9b81ba05e..129b0275f 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java @@ -283,7 +283,7 @@ class DebugFilter implements Filter { private boolean mCalled; - public boolean accept(Object aObject) + public boolean accept(AuditEvent aEvent) { mCalled = true; return true; diff --git a/src/tests/com/puppycrawl/tools/checkstyle/filters/CSVFilterTest.java b/src/tests/com/puppycrawl/tools/checkstyle/filters/CSVFilterTest.java index e096841ce..19ce3beb4 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/filters/CSVFilterTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/filters/CSVFilterTest.java @@ -1,7 +1,5 @@ package com.puppycrawl.tools.checkstyle.filters; -import com.puppycrawl.tools.checkstyle.api.Filter; - import junit.framework.TestCase; /** Tests CSVFilter */ @@ -9,7 +7,7 @@ public class CSVFilterTest extends TestCase { public void testDecideSingle() { - final Filter filter = new CSVFilter("0"); + final IntFilter filter = new CSVFilter("0"); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("equal", filter.accept(new Integer(0))); assertFalse("greater than", filter.accept(new Integer(1))); @@ -17,7 +15,7 @@ public class CSVFilterTest extends TestCase public void testDecidePair() { - final Filter filter = new CSVFilter("0, 2"); + final IntFilter filter = new CSVFilter("0, 2"); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("equal 0", filter.accept(new Integer(0))); assertFalse("greater than", filter.accept(new Integer(1))); @@ -26,7 +24,7 @@ public class CSVFilterTest extends TestCase public void testDecideRange() { - final Filter filter = new CSVFilter("0-2"); + final IntFilter filter = new CSVFilter("0-2"); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("equal 0", filter.accept(new Integer(0))); assertTrue("equal 1", filter.accept(new Integer(1))); @@ -36,7 +34,7 @@ public class CSVFilterTest extends TestCase public void testDecideEmptyRange() { - final Filter filter = new CSVFilter("2-0"); + final IntFilter filter = new CSVFilter("2-0"); assertFalse("less than", filter.accept(new Integer(-1))); assertFalse("equal 0", filter.accept(new Integer(0))); assertFalse("equal 1", filter.accept(new Integer(1))); @@ -46,7 +44,7 @@ public class CSVFilterTest extends TestCase public void testDecideRangePlusValue() { - final Filter filter = new CSVFilter("0-2, 10"); + final IntFilter filter = new CSVFilter("0-2, 10"); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("equal 0", filter.accept(new Integer(0))); assertTrue("equal 1", filter.accept(new Integer(1))); diff --git a/src/tests/com/puppycrawl/tools/checkstyle/filters/FilterSetTest.java b/src/tests/com/puppycrawl/tools/checkstyle/filters/FilterSetTest.java index 01a32c386..fca3869ba 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/filters/FilterSetTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/filters/FilterSetTest.java @@ -2,21 +2,20 @@ package com.puppycrawl.tools.checkstyle.filters; import junit.framework.TestCase; -import com.puppycrawl.tools.checkstyle.api.FilterSet; - /** Tests SuppressElementFilter */ +// TODO: this test should be removed/rewritten public class FilterSetTest extends TestCase { - private FilterSet filter; + private CSVFilter filter; public void setUp() { - filter = new FilterSet(); + filter = new CSVFilter(""); } public void testEmptyChain() { - assertTrue("0", filter.accept(new Integer(0))); + assertFalse("0", filter.accept(new Integer(0))); } public void testOneFilter() @@ -24,7 +23,6 @@ public class FilterSetTest extends TestCase filter.addFilter(new IntMatchFilter(0)); assertTrue("0", filter.accept(new Integer(0))); assertFalse("1", filter.accept(new Integer(1))); - assertFalse("\"0\"", filter.accept("0")); } public void testMultipleFilter() @@ -32,9 +30,8 @@ public class FilterSetTest extends TestCase filter.addFilter(new IntMatchFilter(0)); filter.addFilter(new IntRangeFilter(0, 2)); assertTrue("0", filter.accept(new Integer(0))); - assertFalse("1", filter.accept(new Integer(1))); - assertFalse("\"0\"", filter.accept("0")); + assertTrue("1", filter.accept(new Integer(1))); filter.addFilter(new IntRangeFilter(3, 4)); - assertFalse("0 not in [3,4]", filter.accept(new Integer(0))); + assertTrue("0 is in [3,4]", filter.accept(new Integer(0))); } } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/filters/IntMatchFilterTest.java b/src/tests/com/puppycrawl/tools/checkstyle/filters/IntMatchFilterTest.java index e4c2cc127..ef06bfc48 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/filters/IntMatchFilterTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/filters/IntMatchFilterTest.java @@ -1,7 +1,5 @@ package com.puppycrawl.tools.checkstyle.filters; -import com.puppycrawl.tools.checkstyle.api.Filter; - import junit.framework.TestCase; /** Tests IntMatchFilter */ @@ -9,7 +7,7 @@ public class IntMatchFilterTest extends TestCase { public void testDecide() { - final Filter filter = new IntMatchFilter(0); + final IntFilter filter = new IntMatchFilter(0); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("equal", filter.accept(new Integer(0))); assertFalse("greater than", filter.accept(new Integer(1))); @@ -17,9 +15,9 @@ public class IntMatchFilterTest extends TestCase public void testEquals() { - final Filter filter = new IntMatchFilter(0); - final Filter filter2 = new IntMatchFilter(0); - final Filter filter3 = new IntMatchFilter(1); + final IntFilter filter = new IntMatchFilter(0); + final IntFilter filter2 = new IntMatchFilter(0); + final IntFilter filter3 = new IntMatchFilter(1); assertEquals("0", filter, filter2); assertFalse("0 != 1", filter.equals(filter3)); assertFalse("0 != this", filter.equals(this)); diff --git a/src/tests/com/puppycrawl/tools/checkstyle/filters/IntRangeFilterTest.java b/src/tests/com/puppycrawl/tools/checkstyle/filters/IntRangeFilterTest.java index a3194aa2f..8ff9e5cf3 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/filters/IntRangeFilterTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/filters/IntRangeFilterTest.java @@ -1,7 +1,5 @@ package com.puppycrawl.tools.checkstyle.filters; -import com.puppycrawl.tools.checkstyle.api.Filter; - import junit.framework.TestCase; /** Tests IntRangeFilter */ @@ -9,7 +7,7 @@ public class IntRangeFilterTest extends TestCase { public void testDecide() { - final Filter filter = new IntRangeFilter(0, 10); + final IntFilter filter = new IntRangeFilter(0, 10); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("in range", filter.accept(new Integer(0))); assertTrue("in range", filter.accept(new Integer(5))); @@ -19,7 +17,7 @@ public class IntRangeFilterTest extends TestCase public void testDecideSingle() { - final Filter filter = new IntRangeFilter(0, 0); + final IntFilter filter = new IntRangeFilter(0, 0); assertFalse("less than", filter.accept(new Integer(-1))); assertTrue("in range", filter.accept(new Integer(0))); assertFalse("greater than", filter.accept(new Integer(1))); @@ -27,7 +25,7 @@ public class IntRangeFilterTest extends TestCase public void testDecideEmpty() { - final Filter filter = new IntRangeFilter(10, 0); + final IntFilter filter = new IntRangeFilter(10, 0); assertFalse("out", filter.accept(new Integer(-1))); assertFalse("out", filter.accept(new Integer(0))); assertFalse("out", filter.accept(new Integer(5))); @@ -37,10 +35,10 @@ public class IntRangeFilterTest extends TestCase public void testEquals() { - final Filter filter = new IntRangeFilter(0, 2); - final Filter filter2 = new IntRangeFilter(0, 2); - final Filter filter3 = new IntRangeFilter(0, 1); - final Filter filter4 = new IntRangeFilter(1, 2); + final IntFilter filter = new IntRangeFilter(0, 2); + final IntFilter filter2 = new IntRangeFilter(0, 2); + final IntFilter filter3 = new IntRangeFilter(0, 1); + final IntFilter filter4 = new IntRangeFilter(1, 2); assertEquals("[0,2] == [0,2]", filter, filter2); assertFalse("[0,2] != [0,1]", filter.equals(filter3)); assertFalse("[0,2] != [1,2]", filter.equals(filter4));