From 5bd22fd6136bd16e82d32c5a386bcf033004d8eb Mon Sep 17 00:00:00 2001
From: alexkravin
- * Compatible with Java 1.5 source.
+ * Check also has on option making it more flexible:
+ * sortStaticImportsAlphabetically - sets whether static imports grouped by
+ * top or bottom option should be sorted alphabetically or
+ * not, default value is false. It is applied to static imports grouped
+ * with top or bottom options.
+ * To configure the Check allows static imports grouped to the top
+ * being sorted alphabetically:
+ *
+ *
+ * This option is helping in reconciling of this Check and other tools like
+ * Eclipse's Organize Imports feature.
+ *
+ *
*
+ * import static java.lang.Math.abs;
+ * import static org.abego.treelayout.Configuration.AlignmentInLevel; // OK, alphabetical order
+ *
+ * import org.abego.*;
+ *
+ * import java.util.Set;
+ *
+ * public class SomeClass { ... }
+ *
+ *
0 if
* string1 is lexicographically greater than string2.
*/
- private int compare(String string1, String string2,
+ private static int compare(String string1, String string2,
boolean caseSensitive)
{
+ int result;
if (caseSensitive) {
- return string1.compareTo(string2);
+ result = string1.compareTo(string2);
+ }
+ else {
+ result = string1.compareToIgnoreCase(string2);
}
- return string1.compareToIgnoreCase(string2);
+ return result;
}
}
diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheckTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheckTest.java
index 44cf7cfa6..7dc77b8c1 100644
--- a/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheckTest.java
+++ b/src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheckTest.java
@@ -227,4 +227,139 @@ public class ImportOrderCheckTest extends BaseCheckTestSupport
final String[] expected = {};
verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_NoFailureForRedundantImports.java"), expected);
}
+
+ @Test
+ public void testStaticGroupsAlphabeticalOrder() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "top");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {};
+ verify(checkConfig, getPath("imports" + File.separator + "InputImportOrderStaticGroupOrder.java"), expected);
+ }
+
+ @Test
+ public void testStaticGroupsOrder() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "top");
+ checkConfig.addAttribute("groups", "org, java");
+ final String[] expected = {
+ "4: " + getCheckMessage(MSG_ORDERING, "org.abego.treelayout.Configuration.AlignmentInLevel"),
+ };
+ verify(checkConfig, getPath("imports" + File.separator + "InputImportOrderStaticGroupOrder.java"), expected);
+ }
+
+ @Test
+ public void testStaticGroupsAlphabeticalOrderBottom() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "bottom");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {};
+ verify(checkConfig, getPath("imports" + File.separator + "InputImportOrderStaticGroupOrderBottom.java"), expected);
+ }
+
+ @Test
+ public void testStaticGroupsOrderBottom() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "bottom");
+ checkConfig.addAttribute("groups", "org, java");
+ final String[] expected = {
+ "8: " + getCheckMessage(MSG_ORDERING, "org.abego.treelayout.Configuration.AlignmentInLevel"),
+ };
+ verify(checkConfig, getPath("imports" + File.separator + "InputImportOrderStaticGroupOrderBottom.java"), expected);
+ }
+
+ @Test
+ public void testStaticGroupsOrderAbove() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "above");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {
+ "7: " + getCheckMessage(MSG_ORDERING, "java.lang.Math.PI"),
+ "8: " + getCheckMessage(MSG_ORDERING, "org.abego.treelayout.Configuration.AlignmentInLevel"),
+ };
+ verify(checkConfig, getPath("imports" + File.separator + "InputImportOrderStaticGroupOrderBottom.java"), expected);
+ }
+
+ @Test
+ public void testStaticOnDemandGroupsOrder() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "top");
+ checkConfig.addAttribute("groups", "org, java");
+ final String[] expected = {
+ "4: " + getCheckMessage(MSG_ORDERING, "org.abego.treelayout.Configuration.*"),
+ };
+ verify(checkConfig, getPath("imports" + File.separator
+ + "InputImportOrderStaticOnDemandGroupOrder.java"), expected);
+ }
+
+ @Test
+ public void testStaticOnDemandGroupsAlphabeticalOrder() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "top");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {};
+ verify(checkConfig, getPath("imports" + File.separator
+ + "InputImportOrderStaticOnDemandGroupOrder.java"), expected);
+ }
+
+ @Test
+ public void testStaticOnDemandGroupsOrderBottom() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "bottom");
+ checkConfig.addAttribute("groups", "org, java");
+ final String[] expected = {
+ "8: " + getCheckMessage(MSG_ORDERING, "org.abego.treelayout.Configuration.*"),
+ };
+ verify(checkConfig, getPath("imports" + File.separator
+ + "InputImportOrderStaticOnDemandGroupOrderBottom.java"), expected);
+ }
+
+ @Test
+ public void testStaticOnDemandGroupsAlphabeticalOrderBottom() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "bottom");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {};
+ verify(checkConfig, getPath("imports" + File.separator
+ + "InputImportOrderStaticOnDemandGroupOrderBottom.java"), expected);
+ }
+
+ @Test
+ public void testStaticOnDemandGroupsOrderAbove() throws Exception
+ {
+ final DefaultConfiguration checkConfig =
+ createCheckConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "above");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {
+ "7: " + getCheckMessage(MSG_ORDERING, "java.lang.Math.*"),
+ "8: " + getCheckMessage(MSG_ORDERING, "org.abego.treelayout.Configuration.*"),
+ };
+ verify(checkConfig, getPath("imports" + File.separator
+ + "InputImportOrderStaticOnDemandGroupOrderBottom.java"), expected);
+ }
}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticGroupOrder.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticGroupOrder.java
new file mode 100644
index 000000000..699cd4139
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticGroupOrder.java
@@ -0,0 +1,13 @@
+package com.puppycrawl.tools.checkstyle.imports;
+
+import static java.lang.Math.abs;
+import static org.abego.treelayout.Configuration.AlignmentInLevel;
+
+import org.*;
+
+import java.util.Set;
+
+public class InputImportOrderStaticGroupOrder
+{
+
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticGroupOrderBottom.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticGroupOrderBottom.java
new file mode 100644
index 000000000..461e61adb
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticGroupOrderBottom.java
@@ -0,0 +1,13 @@
+package com.puppycrawl.tools.checkstyle.imports;
+
+import org.*;
+
+import java.util.Set;
+
+import static java.lang.Math.PI;
+import static org.abego.treelayout.Configuration.AlignmentInLevel;
+
+public class InputImportOrderStaticGroupOrderBottom
+{
+
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticOnDemandGroupOrder.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticOnDemandGroupOrder.java
new file mode 100644
index 000000000..7ebac9034
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticOnDemandGroupOrder.java
@@ -0,0 +1,13 @@
+package com.puppycrawl.tools.checkstyle.imports;
+
+import static java.lang.Math.*;
+import static org.abego.treelayout.Configuration.*;
+
+import org.*;
+
+import java.util.Set;
+
+public class InputImportOrderStaticOnDemandGroupOrder
+{
+
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticOnDemandGroupOrderBottom.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticOnDemandGroupOrderBottom.java
new file mode 100644
index 000000000..89feb4061
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrderStaticOnDemandGroupOrderBottom.java
@@ -0,0 +1,13 @@
+package com.puppycrawl.tools.checkstyle.imports;
+
+import org.*;
+
+import java.util.Set;
+
+import static java.lang.Math.*;
+import static org.abego.treelayout.Configuration.*;
+
+public class InputImportOrderStaticOnDemandGroupOrderBottom
+{
+
+}
diff --git a/src/xdocs/config_imports.xml b/src/xdocs/config_imports.xml
index 7242573b7..524c6dd1b 100644
--- a/src/xdocs/config_imports.xml
+++ b/src/xdocs/config_imports.xml
@@ -429,6 +429,13 @@ class FooBar {
+ To configure the Check allows static imports grouped to the top + being sorted alphabetically: +
+ +