Nano Hash - криптовалюты, майнинг, программирование

Как подавить предупреждения FindBugs для полей или локальных переменных

Я хотел бы подавить предупреждения FindBugs для определенных полей или локальных переменных. FindBugs документирует, что целью может быть тип, поле, метод, параметр, конструктор, пакет для его аннотации edu.umd.cs.findbugs.annotations.SuppressWarning [1]. Но у меня не получается аннотировать поле, только когда я аннотирую метод, предупреждение подавляется.

Мне кажется, что аннотирование всего метода - это слишком много. Есть ли способ подавить предупреждения в определенных полях? Есть еще один связанный с этим вопрос [2], но нет ответа.

[1] http://findbugs.sourceforge.net/manual/annotations.html

[2] Отключить предупреждения FindBugs в Eclipse

Демо-код:

public class SyncOnBoxed
{
    static int counter = 0;
    // The following SuppressWarnings does NOT prevent the FindBugs warning
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
    final static Long expiringLock = new Long(System.currentTimeMillis() + 10);

    public static void main(String[] args) {
        while (increment(expiringLock)) {
            System.out.println(counter);
        }
    }

    // The following SuppressWarnings prevents the FindBugs warning
    @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DL_SYNCHRONIZATION_ON_BOXED_PRIMITIVE")
    protected static boolean increment(Long expiringLock)
    {
        synchronized (expiringLock) { // <<< FindBugs warning is here: Synchronization on Long in SyncOnBoxed.increment()
            counter++;
        }
        return expiringLock > System.currentTimeMillis(); // return false when lock is expired
    }
}

  • Может быть, дубликат: Есть ли способ игнорировать одиночное предупреждение FindBugs? 24.01.2013
  • Не совсем. Примеры также работают только на уровне метода. Наверное, FindBugs работает только так. Но почему в документации по аннотации SuppressWarning говорится, что ее Target также может быть Field. 24.01.2013
  • Хуже того, при подавлении предупреждений в Scala (по крайней мере, для Find-Sec-Bugs, который является плагином безопасности для FindBugs) иногда аннотация @SuppressFBWarnings работает только на уровне класса, что определенно неприемлемо. 26.07.2016
  • Предупреждение! Код, который синхронизируется с примитивными оболочками, скорее всего, сломается в будущем выпуске Java, выбросив IllegalMonitorStateException! В рамках проекта Valhalla, который добавит пользовательские типы значений в Java, примитивные классы-оболочки будут изменены, чтобы стать типами значений, и синхронизация с ними больше не будет возможна. 13.11.2020

Ответы:


1

@SuppressFBWarnings в поле подавляет только предупреждения findbugs, сообщаемые для этого объявления поля, а не каждое предупреждение, связанное с этим полем.

Например, это подавляет предупреждение «Поле только когда-либо установлено в нулевое значение»:

@SuppressFBWarnings("UWF_NULL_FIELD")
String s = null;

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

Примечание. @SuppressWarnings был помечен как устаревший в пользу @SuppressFBWarnings

24.01.2013
  • Объяснение подавляет [...] не каждое предупреждение, связанное с этим полем, кажется правильным. Отмечу этот ответ как правильный. Предупреждение для других читателей: я не смог подавить UWF_NULL_FIELD в поле, как объяснил TimK. Так что, вероятно, нужно всегда аннотировать на уровне метода. 25.01.2013
  • И не забывайте, что @SuppressWarnings - это аннотация findbugs от: ‹dependency› ‹groupId› com.google.code.findbugs ‹/groupId› ‹artifactId› аннотаций ‹/artifactId› ‹version› 2.0.2 ‹/version› / зависимость › 28.02.2014
  • Обратите внимание, что @SuppressWarnings был устаревшим и заменен с @SuppressFBWarnings. 31.10.2014
  • Ах, не рекомендуется для версии ‹findbugs.sourceforge.net›. Эта аннотация в пакете java.lang все еще хороша (java 8). 30.01.2015
  • @Ben Похоже, у меня работает eclipse с java.lang.SuppressWarnings. Мне не удалось найти проверенный источник, чтобы объяснить, почему. 04.02.2016
  • java.lang.SuppressWarnings не может работать. Он сохраняет исходный код, поэтому он не виден для поиска ошибок. 22.03.2016
  • строительные инструменты никогда не должны вмешиваться в бизнес-код. поэтому добавление аннотаций - плохая идея. 05.12.2017

  • 2

    Проверьте http://findbugs.sourceforge.net/manual/filter.html#d0e2318 Существует тег Local, который можно использовать с тегом Method. Здесь вы можете указать, какую ошибку следует исключить для конкретной локальной переменной. Пример:

    <FindBugsFilter>
      <Match>
            <Class name="<fully-qualified-class-name>" />
            <Method name="<method-name>" />
            <Local name="<local-variable-name-in-above-method>" />
            <Bug pattern="DLS_DEAD_LOCAL_STORE" />
      </Match>
    </FindBugsFilter>
    
    29.05.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..