Checkstyle和JAVA8 lambdas

5

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

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'子元素缩进错误,应为16级,实际为12级。

Java8CheckstyleTest.java:26: 'block rcurly'子元素缩进错误,应为12级,实际为16级。

如果我用换行和自动格式化打断“})”:

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' 子元素缩进错误,缩进级别为20,期望的级别应该是16。
Java8CheckstyleTest.java:26:'block rcurly' 缩进级别错误,应该是16,期望的级别应该是12。
如何配置checkstyle以不破坏旧代码并接受这些自动格式化方案?
编辑:我将checkstyle更新到6.11.1版本,并且问题已经得到解决。第一段代码现在被正确接受。第二个产生报告:
Java8CheckstyleTest.java:32:错误:'block'子元素缩进错误,缩进级别为20,期望的级别应该是以下之一:12、16。
Java8CheckstyleTest.java:33:错误:'block rcurly'缩进级别错误,应该是16,期望的级别应该是以下之一:8、12。
我认为这可能是下一个IntelliJ版本需要修复的问题。我将关闭此问题。
1个回答

3

添加:

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

向Maven Checkstyle插件配置文件添加设置解决了一个问题。详情请参考主线程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接