From c2b22a74a2e85bbb2cfd4e0e2379bb062cb58dd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lars=20K=C3=BChne?= Date: Tue, 22 Oct 2002 14:13:34 +0000 Subject: [PATCH] fix for bug #626875, array instantiation incorrectly flagged --- .../checks/IllegalInstantiationCheck.java | 14 +++++++++- .../tools/checkstyle/InputSemantic.java | 1 + .../tools/checkstyle/CheckerTest.java | 28 +++++++++---------- .../checkstyle/EqualsHashCodeCheckTest.java | 4 +-- .../GenericIllegalRegexpCheckTest.java | 2 +- .../IllegalInstantiationCheckTest.java | 8 +++--- .../checkstyle/InnerAssignmentCheckTest.java | 8 +++--- .../tools/checkstyle/UpperEllCheckTest.java | 2 +- 8 files changed, 40 insertions(+), 27 deletions(-) diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/IllegalInstantiationCheck.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/IllegalInstantiationCheck.java index d45313891..0883aa8f6 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/IllegalInstantiationCheck.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/IllegalInstantiationCheck.java @@ -28,6 +28,7 @@ import com.puppycrawl.tools.checkstyle.api.TokenTypes; import com.puppycrawl.tools.checkstyle.api.Check; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.FullIdent; +import antlr.collections.AST; // TODO: Clean up potential duplicate code here and in UnusedImportsCheck /** @@ -47,8 +48,10 @@ import com.puppycrawl.tools.checkstyle.api.FullIdent; * Some extremely performance sensitive projects may require the use of factory * methods for other classes as well, to enforce the usage of number caches or * object pools. - * *

