Может ли модуль CheckStyle NeedBraces работать с вложенными блоками if/else?

Мы используем CheckStyle для обеспечения соблюдения наших стандартов стиля. Одним из правил стиля, которые мы решили включить, был модуль NeedBraces.

NeedBraces указывает, что каждый оператор типа блока (например, if , else, for) должны иметь открывающую и закрывающую фигурные скобки. Однако, насколько я могу судить, он работает не совсем корректно.

Этот пример вызовет ошибку CheckStyle.

    if (true)
    {
        System.out.println("20");   
    }
    else
        System.out.println("30");

Потому что в случае else нет фигурных скобок. Однако следующий пример не вызывает ошибку CheckStyle.

    if (true)
    {
        System.out.println("20");   
    }
    else
        if (true)
        {
            System.out.println("30");
        }

Это должно было потерпеть неудачу из-за отсутствия фигурных скобок в случае else, но checkstyle позволяет пройти. После двойной проверки документации я не могу найти причину, по которой это работает неправильно.

Итак... Может ли модуль CheckStyle "NeedBraces" работать с вложенными блоками if/else? Есть идеи?


Ответ на этот вопрос требует еще один вопрос: существует ли правило помечать указанный выше нежелательный код как нарушение?


person Justin Standard    schedule 20.12.2008    source источник


Ответы (2)


Я считаю, что это исключение, потому что, несмотря на странный формат, у вас есть «иначе, если». Это не должно заставлять вас ставить фигурные скобки вокруг «если» в этом случае, потому что в итоге вы получите «... else { if { ... } }

Ваш код должен быть отформатирован:

if (true)
{
    System.out.println("20");   
}
else if (true)
{
    System.out.println("30");
}
person Lawrence Dol    schedule 20.12.2008
comment
Именно это и происходило. Виноват форматировщик Eclipse (простое решение). Интересно, есть ли правило checkstyle, запрещающее перевод строки между if и else. - person Justin Standard; 22.12.2008

В первом примере, если вы попытаетесь добавить еще один оператор в свой блок else, вам нужно будет поставить фигурные скобки. С другой стороны, во втором примере вы добавите оператор внутри скобки. Я считаю, что это причина, по которой CheckStyle показывает ошибку в первом, потому что он подвержен ошибкам. Есть вероятность, что в конечном итоге вы добавите оператор без фигурных скобок, когда вы действительно хотите, чтобы это было частью else, а не снаружи.

person Adeel Ansari    schedule 20.12.2008