1

Indentationcheckstyleのチェックを有効にしました。私はそれで奇妙な問題を抱えています。

チェックは、以外のすべてに対して正常に機能しています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 にすると、次のような警告が 1 つ表示されるはずです。

- 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、常に 1 つまたは 2 つの警告が表示されます。

2の異なるIndent Level.

1 回のチェックで 2 つの警告を受け取るにはどうすればよいですか? この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

これはIndentationCheckの制限です。ラベルのインデントは、ツリーのこの時点で通常のインデントよりも 1 レベル少なくなるようにハードコーディングされています (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 に答える