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 a69af652efa..37bbda25907 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 @@ -169,6 +169,183 @@ * * *

+ * To configure the check : + *

+ *
+ * <module name="CustomImportOrder"/>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ * import org.apache.commons.io.FileUtils; // OK
+ * import static java.util.*; // OK
+ * import java.time.*; // OK
+ * import static java.io.*; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

+ * To configure the check so that it checks in the order + * (static imports,standard java packages,third party package): + *

+ *
+ * <module name="CustomImportOrder">
+ *   <property name="customImportOrderRules"
+ *     value="STATIC###STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE"/>
+ * </module>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ * import static java.io.*; // violation as static imports should be in top
+ *
+ * import org.apache.commons.io.FileUtils; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

+ * To configure the check such that only java packages are included in standard java packages + *

+ *
+ * <module name="CustomImportOrder">
+ *   <property name="customImportOrderRules"
+ *     value="STATIC###STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE"/>
+ *   <property name="standardPackageRegExp" value="^java\."/>
+ * </module>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ * import static java.io.*; // OK
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // violation as it is not included in standard java package group.
+ *
+ * import org.apache.commons.io.FileUtils; // violation
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

+ * To configure the check to include only "com" packages as third party group imports: + *

+ *
+ * <module name="CustomImportOrder">
+ *   <property name="customImportOrderRules"
+ *     value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
+ *   <property name="thirdPartyPackageRegExp" value="^com\."/>
+ * </module>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ * import static java.io.*; // OK
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ *
+ * import org.apache.commons.io.FileUtils; // violation(should be in end)
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // violation
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

+ * To configure the check to force some packages in special import group: + *

+ *
+ * <module name="CustomImportOrder">
+ *   <property name="customImportOrderRules"
+ *     value="STATIC###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE"/>
+ *   <property name="specialImportsRegExp" value="^org\."/>
+ * </module>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ * import static java.io.*; // OK
+ *
+ * import org.json.JSONObject; // OK
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ *
+ * import org.apache.commons.io.FileUtils; // violation
+ * 
+ *

+ * To configure the check such that empty line separator between two groups is enabled: + *

+ *
+ * <module name="CustomImportOrder">
+ *   <property name="customImportOrderRules"
+ *     value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
+ *   <property name="specialImportsRegExp" value="^org\."/>
+ *   <property name="thirdPartyPackageRegExp" value="^com\."/>
+ *   <property name="separateLineBetweenGroups" value="true"/>
+ * </module>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ * import static java.io.*; // OK
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ * import org.apache.commons.io.FileUtils; // violation
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // violation
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

+ * To configure the check such that import groups are forced to be sorted alphabetically: + *

+ *
+ * <module name="CustomImportOrder">
+ *   <property name="customImportOrderRules"
+ *     value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
+ *   <property name="specialImportsRegExp" value="^org\."/>
+ *   <property name="thirdPartyPackageRegExp" value="^com\."/>
+ *   <property name="separateLineBetweenGroups" value="false"/>
+ *   <property name="sortImportsInGroupAlphabetically" value="true"/>
+ * </module>
+ * 
+ *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ * import static java.io.*; // Violation since it should come before"java.util"
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ * import org.apache.commons.io.FileUtils; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

* To configure the check so that it matches default Eclipse formatter configuration * (tested on Kepler and Luna releases): *

@@ -210,6 +387,22 @@ * </module> * *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.util.*; // OK
+ * import static java.io.*; // Violation since it should come before"java.util"
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ * import org.apache.commons.io.FileUtils; // Violation should be separated by space
+ *
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * 
+ *

* To configure the check so that it matches default Eclipse formatter configuration * (tested on Mars release): *

@@ -239,6 +432,23 @@ * </module> * *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.io.*; // OK
+ * import static java.util.*; // OK
+ *
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ *
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // Violation
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // Violation
+ *
+ * import org.apache.commons.io.FileUtils;
+ * 
+ *

* To configure the check so that it matches default IntelliJ IDEA formatter configuration * (tested on v14): *

@@ -271,6 +481,25 @@ * </module> * *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.io.*; // OK
+ * import static java.util.*; // OK
+ *
+ * import java.time.*; // violation should be in standard package group
+ *                    // below special import
+ *
+ * import javax.net.*; // Violation should be in special import group
+ *
+ * import org.apache.commons.io.FileUtils; // Violation should be in
+ *                                        // THIRD PARTY PACKAGE GROUP
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // Violation
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // Violation
+ * 
+ *

* To configure the check so that it matches default NetBeans formatter configuration * (tested on v8): *

@@ -286,6 +515,21 @@ * <module name="CustomImportOrder"/> * *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.io.*; // OK
+ * import static java.util.*; // OK
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ *
+ * import org.apache.commons.io.FileUtils; // should not be separated by line
+ * 
+ *

* To set RegExps for THIRD_PARTY_PACKAGE and STANDARD_JAVA_PACKAGE groups use * thirdPartyPackageRegExp and standardPackageRegExp options. *

