1

checkstyle我启用了对Indentation的检查。我遇到了一个奇怪的问题。

该检查对除statement label.

我有如下代码片段:

    public void doIt(int k) {
        for (int i = 0; i < k; i++){
           search:{
                    for (int j = 0; j < i; j++){
                    if (j == i){
                        break search;
                    }
                }
            }
        }
    }

缩进级别设置为 4。

现在,如果我把它放在第statement label (search)11 级,它应该给出一个警告:

- label child at indentation level 11 not at correct indentation, 12

但问题是,它Multiple markers在那一行给出:

- label child at indentation level 11 not at correct indentation, 12
- label child at indentation level 11 not at correct indentation, 8

所以,无论我在哪个级别缩进label,总会有一个/两个警告。

没有启用对两个不同的缩进的重复检查Indent Level

一次检查如何获得两个警告?如何解决这个问题?

4

1 回答 1

1

这是IndentationCheck的限制。标签缩进被硬编码为比树中此时的正常缩进低一级(通过查看 Checkstyle 5.6源代码进行验证)。下一个标记,即左大括号,或者,如果您省略了大括号,则 for 语句必须处于预期级别。因此,您可以像这样格式化代码而不会出现错误:

public void doIt(int k) {
    for (int i = 0; i < k; i++){
    search:
        for (int j = 0; j < i; j++){
            if (j == i){
                break search;
            }
        }
    }
}

这当然是个人品味的问题,但我不喜欢它。我建议不要使用 Checkstyle 来检查格式,而是使用自动代码格式化程序。例如,Eclipse 内置了一个不错的格式化程序。

于 2013-09-02T17:58:32.257 回答