From 41d538f9be41a0561ca7a28b159c034bcd3810e8 Mon Sep 17 00:00:00 2001 From: Baratali Izmailov Date: Wed, 15 Jul 2015 12:40:57 -0700 Subject: [PATCH] Issue #1293: Refactoring of IllegalTokenCheck and IllegalTokenTextCheck. Coverage has been improved. --- pom.xml | 2 -- .../puppycrawl/tools/checkstyle/Utils.java | 28 ++++++++++++--- .../checks/coding/IllegalTokenCheck.java | 21 ++++-------- .../checks/coding/IllegalTokenTextCheck.java | 19 +++++------ .../coding/IllegalTokenTextCheckTest.java | 34 +++++++++++++++++++ 5 files changed, 72 insertions(+), 32 deletions(-) diff --git a/pom.xml b/pom.xml index 3bbdba7cc..82de6bd7e 100644 --- a/pom.xml +++ b/pom.xml @@ -1134,8 +1134,6 @@ .*.checks.coding.ExplicitInitializationCheck9197 .*.checks.coding.FinalLocalVariableCheck82100 .*.checks.coding.IllegalInstantiationCheck8197 - .*.checks.coding.IllegalTokenCheck83100 - .*.checks.coding.IllegalTokenTextCheck6092 .*.checks.coding.IllegalTypeCheck9394 .*.checks.coding.InnerAssignmentCheck88100 .*.checks.coding.ModifiedControlVariableCheck9197 diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/Utils.java b/src/main/java/com/puppycrawl/tools/checkstyle/Utils.java index 8b6c551a5..601c74df4 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/Utils.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/Utils.java @@ -19,10 +19,6 @@ package com.puppycrawl.tools.checkstyle; -import com.google.common.collect.ImmutableMap; -import com.puppycrawl.tools.checkstyle.api.TokenTypes; -import org.apache.commons.beanutils.ConversionException; - import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.Field; @@ -33,6 +29,11 @@ import java.util.ResourceBundle; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; +import org.apache.commons.beanutils.ConversionException; + +import com.google.common.collect.ImmutableMap; +import com.puppycrawl.tools.checkstyle.api.TokenTypes; + /** * Contains utility methods. * @@ -45,6 +46,9 @@ public final class Utils { /** maps from a token value to name */ private static final String[] TOKEN_VALUE_TO_NAME; + /** Array of all token IDs */ + private static final int[] TOKEN_IDS; + // initialise the constants static { final ImmutableMap.Builder builder = @@ -71,6 +75,12 @@ public final class Utils { TOKEN_NAME_TO_VALUE = builder.build(); TOKEN_VALUE_TO_NAME = tempTokenValueToName; + + final Integer[] ids = TOKEN_NAME_TO_VALUE.values().toArray(new Integer[0]); + TOKEN_IDS = new int[ids.length]; + for (int i = 0; i < ids.length; i++) { + TOKEN_IDS[i] = ids[i].intValue(); + } } @@ -78,6 +88,16 @@ public final class Utils { private Utils() { } + /** + * Get all token IDs that are available in TokenTypes. + * @return array of token IDs + */ + public static int[] getAllTokenIds() { + final int[] safeCopy = new int[TOKEN_IDS.length]; + System.arraycopy(TOKEN_IDS, 0, safeCopy, 0, TOKEN_IDS.length); + return safeCopy; + } + /** * Returns whether the file extension matches what we are meant to * process. diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenCheck.java index 006ccd9a4..b63d921c3 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenCheck.java @@ -23,7 +23,6 @@ import com.puppycrawl.tools.checkstyle.Utils; import com.puppycrawl.tools.checkstyle.api.Check; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; -import java.util.Set; /** *

@@ -70,20 +69,12 @@ public class IllegalTokenCheck @Override public int[] getAcceptableTokens() { - // Any tokens set by property 'tokens' are acceptable - int[] tokensToCopy = getDefaultTokens(); - final Set tokenNames = getTokenNames(); - if (!tokenNames.isEmpty()) { - tokensToCopy = new int[tokenNames.size()]; - int i = 0; - for (String name : tokenNames) { - tokensToCopy[i] = Utils.getTokenId(name); - i++; - } - } - final int[] copy = new int[tokensToCopy.length]; - System.arraycopy(tokensToCopy, 0, copy, 0, tokensToCopy.length); - return copy; + return Utils.getAllTokenIds(); + } + + @Override + public int[] getRequiredTokens() { + return new int[0]; } @Override diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheck.java index 53fc5ff25..a99ea00c2 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheck.java @@ -19,11 +19,11 @@ package com.puppycrawl.tools.checkstyle.checks.coding; +import java.util.regex.Pattern; + import com.puppycrawl.tools.checkstyle.Utils; import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.checks.AbstractFormatCheck; -import java.util.Set; -import java.util.regex.Pattern; /** *

@@ -79,15 +79,12 @@ public class IllegalTokenTextCheck @Override public int[] getAcceptableTokens() { - // Any tokens set by property 'tokens' are acceptable - final Set tokenNames = getTokenNames(); - final int[] result = new int[tokenNames.size()]; - int i = 0; - for (final String name : tokenNames) { - result[i] = Utils.getTokenId(name); - i++; - } - return result; + return Utils.getAllTokenIds(); + } + + @Override + public int[] getRequiredTokens() { + return new int[0]; } @Override diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java index 736c4517f..84b7448e0 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/coding/IllegalTokenTextCheckTest.java @@ -21,6 +21,8 @@ package com.puppycrawl.tools.checkstyle.checks.coding; import static com.puppycrawl.tools.checkstyle.checks.coding.IllegalTokenTextCheck.MSG_KEY; +import java.text.MessageFormat; + import org.junit.Assert; import org.junit.Test; @@ -36,6 +38,7 @@ public class IllegalTokenTextCheckTest createCheckConfig(IllegalTokenTextCheck.class); checkConfig.addAttribute("tokens", "STRING_LITERAL"); checkConfig.addAttribute("format", "a href"); + checkConfig.addAttribute("ignoreCase", "false"); final String[] expected = { "24:28: " + getCheckMessage(MSG_KEY, "a href"), }; @@ -57,6 +60,37 @@ public class IllegalTokenTextCheckTest verify(checkConfig, getPath("InputIllegalTokens.java"), expected); } + @Test + public void testCustomMessage() + throws Exception { + final DefaultConfiguration checkConfig = + createCheckConfig(IllegalTokenTextCheck.class); + checkConfig.addAttribute("tokens", "STRING_LITERAL"); + checkConfig.addAttribute("format", "a href"); + + String customMessage = "My custom message"; + checkConfig.addAttribute("message", customMessage); + final String[] expected = { + "24:28: " + MessageFormat.format(customMessage, "a href"), + }; + verify(checkConfig, getPath("InputIllegalTokens.java"), expected); + } + + @Test + public void testNullCustomMessage() + throws Exception { + final DefaultConfiguration checkConfig = + createCheckConfig(IllegalTokenTextCheck.class); + checkConfig.addAttribute("tokens", "STRING_LITERAL"); + checkConfig.addAttribute("format", "a href"); + + checkConfig.addAttribute("message", null); + final String[] expected = { + "24:28: " + getCheckMessage(MSG_KEY, "a href"), + }; + verify(checkConfig, getPath("InputIllegalTokens.java"), expected); + } + @Test public void testTokensNotNull() { IllegalTokenTextCheck check = new IllegalTokenTextCheck();