From 6d3dbe2fd3d64b491ee39ac1d42d0ee88938d190 Mon Sep 17 00:00:00 2001 From: Ruslan Diachenko Date: Thu, 16 Jul 2015 00:42:12 +0100 Subject: [PATCH] Issue #1289: 'GenericWhitespaceCheck' refactored, UT coverage improved --- pom.xml | 1 - .../whitespace/GenericWhitespaceCheck.java | 31 +++++++------- .../GenericWhitespaceCheckTest.java | 41 +++++++++++++++---- .../InputGenericWhitespaceCheck.java | 15 +++++++ 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/pom.xml b/pom.xml index df04ceeb0..ca03873e5 100644 --- a/pom.xml +++ b/pom.xml @@ -1202,7 +1202,6 @@ .*.checks.whitespace.AbstractParenPadCheck88100 .*.checks.whitespace.EmptyForInitializerPadCheck9193 - .*.checks.whitespace.GenericWhitespaceCheck8696 .*.checks.whitespace.NoWhitespaceAfterCheck9498 .*.checks.whitespace.NoWhitespaceBeforeCheck90100 .*.checks.whitespace.OperatorWrapCheck6881 diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheck.java index b0dec5fcf..5f25655c9 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheck.java @@ -115,13 +115,17 @@ public class GenericWhitespaceCheck extends Check { @Override public void visitToken(DetailAST ast) { - if (ast.getType() == TokenTypes.GENERIC_START) { - processStart(ast); - depth++; - } - else if (ast.getType() == TokenTypes.GENERIC_END) { - processEnd(ast); - depth--; + switch (ast.getType()) { + case TokenTypes.GENERIC_START: + processStart(ast); + depth++; + break; + case TokenTypes.GENERIC_END: + processEnd(ast); + depth--; + break; + default: + throw new IllegalArgumentException("Unknown type " + ast); } } @@ -134,7 +138,7 @@ public class GenericWhitespaceCheck extends Check { final int before = ast.getColumnNo() - 1; final int after = ast.getColumnNo() + 1; - if (0 <= before && Character.isWhitespace(line.charAt(before)) + if (before >= 0 && Character.isWhitespace(line.charAt(before)) && !Utils.whitespaceBefore(before, line)) { log(ast.getLineNo(), before, WS_PRECEDED, ">"); } @@ -168,7 +172,7 @@ public class GenericWhitespaceCheck extends Check { // should be whitespace if followed by & -+ // final int indexOfAmp = line.indexOf('&', after); - if (indexOfAmp != -1 + if (indexOfAmp >= 0 && whitespaceBetween(after, indexOfAmp, line)) { if (indexOfAmp - after == 0) { log(ast.getLineNo(), after, WS_NOT_PRECEDED, "&"); @@ -201,10 +205,9 @@ public class GenericWhitespaceCheck extends Check { } } else if (!Character.isWhitespace(charAfter) - && '(' != charAfter && ')' != charAfter - && ',' != charAfter && '[' != charAfter - && '.' != charAfter && ':' != charAfter - && !isAfterMethodReference(ast)) { + && charAfter != '(' && charAfter != ')' + && charAfter != ',' && charAfter != '[' + && charAfter != '.' && charAfter != ':') { log(ast.getLineNo(), after, WS_ILLEGAL_FOLLOW, ">"); } } @@ -248,7 +251,7 @@ public class GenericWhitespaceCheck extends Check { // ^ ^ // ws reqd ---+ +--- whitespace NOT required // - if (0 <= before) { + if (before >= 0) { // Detect if the first case final DetailAST parent = ast.getParent(); final DetailAST grandparent = parent.getParent(); diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheckTest.java index 9d517e9c7..e85cf5204 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/whitespace/GenericWhitespaceCheckTest.java @@ -19,22 +19,25 @@ package com.puppycrawl.tools.checkstyle.checks.whitespace; -import com.google.common.collect.Maps; -import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; -import com.puppycrawl.tools.checkstyle.DefaultConfiguration; +import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck.WS_FOLLOWED; +import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck.WS_ILLEGAL_FOLLOW; +import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck.WS_NOT_PRECEDED; +import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck.WS_PRECEDED; import java.io.File; import java.util.Map; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck.WS_FOLLOWED; -import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck -.WS_ILLEGAL_FOLLOW; -import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck -.WS_NOT_PRECEDED; -import static com.puppycrawl.tools.checkstyle.checks.whitespace.GenericWhitespaceCheck.WS_PRECEDED; +import antlr.CommonHiddenStreamToken; + +import com.google.common.collect.Maps; +import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; +import com.puppycrawl.tools.checkstyle.DefaultConfiguration; +import com.puppycrawl.tools.checkstyle.api.DetailAST; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; public class GenericWhitespaceCheckTest extends BaseCheckTestSupport { @@ -117,4 +120,24 @@ public class GenericWhitespaceCheckTest + "checkstyle/whitespace/" + "InputGenericWhitespaceMethodRef.java").getCanonicalPath(), expected); } + + @Test + public void testGetAcceptableTokens() { + GenericWhitespaceCheck genericWhitespaceCheckObj = new GenericWhitespaceCheck(); + int[] actual = genericWhitespaceCheckObj.getAcceptableTokens(); + int[] expected = new int[] { + TokenTypes.GENERIC_START, + TokenTypes.GENERIC_END, + }; + Assert.assertNotNull(actual); + Assert.assertArrayEquals(expected, actual); + } + + @Test(expected = IllegalArgumentException.class) + public void testWrongTokenType() { + GenericWhitespaceCheck genericWhitespaceCheckObj = new GenericWhitespaceCheck(); + DetailAST ast = new DetailAST(); + ast.initialize(new CommonHiddenStreamToken(TokenTypes.INTERFACE_DEF, "interface")); + genericWhitespaceCheckObj.visitToken(ast); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/whitespace/InputGenericWhitespaceCheck.java b/src/test/resources/com/puppycrawl/tools/checkstyle/whitespace/InputGenericWhitespaceCheck.java index 0a5ba07fc..4386feea5 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/whitespace/InputGenericWhitespaceCheck.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/whitespace/InputGenericWhitespaceCheck.java @@ -62,4 +62,19 @@ class InputGenericWhitespaceCheck implements Comparable & IntEnum> { } + + public static class IntEnumValueType4> & IntEnum> { + } + + public void beforeAndAfter() { + List +< +Integer> x = new ArrayList(); + List + y = new ArrayList(); + Map, Integer> a = new HashMap, Integer>(); + Map, Integer> b = (Map, Integer>) a; + } }