@@ -298,6 +542,21 @@ * </module> * *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.io.*; // OK
+ * import static java.util.*; // OK
+ * import java.time.*; // violation
+ * import javax.net.*; // violation
+ *
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * import org.apache.commons.io.FileUtils; // OK
+ * 
+ *

* Also, this check can be configured to force empty line separator between * import groups. For example. *

@@ -307,6 +566,20 @@ * </module> * *

+ * Example: + *

+ *
+ * package com.company;
+ *
+ * import static java.io.*; // OK
+ * import static java.util.*; // OK
+ * import java.time.*; // OK
+ * import javax.net.*; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK
+ * import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK
+ * import org.apache.commons.io.FileUtils; // OK
+ * 
+ *

* It is possible to enforce * ASCII sort order * of imports in groups using the following configuration: diff --git a/src/xdocs/config_imports.xml b/src/xdocs/config_imports.xml index e7244c80237..765a1128f5b 100644 --- a/src/xdocs/config_imports.xml +++ b/src/xdocs/config_imports.xml @@ -486,6 +486,183 @@ import com.puppycrawl.tools.checkstyle.checks.imports.AvoidStarImportCheck; +

+ To configure the check : +

+ +<module name="CustomImportOrder"/> + +

+ Example: +

+ +package com.company; +import org.apache.commons.io.FileUtils; // OK +import static java.util.*; // OK +import java.time.*; // OK +import static java.io.*; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK + +

+ To configure the check so that it checks in the order + (static imports,standard java packages,third party package): +

+ +<module name="CustomImportOrder"> + <property name="customImportOrderRules" + value="STATIC###STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE"/> +</module> + +

+ Example: +

+ +package com.company; + +import static java.util.*; // OK + +import java.time.*; // OK +import javax.net.*; // OK +import static java.io.*; // violation as static imports should be in top + +import org.apache.commons.io.FileUtils; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK + +

+ To configure the check such that only java packages are included in standard java packages +

+ +<module name="CustomImportOrder"> + <property name="customImportOrderRules" + value="STATIC###STANDARD_JAVA_PACKAGE###THIRD_PARTY_PACKAGE"/> + <property name="standardPackageRegExp" value="^java\."/> +</module> + +

+ Example: +

+ +package com.company; + +import static java.util.*; // OK +import static java.io.*; // OK + +import java.time.*; // OK +import javax.net.*; // violation as it is not included in standard java package group. + +import org.apache.commons.io.FileUtils; // violation +import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK + +

+ To configure the check to include only "com" packages as third party group imports: +

+ +<module name="CustomImportOrder"> + <property name="customImportOrderRules" + value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/> + <property name="thirdPartyPackageRegExp" value="^com\."/> +</module> + +

+ Example: +

+ +package com.company; + +import static java.util.*; // OK +import static java.io.*; // OK + +import java.time.*; // OK +import javax.net.*; // OK + +import org.apache.commons.io.FileUtils; // violation(should be in end) +import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // violation +import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK + +

+ To configure the check to force some packages in special import group: +

+ +<module name="CustomImportOrder"> + <property name="customImportOrderRules" + value="STATIC###SPECIAL_IMPORTS###STANDARD_JAVA_PACKAGE"/> + <property name="specialImportsRegExp" value="^org\."/> +</module> + +

+ Example: +

+ +package com.company; + +import static java.util.*; // OK +import static java.io.*; // OK + +import org.json.JSONObject; // OK + +import java.time.*; // OK +import javax.net.*; // OK + +import org.apache.commons.io.FileUtils; // violation + +

+ To configure the check such that empty line separator between two groups is enabled: +

+ +<module name="CustomImportOrder"> + <property name="customImportOrderRules" + value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/> + <property name="specialImportsRegExp" value="^org\."/> + <property name="thirdPartyPackageRegExp" value="^com\."/> + <property name="separateLineBetweenGroups" value="true"/> +</module> + +

+ Example: +

+ +package com.company; + +import static java.util.*; // OK +import static java.io.*; // OK + +import java.time.*; // OK +import javax.net.*; // OK +import org.apache.commons.io.FileUtils; // violation +import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // violation +import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK + +

+ To configure the check such that import groups are forced to be sorted alphabetically: +

+ +<module name="CustomImportOrder"> + <property name="customImportOrderRules" + value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/> + <property name="specialImportsRegExp" value="^org\."/> + <property name="thirdPartyPackageRegExp" value="^com\."/> + <property name="separateLineBetweenGroups" value="false"/> + <property name="sortImportsInGroupAlphabetically" value="true"/> +</module> + +

+ Example: +

+ +package com.company; + +import static java.util.*; // OK +import static java.io.*; // Violation since it should come before"java.util" + +import java.time.*; // OK +import javax.net.*; // OK +import org.apache.commons.io.FileUtils; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.CustomImportOrderCheck; // OK +import com.puppycrawl.tools.checkstyle.checks.imports.ImportOrderCheck; // OK +

To configure the check so that it matches default Eclipse formatter configuration (tested on Kepler and Luna releases):