Сонар неправильно сообщает Удалить это выражение, которое всегда оценивается как «истинно» - PullRequest
1 голос
/ 27 июня 2019

Если у меня есть этот код, сонар не жалуется:

if (null != myResponse) {
     // some code
}

Но если я поставлю одну строку кода выше

getEmptyListForNull(myResponse).forEach(this::method);

Тогда сонар сообщает об этой странной ошибке.Как гидролокатор узнает, что делает getEmptyListForNull, и это не имеет значения.

Очевидно, сонар думает, что код выглядит так:

myResponse.forEach(this::method);

Метод getEmptyListForNull - это простой метод, который делаетnull проверяет и возвращает пустой список, если это так.Нет другой аннотации или чего-то необычного.

Ответы [ 2 ]

3 голосов
/ 27 июня 2019

На самом деле SonarQube не знает о вашей функции.Это не о вашей функции.Речь идет о forEach ().

Если вы можете перебирать коллекцию с помощью .forEach () без исключения, это означает, что коллекция НЕ была нулевой.

import java.util.List;

public class NoFalsePositiveHere{

     public static void main(String []args){

        List<String> nullList = null;

        nullList.forEach(s -> System.out.println(s));

        if(nullList != null){
            System.out.println("Since an exception is already thrown on line 9,");
            System.out.println("this block is unreachable.");
            System.out.println("It means that,");
            System.out.println("if no exception was thrown on line 9,");
            System.out.println("You could see these lines on console.");
        }
     }
}

Если в строке 9 выдается исключение, строка 11 не выполняется.

Если в строке 9 не выдается исключение, это означает, что список не был нулевым.

0 голосов
/ 27 июня 2019

Было бы полезно немного пояснить ваш пример, но при поиске документов Sonar, https://rules.sonarsource.com/java/type/Bug/RSPEC-1145?search=expression, я нашел пример, который может быть очень похож на то, что вы делаете.

http://cwe.mitre.org/data/definitions/571.html

В примере, указанном в ссылке выше, в методе никогда не задана переменная.Поскольку я не могу увидеть, как работает ваш метод, я предполагаю, что Sonar обнаруживает что-то похожее в вашем коде.

Не могли бы вы отредактировать свой вопрос, чтобы немного подробнее понять, что делает ваша функция, а такжепроверить, происходит ли что-то подобное?

Я прошу прощения за то, что не просто комментирую;Моя репутация не позволяет этого, но я также хотел предоставить ссылки на сайты документации, поскольку чаще всего там можно найти хорошие предложения и ответы.

...