Я готовлю большую миграцию в JAVA8. Часть его настраивает checkstyle для правильной работы с конструкциями JAVA8. Я пытаюсь сохранить checkstyle, синхронизированный с инструментом автоформатирования по умолчанию в IntelliJ. К сожалению, он не принимает автоматическое выделение лямбда-выражений IntelliJ.Checkstyle и JAVA8 lambdas
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, чтобы не сломать старый код и принять это Автоформатирование схему?
EDIT: обновленный 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. Я закрою этот вопрос.