diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/MyModifierSet.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/MyModifierSet.java index 016dac383..cc261e36e 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/MyModifierSet.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/MyModifierSet.java @@ -110,6 +110,12 @@ class MyModifierSet return mModifiers.contains("public"); } + /** @return whether the set contains a "abstract". **/ + boolean containsAbstract() + { + return mModifiers.contains("abstract"); + } + /** @return the visibility scope of the modifiers. */ Scope getVisibilityScope() { @@ -164,4 +170,5 @@ class MyModifierSet buf.append("]"); return buf.toString(); } + } diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/Verifier.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/Verifier.java index 6115595d9..0d7d8f8a3 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/Verifier.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/Verifier.java @@ -247,6 +247,12 @@ class Verifier "redundant 'public' modifier."); } + // Check for redunant abstract + if (inInterfaceBlock() && aSig.getModSet().containsAbstract()) { + log(aSig.getModSet().getFirstLineNo(), + aSig.getModSet().getFirstColNo(), + "redundant 'abstract' modifier."); + } // now check the javadoc final Scope methodScope = inInterfaceBlock() ? Scope.PUBLIC diff --git a/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java b/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java index e91897bfd..fffca5376 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java @@ -392,7 +392,7 @@ public class CheckerTest final String filepath = getPath("InputSimple.java"); assertNotNull(c); final String[] expected = { - filepath + ":1: file length is 168 lines (max allowed is 20).", + filepath + ":1: file length is 190 lines (max allowed is 20).", filepath + ":3: Line does not match expected header line of '// Created: 2001'.", filepath + ":18: line longer than 80 characters", filepath + ":19:25: line contains a tab character", @@ -453,6 +453,7 @@ public class CheckerTest filepath + ":18:12: 'private' modifier out of order with the JLS suggestions.", filepath + ":24:14: 'private' modifier out of order with the JLS suggestions.", filepath + ":32:9: redundant 'public' modifier.", + filepath + ":38:9: redundant 'abstract' modifier.", }; verify(c, filepath, expected); } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/InputModifier.java b/src/tests/com/puppycrawl/tools/checkstyle/InputModifier.java index ab54c5265..96fe6ecb9 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/InputModifier.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/InputModifier.java @@ -33,5 +33,8 @@ strictfp final class InputModifier // illegal order of modifiers for class /** all OK */ void b(); + + /** redundant abstract modifier */ + abstract void c(); } } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/InputSimple.java b/src/tests/com/puppycrawl/tools/checkstyle/InputSimple.java index 28ee90b4a..e298f69dd 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/InputSimple.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/InputSimple.java @@ -165,4 +165,26 @@ final class InputSimple */ /* NOTHING */ /* YES */ /* FIXME: x */ /* YES!! */ + + /** test long comments **/ + void veryLong() + { + /* + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + blah blah blah blah + enough talk */ + } }