From c09131defe36dde56b2d9767d1953d93e20bd200 Mon Sep 17 00:00:00 2001 From: Aleksandr Ivanov Date: Fri, 17 Jul 2015 16:00:52 +0300 Subject: [PATCH] ImportOrderCheck. Fix separation for static imports #1398 --- .../checks/imports/ImportOrderCheck.java | 21 ++++++-------- .../checks/imports/ImportOrderCheckTest.java | 28 +++++++++++++++++++ ...putImportOrder_EclipseDefaultNegative.java | 23 +++++++++++++++ ...putImportOrder_EclipseDefaultPositive.java | 24 ++++++++++++++++ 4 files changed, 83 insertions(+), 13 deletions(-) create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultNegative.java create mode 100644 src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultPositive.java 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 5c4cfa690..4eb3ff3e7 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 @@ -337,17 +337,15 @@ public class ImportOrderCheck final int groupIdx = getGroupNumber(name); final int line = ident.getLineNo(); - if (groupIdx > lastGroup) { - // This check should be made more robust to handle - // comments and imports that span more than one line. + if (!beforeFirstImport && isAlphabeticallySortableStaticImport(isStatic) + || groupIdx == lastGroup) { + doVisitTokenInSameGroup(isStatic, previous, name, line); + } + else if (groupIdx > lastGroup) { if (!beforeFirstImport && separated && line - lastImportLine < 2) { log(line, MSG_SEPARATION, name); } } - else if (groupIdx == lastGroup || sortStaticImportsAlphabetically - && isAlphabeticallySortableStaticImport(isStatic)) { - doVisitTokenInSameGroup(isStatic, previous, name, line); - } else { log(line, MSG_ORDERING, name); } @@ -363,12 +361,9 @@ public class ImportOrderCheck * @return true if static imports should be sorted alphabetically. */ private boolean isAlphabeticallySortableStaticImport(boolean isStatic) { - boolean result = false; - if (isStatic && (getAbstractOption() == ImportOrderOption.TOP - || getAbstractOption() == ImportOrderOption.BOTTOM)) { - result = true; - } - return result; + return isStatic && sortStaticImportsAlphabetically + && (getAbstractOption() == ImportOrderOption.TOP + || getAbstractOption() == ImportOrderOption.BOTTOM); } /** 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 b4ba3749e..8f7f6214a 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 @@ -442,4 +442,32 @@ public class ImportOrderCheckTest extends BaseCheckTestSupport { return astSemi; } + @Test + public void testEclipseDefaultPositive() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class); + checkConfig.addAttribute("groups", "java,javax,org,com"); + checkConfig.addAttribute("ordered", "true"); + checkConfig.addAttribute("separated", "true"); + checkConfig.addAttribute("option", "top"); + checkConfig.addAttribute("sortStaticImportsAlphabetically", "true"); + final String[] expected = {}; + + verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_EclipseDefaultPositive.java"), expected); + } + + @Test + public void testEclipseDefaultNegative() throws Exception { + final DefaultConfiguration checkConfig = createCheckConfig(ImportOrderCheck.class); + checkConfig.addAttribute("groups", "java,javax,org,com"); + checkConfig.addAttribute("ordered", "true"); + checkConfig.addAttribute("separated", "true"); + checkConfig.addAttribute("option", "top"); + checkConfig.addAttribute("sortStaticImportsAlphabetically", "true"); + final String[] expected = { + "12: " + getCheckMessage(MSG_SEPARATION, "javax.swing.JComponent"), + "17: " + getCheckMessage(MSG_ORDERING, "org.junit.Test"), + }; + + verify(checkConfig, getPath("imports" + File.separator + "InputImportOrder_EclipseDefaultNegative.java"), expected); + } } diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultNegative.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultNegative.java new file mode 100644 index 000000000..4d8552106 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultNegative.java @@ -0,0 +1,23 @@ +package com.puppycrawl.tools.checkstyle.imports; + +import static com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck.MSG_ORDERING; +import static java.awt.Button.ABORT; +import static java.io.File.createTempFile; +import static javax.swing.WindowConstants.*; +import static org.junit.Assert.assertEquals; + +import java.awt.Button; +import java.awt.Dialog; +import java.io.InputStream; +import javax.swing.JComponent; +import javax.swing.JTable; + +import sun.tools.java.ArrayType; + +import org.junit.Test; +import org.powermock.api.mockito.PowerMockito; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; + +public class InputImportOrder_EclipseDefaultNegative { +} diff --git a/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultPositive.java b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultPositive.java new file mode 100644 index 000000000..c1ee02361 --- /dev/null +++ b/src/test/resources/com/puppycrawl/tools/checkstyle/imports/InputImportOrder_EclipseDefaultPositive.java @@ -0,0 +1,24 @@ +package com.puppycrawl.tools.checkstyle.imports; + +import static com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck.MSG_ORDERING; +import static java.awt.Button.ABORT; +import static java.io.File.createTempFile; +import static javax.swing.WindowConstants.*; +import static org.junit.Assert.assertEquals; + +import java.awt.Button; +import java.awt.Dialog; +import java.io.InputStream; + +import javax.swing.JComponent; +import javax.swing.JTable; + +import org.junit.Test; +import org.powermock.api.mockito.PowerMockito; + +import com.puppycrawl.tools.checkstyle.api.DetailAST; + +import sun.tools.java.ArrayType; + +public class InputImportOrder_EclipseDefaultPositive { +}