Предупреждение @Nullable и SonarQube «Условно выполняемые блоки должны быть доступны»

Пакет имеет следующий package-info.java:

@ParametersAreNonnullByDefault
package foo;
import javax.annotation.ParametersAreNonnullByDefault;

Класс имеет следующий метод:

private static String toIsoString(@Nullable Instant dateTime) {
  return dateTime == null ? null : dateTime.toString();
}

На что SonarQube (версия 6.2, SonarJava 4.14.0.11784) выдает следующее предупреждение (squid:S2583):

введите описание изображения здесь

Как я могу убедить SonarQube, что код действительно правильный?

Интересно, что плагин SonarLint (3.0.0.2041) в Idea не выдает такое же предупреждение.


person maximdim    schedule 19.10.2017    source источник
comment
Может быть проверить, откуда это вызывается? Возможно, вы обнаруживаете, что вы всегда передаете null в метод.   -  person matt helliwell    schedule 19.10.2017


Ответы (2)


Судя по всему, эта проблема была вызвана тем, что мы использовали sonar-scanner без указания sonar.java.libraries. Поскольку это многомодульный проект maven, нам было непонятно, как правильно указать sonar.java.libraries.

Николас Перу из SonarSource предложил использовать плагин sonar maven вместо sonar-scanner, поскольку у плагина есть доступ к построению пути к классам проекта. Действительно, это решило эту проблему для нас.

person maximdim    schedule 07.11.2017
comment
Добавление ссылки на ветку ggroup, относящуюся к этому заключению: groups.google.com/forum/ #!topic/sonarqube/yHH8IQ6Hhcw - person benzonico; 07.11.2017

JavaDoc @Nullable говорит (выделено мной)

Эта аннотация полезна в основном для переопределения аннотации Nonnull. Инструменты статического анализа обычно должны обрабатывать аннотированные элементы так, как если бы у них не было аннотаций, если только они не настроены на минимизацию ложноотрицательных результатов.

Соответственно, SonarJava игнорирует аннотацию.

Если вы хотите оспорить действия, предпринятые в SonarJava, откройте обсуждение< /а> :-)

person G. Ann - SonarSource Team    schedule 20.10.2017
comment
Я согласен с тем, что если присутствует только аннотация Nullable, ее можно игнорировать, поскольку по умолчанию методы могут принимать нулевые аргументы в Java. Однако в этом случае аннотация на уровне пакета указывает, что по умолчанию аргументы не могут быть нулевыми, а значение «Nullable» для определенного аргумента переопределяет это значение по умолчанию. Пожалуйста, посмотрите в javadoc для 'javax.annotation.ParametersAreNonnullByDefault', в котором говорится: Эта аннотация может быть применена к пакету, классу или методу, чтобы указать, что параметры метода в этом элементе не равны нулю по умолчанию, если нет... Явная нуль аннотация - person maximdim; 20.10.2017
comment
Сделанный. Спасибо. groups.google.com/forum/#!topic/sonarqube/yHH8IQ6Hhcw - person maximdim; 20.10.2017
comment
Вы процитировали Javadoc для версии FindBugs @Nullable. В FindBugs есть безумное определение @Nullable, которое отличается от любого другого инструмента. FindBugs не имеет права указывать, что должны делать другие инструменты статического анализа, поэтому следует игнорировать выделенную жирным шрифтом часть вашей цитаты. - person mernst; 07.11.2017
comment
Downvoters: Я заявил, что делает правило. Если вы хотите оспорить действия, предпринятые в SonarJava, откройте обсуждение в группе Google SonarQube. - person G. Ann - SonarSource Team; 14.11.2017