+ * + * Limitations: It is currently not possible to specify array classes. + * * @author Lars Kühne */ public class IllegalInstantiationCheck @@ -129,6 +132,15 @@ public class IllegalInstantiationCheck private void processLiteralNew(DetailAST aAST) { DetailAST typeNameAST = (DetailAST) aAST.getFirstChild(); + + AST nameSibling = typeNameAST.getNextSibling(); + if (nameSibling != null + && nameSibling.getType() == TokenTypes.ARRAY_DECLARATOR) + { + // aAST == "new Boolean[]" + return; + } + FullIdent typeIdent = FullIdent.createFullIdent(typeNameAST); final String typeName = typeIdent.getText(); final int lineNo = aAST.getLineNo(); diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/InputSemantic.java b/src/testinputs/com/puppycrawl/tools/checkstyle/InputSemantic.java index 46d7687f8..672a3997f 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/InputSemantic.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/InputSemantic.java @@ -22,6 +22,7 @@ class InputSemantic /* Boolean instantiation in a non-static initializer */ { Boolean x = new Boolean(true); + Boolean[] y = new Boolean[]{Boolean.TRUE, Boolean.FALSE}; } /** fully qualified Boolean instantiation in a method. **/ diff --git a/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java b/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java index 21f315a9d..cffc3441e 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/CheckerTest.java @@ -546,15 +546,15 @@ public class CheckerTest final String filepath = getPath("InputSemantic.java"); assertNotNull(c); final String[] expected = { - filepath + ":51:65: Must have at least one statement.", - filepath + ":53:41: Must have at least one statement.", - filepath + ":70:38: Must have at least one statement.", - filepath + ":71:52: Must have at least one statement.", - filepath + ":72:45: Must have at least one statement.", - filepath + ":74:13: Must have at least one statement.", - filepath + ":76:17: Must have at least one statement.", - filepath + ":78:13: Must have at least one statement.", - filepath + ":81:17: Must have at least one statement.", + filepath + ":52:65: Must have at least one statement.", + filepath + ":54:41: Must have at least one statement.", + filepath + ":71:38: Must have at least one statement.", + filepath + ":72:52: Must have at least one statement.", + filepath + ":73:45: Must have at least one statement.", + filepath + ":75:13: Must have at least one statement.", + filepath + ":77:17: Must have at least one statement.", + filepath + ":79:13: Must have at least one statement.", + filepath + ":82:17: Must have at least one statement.", }; verify(c, filepath, expected); } @@ -571,11 +571,11 @@ public class CheckerTest final String filepath = getPath("InputSemantic.java"); assertNotNull(c); final String[] expected = { - filepath + ":51:65: Empty catch block.", - filepath + ":71:52: Empty catch block.", - filepath + ":72:45: Empty catch block.", - filepath + ":74:13: Empty try block.", - filepath + ":76:17: Empty finally block.", + filepath + ":52:65: Empty catch block.", + filepath + ":72:52: Empty catch block.", + filepath + ":73:45: Empty catch block.", + filepath + ":75:13: Empty try block.", + filepath + ":77:17: Empty finally block.", }; verify(c, filepath, expected); } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/EqualsHashCodeCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/EqualsHashCodeCheckTest.java index 944137e9f..72bf1bb83 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/EqualsHashCodeCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/EqualsHashCodeCheckTest.java @@ -17,8 +17,8 @@ public class EqualsHashCodeCheckTest final Checker c = createChecker(checkConfig); final String fname = getPath("InputSemantic.java"); final String[] expected = { - "125:9: Definition of 'equals()' without corresponding defnition of 'hashCode()'.", - "162:13: Definition of 'equals()' without corresponding defnition of 'hashCode()'.", + "126:9: Definition of 'equals()' without corresponding defnition of 'hashCode()'.", + "163:13: Definition of 'equals()' without corresponding defnition of 'hashCode()'.", }; verify(c, fname, expected); diff --git a/src/tests/com/puppycrawl/tools/checkstyle/GenericIllegalRegexpCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/GenericIllegalRegexpCheckTest.java index 9be9a5b7b..2c4e1519a 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/GenericIllegalRegexpCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/GenericIllegalRegexpCheckTest.java @@ -20,7 +20,7 @@ public class GenericIllegalRegexpCheckTest final Checker c = createChecker(checkConfig); final String fname = getPath("InputSemantic.java"); final String[] expected = { - "68: Line matches the illegal pattern '" + illegal + "'." + "69: Line matches the illegal pattern '" + illegal + "'." }; verify(c, fname, expected); } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/IllegalInstantiationCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/IllegalInstantiationCheckTest.java index 991a7d129..bce414011 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/IllegalInstantiationCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/IllegalInstantiationCheckTest.java @@ -24,11 +24,11 @@ public class IllegalInstantiationCheckTest final String[] expected = { "19:21: Avoid instantiation of java.lang.Boolean.", "24:21: Avoid instantiation of java.lang.Boolean.", - "30:16: Avoid instantiation of java.lang.Boolean.", - "37:21: Avoid instantiation of " + + "31:16: Avoid instantiation of java.lang.Boolean.", + "38:21: Avoid instantiation of " + "com.puppycrawl.tools.checkstyle.InputModifier.", - "40:18: Avoid instantiation of java.io.File.", - "43:21: Avoid instantiation of java.awt.Color." + "41:18: Avoid instantiation of java.io.File.", + "44:21: Avoid instantiation of java.awt.Color." }; verify(c, fname, expected); } diff --git a/src/tests/com/puppycrawl/tools/checkstyle/InnerAssignmentCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/InnerAssignmentCheckTest.java index 91d002ff3..cbc8bcc75 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/InnerAssignmentCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/InnerAssignmentCheckTest.java @@ -17,10 +17,10 @@ public class InnerAssignmentCheckTest final Checker c = createChecker(checkConfig); final String fname = getPath("InputSemantic.java"); final String[] expected = { - "101:15: Avoid inner assignments.", - "101:19: Avoid inner assignments.", - "103:39: Avoid inner assignments.", - "105:35: Avoid inner assignments.", + "102:15: Avoid inner assignments.", + "102:19: Avoid inner assignments.", + "104:39: Avoid inner assignments.", + "106:35: Avoid inner assignments.", }; verify(c, fname, expected); diff --git a/src/tests/com/puppycrawl/tools/checkstyle/UpperEllCheckTest.java b/src/tests/com/puppycrawl/tools/checkstyle/UpperEllCheckTest.java index dcc06769a..ad60563a5 100644 --- a/src/tests/com/puppycrawl/tools/checkstyle/UpperEllCheckTest.java +++ b/src/tests/com/puppycrawl/tools/checkstyle/UpperEllCheckTest.java @@ -18,7 +18,7 @@ extends BaseCheckTestCase final Checker c = createChecker(checkConfig); final String fname = getPath("InputSemantic.java"); final String[] expected = { - "93:43: Should use uppercase 'L'.", + "94:43: Should use uppercase 'L'.", }; verify(c, fname, expected); }