Предупреждения о неиспользованных результатах методов без побочных эффектов в IntelliJ Idea

Когда я не присваиваю результат метода BigDecimal.divide() переменной, я получаю приятное предупреждение от IntelliJ Idea:

Результат BigDecimal.divide() игнорируется.

Могу ли я каким-то образом получить такое же предупреждение для своих собственных (без побочных эффектов) функций? Что-то вроде назначения аннотации Java для моей функции.


person Martin Vseticka    schedule 13.12.2016    source источник


Ответы (1)


Это проверка "Результат вызова метода игнорируется". По умолчанию он сообщает только о нескольких специальных методах, включая все методы java.lang.BigDecimal. В конфигурации проверки вы можете добавить другие классы и методы, о которых следует сообщать таким образом.

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

Флажок «Сообщать обо всех проигнорированных небиблиотечных вызовах» выбирает все классы в вашем проекте.

Если вы хотите использовать аннотации, вы можете аннотировать отдельные методы или целые классы с помощью JSR 305. аннотация

javax.annotation.CheckReturnValue

Начиная с IDEA 2016.3 вы даже можете использовать аннотацию, подверженную ошибкам.

com.google.errorprone.annotations.CanIgnoreReturnValue

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

import javax.annotation.CheckReturnValue;
import com.google.errorprone.annotations.CanIgnoreReturnValue;

@CheckReturnValue
class A {
  String a() { return "a"; }

  @CanIgnoreReturnValue
  String b() { return "b"; }

  void run() {
    a(); // Warning
    b(); // No warning
  }
}
person Ingo Kegel    schedule 13.12.2016
comment
Спасибо за подробный ответ! Удачного кодирования в 2017 году :-) - person Martin Vseticka; 13.12.2016
comment
Я попробовал ваш пример, но CanIgnoreReturnValue, похоже, не подавляет предупреждение в IntelliJ IDEA 2018.2.2. - person Per Mildner; 06.09.2018
comment
@PerMildner: важно, чтобы вы использовали CanIgnoreReturnValue из пакета Errorprone. Другие CanIgnoreReturnValues в данный момент не поддерживаются. См. youtrack.jetbrains.com/issue/IDEA-221360. - person Eduard Wirch; 26.08.2019