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 {
+}