Checkstyle 和 JAVA8 lambda

Checkstyle and JAVA8 lambdas

我正在准备向 JAVA8 进行大规模迁移。其中一部分是配置 checkstyle 以正确使用 JAVA8 结构。我尝试使 checkstyle 与 IntelliJ 中的默认自动格式化工具保持同步。不幸的是,它不接受 lambda 表达式的自动 IntelliJ 缩进。

checkstyle.xml

<module name="Indentation">
     <property name="caseIndent" value="0"/>
</module>

代码:

public class Java8CheckstyleTest {
    public void java8Elements(String ala) {
        Collections.sort(names, (String a, String b) -> {
            return b.compareTo(a); // <<<25 line
        }); // <<<26 line
    }
}

Checkstyle 报告:

Java8CheckstyleTest.java:25: 'block' child have incorrect indentation level 12, expected level should be 16.

Java8CheckstyleTest.java:26: 'block rcurly' have incorrect indentation level 16, expected level should be 12.

如果我用新行和自动套用格式打破“})”:

public class Java8CheckstyleTest {
    public void java8Elements(String ala) {
        Collections.sort(names, (String a, String b) -> {
                    return b.compareTo(a); // <<<25 line
                } // <<<26 line
        ); 
    }
}

我得到:

Java8CheckstyleTest.java:25: 'block' child have incorrect indentation level 20, expected level should be 16.

Java8CheckstyleTest.java:26:'block rcurly' have incorrect indentation level 16, expected level should be 12.

我应该如何配置 checkstyle 才能不破坏旧代码并接受这些自动格式化方案?

编辑:我将 checkstyle 更新为 6.11.1,我发现问题几乎已解决。现在接受第一个代码。第二个生成报告:

Java8CheckstyleTest.java:32: error: 'block' child have incorrect indentation level 20, expected level should be one of the following: 12, 16.

Java8CheckstyleTest.java:33: error: 'block rcurly' have incorrect indentation level 16, expected level should be one of the following: 8, 12.

我认为这可能是必须在下一个 IntelliJ 版本中修复的问题。我会关闭这个问题。

添加:

  <dependency>
      <groupId>com.puppycrawl.tools</groupId>
      <artifactId>checkstyle</artifactId>
      <version>6.11.1</version>
  </dependency>

给maven checkstyle插件配置解决了一个问题。主线程中的详细信息。