为什么 Checkstyle 不能将 import 语句之后但 class 声明之前的空行识别为违规?

package b.pi.persistence.hibernate;

import java.lang.String;



// ^^^ much space! Why is the above not a violation of EmptyLineSeparator
public class CheckstyleExample {

  ...
}

声明了以下检查:
<module name="EmptyLineSeparator">
  <property name="allowNoEmptyLineBetweenFields" value="true"/>
  <property name="allowMultipleEmptyLines" value="false"/>
</module>

最佳答案

这是因为缺乏测试和代码问题。

通常,此检查会验证某些标记上方是否只有一个空行。当 importpackage 上方有多个不必要的空格时,它运行良好。当检查到达 class 声明时,它也会验证上面的行,但是......

  • EmptyLineSeparatorCheck.java#L214 行的下一个兄弟节点是为 class token 获得的,它是 null ,因为在文件
  • 中注意到 else 与这个类处于同一级别
  • 因为下一个兄弟是 null 整个验证在 EmptyLineSeparatorCheck.java#L216
  • 行被跳过

    这个错误是作为 checkstyle/checkstyle#2067 提交的,希望在 Checkstyle 6.11 中修复。

    关于Checkstyle EmptyLineSeparator 在类声明之前不会在多个空行上失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32332886/

    10-12 13:48