我正在准备大规模迁移到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版本需要修复的问题。我将关闭此问题。