diff options
author | Julian Hyde <jhyde@apache.org> | 2017-08-21 18:38:52 -0700 |
---|---|---|
committer | Roman Ivanov <romani@users.noreply.github.com> | 2017-12-25 12:49:32 -0800 |
commit | 6e74c7d42d90264899ef5ab78712755a3ef1811f (patch) | |
tree | d1d4600889ace3cf395adc4f8df4496fa2459da5 | |
parent | d7c7361495a838402e24ec7513fcf25b23f9d738 (diff) | |
download | checkstyle-6e74c7d42d90264899ef5ab78712755a3ef1811f.tar.gz |
Issue #4981: ImportOrder with order=bottom should disallow non-static import after a static import
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 +{ + +} |