diff --git a/pom.xml b/pom.xml index 7a305c9bd..5afd69595 100644 --- a/pom.xml +++ b/pom.xml @@ -803,12 +803,10 @@ .*.checks.header.RegexpHeaderCheck8793 - .*.checks.imports.CustomImportOrderCheck9391 - .*.checks.imports.Guard86100 + .*.checks.imports.CustomImportOrderCheck98100 .*.checks.imports.ImportControlCheck8573 .*.checks.imports.ImportControlLoader7288 .*.checks.imports.ImportOrderCheck9199 - .*.checks.imports.PkgControl80100 .*.checks.indentation.ArrayInitHandler8397 diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java index 36dd3f1d9..e609ee984 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheck.java @@ -296,22 +296,16 @@ public class CustomImportOrderCheck extends Check { /** * Sets a custom import order from the rules in the string format specified * by user. - * @param inputCustoimportOrder + * @param inputCustomImportOrder * user value. */ - public final void setCustomImportOrderRules(final String inputCustoimportOrder) { + public final void setCustomImportOrderRules(final String inputCustomImportOrder) { customImportOrderRules.clear(); - try { - for (String currentState : inputCustoimportOrder - .split("\\s*###\\s*")) { - addRuleastoList(currentState); - } - customImportOrderRules.add(NON_GROUP_RULE_GROUP); - } - catch (StringIndexOutOfBoundsException exp) { - //if the structure of the input rule isn't correct - throw new RuntimeException("Unable to parse input rule: " + exp); + for (String currentState : inputCustomImportOrder + .split("\\s*###\\s*")) { + addRuleastoList(currentState); } + customImportOrderRules.add(NON_GROUP_RULE_GROUP); } @Override @@ -340,8 +334,7 @@ public class CustomImportOrderCheck extends Check { @Override public void visitToken(DetailAST ast) { if (ast.getType() == TokenTypes.PACKAGE_DEF) { - if (customImportOrderRules.contains(SAME_PACKAGE_RULE_GROUP) - && samePackageMatchingDepth != -1) { + if (customImportOrderRules.contains(SAME_PACKAGE_RULE_GROUP)) { samePackageDomainsRegExp = createSamePackageRegexp( samePackageMatchingDepth, ast); } @@ -640,12 +633,7 @@ public class CustomImportOrderCheck extends Check { final String rule = ruleStr.substring(ruleStr.indexOf('(') + 1, ruleStr.indexOf(')')); - try { - samePackageMatchingDepth = Integer.parseInt(rule); - } - catch (NumberFormatException e) { - samePackageDomainsRegExp = rule; - } + samePackageMatchingDepth = Integer.parseInt(rule); if (samePackageMatchingDepth <= 0) { throw new IllegalArgumentException( "SAME_PACKAGE rule parameter should be positive integer: " + ruleStr); diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheckTest.java index 68dfc0a3f..63bb60c89 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheckTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/CustomImportOrderCheckTest.java @@ -22,9 +22,11 @@ package com.puppycrawl.tools.checkstyle.checks.imports; import com.puppycrawl.tools.checkstyle.BaseCheckTestSupport; import com.puppycrawl.tools.checkstyle.DefaultConfiguration; import com.puppycrawl.tools.checkstyle.api.CheckstyleException; +import com.puppycrawl.tools.checkstyle.api.DetailAST; import com.puppycrawl.tools.checkstyle.api.TokenTypes; import java.io.File; +import java.lang.reflect.Method; import org.junit.Test; @@ -33,6 +35,7 @@ import static com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCh import static com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck.MSG_NONGROUP_IMPORT; import static com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck.MSG_ORDER; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; public class CustomImportOrderCheckTest extends BaseCheckTestSupport { /** @@ -73,7 +76,7 @@ public class CustomImportOrderCheckTest extends BaseCheckTestSupport { * @throws Exception */ @Test - public void testDefaultPackage() throws Exception { + public void testGoogleStyleguideConfiguraiton() throws Exception { final DefaultConfiguration checkConfig = createCheckConfig(CustomImportOrderCheck.class); checkConfig.addAttribute("thirdPartyPackageRegExp", "com.|org."); @@ -326,6 +329,28 @@ public class CustomImportOrderCheckTest extends BaseCheckTestSupport { assertArrayEquals(expected, actual); } + @Test + // UT uses Reflection to avoid removing null-validation from static method, + // which is a candidate for utility method in the future + public void testGetFullImportIdent() { + Object actual; + try { + Class c = Class.forName( + "com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck"); + Object t = c.newInstance(); + Method m = c.getDeclaredMethod("getFullImportIdent", DetailAST.class); + m.setAccessible(true); + actual = m.invoke(t, (DetailAST) null); + } + catch (Exception e) { + e.printStackTrace(); + actual = null; + } + + String expected = ""; + assertEquals(expected, (String) actual); + } + @Test(expected = CheckstyleException.class) public void testSamePackageDepthNegative() throws Exception { final DefaultConfiguration checkConfig = @@ -336,9 +361,8 @@ public class CustomImportOrderCheckTest extends BaseCheckTestSupport { "SAME_PACKAGE(-1)"); final String[] expected = {}; - verify(checkConfig, new File("src/test/resources-noncompilable/com/puppycrawl/tools/" - + "checkstyle/imports/" - + "InputCustomImportOrderSamePackageDepth2-5.java").getCanonicalPath(), expected); + verify(checkConfig, getPath("imports" + File.separator + + "InputCustomImportOrder.java"), expected); } @Test(expected = CheckstyleException.class) @@ -351,9 +375,50 @@ public class CustomImportOrderCheckTest extends BaseCheckTestSupport { "SAME_PACKAGE(0)"); final String[] expected = {}; - verify(checkConfig, new File("src/test/resources-noncompilable/com/puppycrawl/tools/" + verify(checkConfig, getPath("imports" + File.separator + + "InputCustomImportOrder.java"), expected); + } + + @Test(expected = CheckstyleException.class) + public void testUnsupportedRule() throws Exception { + final DefaultConfiguration checkConfig = + createCheckConfig(CustomImportOrderCheck.class); + checkConfig.addAttribute("customImportOrderRules", "SAME_PACKAGE(3)###UNSUPPORTED_RULE"); //#AAA##BBBB###CCCC####DDDD + checkConfig.addAttribute("sortImportsInGroupAlphabetically", "true"); + final String[] expected = { + "4: " + getCheckMessage(MSG_ORDER, "SAME_PACKAGE"), + "6: " + getCheckMessage(MSG_ORDER, "SAME_PACKAGE"), + "7: " + getCheckMessage(MSG_ORDER, "SAME_PACKAGE"), + "8: " + getCheckMessage(MSG_ORDER, "SAME_PACKAGE"), + "9: " + getCheckMessage(MSG_ORDER, "SAME_PACKAGE"), + }; + + verify(checkConfig, getPath("imports" + File.separator + + "InputCustomImportOrder.java"), expected); + } + + @Test(expected = CheckstyleException.class) + public void testSamePackageDepthNotInt() throws Exception { + final DefaultConfiguration checkConfig = + createCheckConfig(CustomImportOrderCheck.class); + checkConfig.addAttribute("customImportOrderRules", "SAME_PACKAGE(INT_IS_REQUIRED_HERE)"); + checkConfig.addAttribute("sortImportsInGroupAlphabetically", "true"); + final String[] expected = {}; + + verify(checkConfig, getPath("imports" + File.separator + + "InputCustomImportOrder.java"), expected); + } + + @Test + public void testNoImports() throws Exception { + final DefaultConfiguration checkConfig = + createCheckConfig(CustomImportOrderCheck.class); + checkConfig.addAttribute("customImportOrderRules", "SAME_PACKAGE(3)"); + final String[] expected = {}; + + verify(checkConfig, new File("src/test/resources/com/puppycrawl/tools/" + "checkstyle/imports/" - + "InputCustomImportOrderSamePackageDepth2-5.java").getCanonicalPath(), expected); + + "InputCustomImportOrder_NoImports.java").getCanonicalPath(), expected); } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrderThirdPartyPackage.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrderThirdPartyPackage.java index 75cfa8e01..e777db50f 100644 --- a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrderThirdPartyPackage.java +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrderThirdPartyPackage.java @@ -9,6 +9,7 @@ import javax.swing.*; import static sun.tools.util.CommandLine.parse; import static sun.tools.util.ModifierFilter.ALL_ACCESS; +import static sun.tools.util.ModifierFilter.ALL_ACCESS; public class InputCustomImportOrderThirdPartyPackage { diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrder_NoImports.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrder_NoImports.java new file mode 100644 index 000000000..e958f31dc --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputCustomImportOrder_NoImports.java @@ -0,0 +1,5 @@ +package com.puppycrawl.tools.checkstyle.imports; + + +public class InputCustomImportOrder_NoImports { +}