«NullPointerException» может быть брошено;«контекст» здесь можно обнулять - PullRequest
0 голосов
/ 22 декабря 2018

Итак, у меня проблема с SonarQube, которую я не могу решить.

if (result instanceof AsyncResult) {
    // Make sure handle async has been called
    context.handleAsync();
    Result newResult = context.controllerReturned();
    if (newResult != null) {
        result = newResult;
    }
 }

Ответы [ 3 ]

0 голосов
/ 22 декабря 2018

Ваша проблема, вероятно, здесь:

context.handleAsync();

Сонар говорит (учитывая контекст [...]), что где-то в вашем коде вы делаете null проверку на context, ноне в этой части:

if (null == context) {
  // bla bla bla
}
...
context.handleAsync(); // yes, but context was tested for null, so it can be null.

Либо перепроверьте контекст при его использовании, либо удалите проверку null, либо не пройдите в начале вашего метода:

if (null == context) {
  throw new IllegalStateException("context is null");
}

Или лучше:

  void yourMethod(Context context) {
    Objects.requireNonNull(context, "context");
    ... 
  }

Метод requireNonNull вызывается как предварительное условие;его единственная цель - проверить наличие нулей и предоставить (если не опустить) сообщение по умолчанию.

0 голосов
/ 22 декабря 2018

Попробуйте:

if (result instanceof AsyncResult) {
        if (context == null) {
            //appropriate error handling
        } else {
            // Make sure handle async has been called
            context.handleAsync();
            Result newResult = context.controllerReturned();
            if (newResult != null) {
                result = newResult;
            }
        }
}

В качестве альтернативы вы можете убедиться, что при инициализации context он никогда не сможет получить значение null.Вы также можете посмотреть аннотацию @NotNull из JSR303, если context является параметром метода.

0 голосов
/ 22 декабря 2018

SonarQube утверждает, что context может быть null здесь.Если вы знаете, что это неверно, вы можете просто подавить это предупреждение как ложное срабатывание.В противном случае вам следует явно проверить, не является ли context не null:

if (result instanceof AsyncResult && context != null) {
    // Here -------------------------^

    // Make sure handle async has been called
    context.handleAsync();
    Result newResult = context.controllerReturned();
    if (newResult != null) {
        result = newResult;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...