AvoidModuleImport
Since Checkstyle 14.1.0
Description
Rationale: Module import declarations (import module M;) import, on demand, every public top level type exported by a module and by any modules it transitively reads. This is a much broader, less explicit surface than single type or on demand package imports, making it harder to tell where a type comes from, and it increases the risk of ambiguous references between same named types in different exported packages. Disallowing module imports keeps imports explicit and predictable.
Properties
| name | description | type | default value | since |
|---|---|---|---|---|
| excludes | Specify modules allowed to import. | String[] | {} |
14.1.0 |
| maxAllowedModuleImports | Control number of module imports allowed. | int | 0 |
14.1.0 |
Examples
To configure the check:
<module name="Checker">
<module name="TreeWalker">
<module name="AvoidModuleImport"/>
</module>
</module>
Example:
import module java.base;
// violation above 'Using the 'import module' form of import should be avoided'
import module java.sql;
// violation above 'Using the 'import module' form of import should be avoided'
public class Example1 {
void getNames() {
List<String> names = new ArrayList<>();
names.add("foo");
names.add("bar");
System.out.println(names);
}
}
To configure the check to allow module imports for java.base and java.sql:
<module name="Checker">
<module name="TreeWalker">
<module name="AvoidModuleImport">
<property name="excludes" value="java.base, java.sql"/>
</module>
</module>
</module>
Example:
import module java.base;
import module java.sql;
public class Example2 {
void getNames() {
List<String> names = new ArrayList<>();
names.add("foo");
names.add("bar");
System.out.println(names);
}
}
To configure the check to allow at most one module import:
<module name="Checker">
<module name="TreeWalker">
<module name="AvoidModuleImport">
<property name="maxAllowedModuleImports" value="1"/>
</module>
</module>
</module>
Example:
import module java.base;
import module java.sql;
// violation above 'Only '1' module import is allowed per file.'
public class Example3 {
void getNames() {
List<String> names = new ArrayList<>();
names.add("foo");
names.add("bar");
System.out.println(names);
}
}
Example of Usage
Violation Messages
All messages can be customized if the default message doesn't suit you. Please see the documentation to learn how to.
Fully Qualified Name
com.puppycrawl.tools.checkstyle.checks.imports.AvoidModuleImportCheck
Use this fully qualified class name in configuration when an exact class reference is required.






