缩进检查不能正确处理语句标签

时间:2013-08-19 07:10:10

标签: java indentation checkstyle

checkstyle我已启用缩进检查。我遇到了一个奇怪的问题。

除了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缩进的重复检查。

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

1 个答案:

答案 0 :(得分:1)

这是IndentationCheck的限制。标签缩进被硬编码为比树中此时的正常缩进小一个级别(通过查看Checkstyle 5.6 sources进行验证)。下一个标记,即左大括号,或者,如果省略大括号,则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内置了一个很好的格式化程序。