aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Hyde <jhyde@apache.org>2017-08-21 18:38:52 -0700
committerRoman Ivanov <romani@users.noreply.github.com>2017-12-25 12:49:32 -0800
commit6e74c7d42d90264899ef5ab78712755a3ef1811f (patch)
treed1d4600889ace3cf395adc4f8df4496fa2459da5
parentd7c7361495a838402e24ec7513fcf25b23f9d738 (diff)
downloadcheckstyle-6e74c7d42d90264899ef5ab78712755a3ef1811f.tar.gz
Issue #4981: ImportOrder with order=bottom should disallow non-static import after a static import
-rw-r--r--src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java19
-rw-r--r--src/test/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheckTest.java51
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative.java13
-rw-r--r--src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative2.java15
4 files changed, 93 insertions, 5 deletions
diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java
index a6f08bf1d..f769c754c 100644
--- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java
+++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/imports/ImportOrderCheck.java
@@ -392,6 +392,10 @@ public class ImportOrderCheck
}
doVisitToken(ident, isStatic, isStaticAndNotLastImport);
+ if (isStaticAndNotLastImport && !beforeFirstImport) {
+ log(ident.getLineNo(), MSG_ORDERING, ident.getText());
+ }
+
}
else if (option == ImportOrderOption.BOTTOM) {
@@ -401,6 +405,10 @@ public class ImportOrderCheck
}
doVisitToken(ident, isStatic, isLastImportAndNonStatic);
+ if (isLastImportAndNonStatic) {
+ log(ident.getLineNo(), MSG_ORDERING, ident.getText());
+ }
+
}
else if (option == ImportOrderOption.ABOVE) {
// previous non-static but current is static
@@ -440,14 +448,15 @@ public class ImportOrderCheck
final int groupIdx = getGroupNumber(name);
final int line = ident.getLineNo();
- if (isInSameGroup(groupIdx, isStatic)) {
- doVisitTokenInSameGroup(isStatic, previous, name, line);
- }
- else if (groupIdx > lastGroup) {
- if (!beforeFirstImport && separated && line - lastImportLine < 2) {
+ if (groupIdx > lastGroup) {
+ if (!beforeFirstImport && separated && line - lastImportLine < 2
+ && !isInSameGroup(groupIdx, isStatic)) {
log(line, MSG_SEPARATION, name);
}
}
+ else if (isInSameGroup(groupIdx, isStatic)) {
+ doVisitTokenInSameGroup(isStatic, previous, name, line);
+ }
else {
log(line, MSG_ORDERING, name);
}
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 0910437ad..7d3322275 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
@@ -409,6 +409,57 @@ public class ImportOrderCheckTest extends AbstractModuleTestSupport {
}
@Test
+ public void testStaticGroupsAlphabeticalOrderBottomNegative() throws Exception {
+ final DefaultConfiguration checkConfig =
+ createModuleConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "bottom");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("separated", "true");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {
+ "8: " + getCheckMessage(MSG_ORDERING, "java.util.Set"),
+ };
+ verify(checkConfig, getPath("InputImportOrderStaticGroupOrderBottom_Negative.java"),
+ expected);
+ }
+
+ /** Tests that a non-static import after a static import correctly gives an
+ * error if order=bottom. */
+
+ @Test
+ public void testStaticGroupsAlphabeticalOrderTopNegative() throws Exception {
+ final DefaultConfiguration checkConfig =
+ createModuleConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "top");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("separated", "true");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {
+ "5: " + getCheckMessage(MSG_ORDERING, "java.lang.Math.PI"),
+ };
+ verify(checkConfig, getPath("InputImportOrderStaticGroupOrderBottom_Negative.java"),
+ expected);
+ }
+
+ /** Tests that a non-static import before a static import correctly gives an
+ * error if order=top. */
+
+ @Test
+ public void testStaticGroupsAlphabeticalOrderBottomNegative2() throws Exception {
+ final DefaultConfiguration checkConfig =
+ createModuleConfig(ImportOrderCheck.class);
+ checkConfig.addAttribute("option", "bottom");
+ checkConfig.addAttribute("groups", "org, java");
+ checkConfig.addAttribute("separated", "true");
+ checkConfig.addAttribute("sortStaticImportsAlphabetically", "true");
+ final String[] expected = {
+ "8: " + getCheckMessage(MSG_ORDERING, "java.util.Set"),
+ };
+ verify(checkConfig, getPath("InputImportOrderStaticGroupOrderBottom_Negative2.java"),
+ expected);
+ }
+
+ @Test
public void testStaticGroupsOrderBottom() throws Exception {
final DefaultConfiguration checkConfig =
createModuleConfig(ImportOrderCheck.class);
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative.java
new file mode 100644
index 000000000..e093b04da
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative.java
@@ -0,0 +1,13 @@
+package com.puppycrawl.tools.checkstyle.checks.imports.importorder;
+
+import org.*;
+
+import static java.lang.Math.PI;
+import static org.antlr.v4.runtime.Recognizer.EOF;
+
+import java.util.Set;
+
+public class InputImportOrderStaticGroupOrderBottom_Negative
+{
+
+}
diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative2.java b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative2.java
new file mode 100644
index 000000000..61277ad75
--- /dev/null
+++ b/src/test/resources/com/puppycrawl/tools/checkstyle/checks/imports/importorder/InputImportOrderStaticGroupOrderBottom_Negative2.java
@@ -0,0 +1,15 @@
+package com.puppycrawl.tools.checkstyle.checks.imports.importorder;
+
+import org.*;
+
+import static java.lang.Math.PI;
+import static org.antlr.v4.runtime.Recognizer.EOF;
+
+import java.util.Set;
+
+import static java.util.Set.*;
+
+public class InputImportOrderStaticGroupOrderBottom_Negative2
+{
+
+}