AvoidModuleImport

Since Checkstyle 14.1.0

Description

Checks that there are no module imports.

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.

Parent Module

TreeWalker