2015-02-21 3 views
2

Могу ли я сделать Findbugs или любой другой анализатор кода, проверить, может ли метод, который может возвращать null, как @Nullable?Проверьте, нет ли метода "return null" и @Nullable

That't случае я хотел бы проверить:

// Third party library 
class Foo 
{ 
    // Static test should fail because it's not annotated as @Nullable 
    String get() 
    { 
     return null; 
    } 
} 
+3

Полезная ссылка, но на самом деле не дубликат. Я хотел бы проанализировать всю базу кода, которую я использую (включая устаревший код), а не просто проверять ее на лету в IDEA. –

+0

Отметьте мой последний комментарий к моему ответу, возможно он может вам помочь – esin88

ответ

1

Я считаю, что текущий инструмент не может сделать это из коробки, включая IntelliJ. Вам нужно будет написать обычную проверку FindBugs. У FindBugs есть некоторая логика для поддержки анализа невозврата.

Причина в том, что вы пытаетесь перепроектировать контракт по методу обратной связи. Аннотации Nullness являются частью контракта, поэтому они не могут и не должны выводиться из кода. Невозможно, даже теоретически, сказать, нужен ли программисту метод для возврата значений null или если это ошибка программирования. В зависимости от этого вам нужно будет исправить код, добавив аннотацию @Nullable или изменив тело метода так, чтобы он не смог вернуть null (и, вероятно, добавив @Nonnull).

FindBugs имеет некоторые annotations, которые вы можете использовать для указания значений по умолчанию на уровне пакетов. Затем он проверит, что все методы классов в этом пакете соответствуют вашему стандарту. Если вы этого не сделали, FindBugs предполагает, что вы установили @Nullable; так что, возможно, ваше дело уже разрешено.

+0

Да, использование по умолчанию - единственный способ, позволяющий инструменту анализа обнаружить отсутствующий Nullable. Применение значения по умолчанию указывает: я не хочу разрешать оригинальную семантику Java, где «String» говорит: «ОК, чтобы назначить null» * и * «это нормально для разыменования без проверки». В Eclipse вы бы в качестве последнего шага включили проверку * missing * NonNullByDefault. –

1

Да, вы можете. IntelliJ Idea имеет инструмент анализа статического кода. Вы можете найти инструкции here.

EDIT: Вы также можете запустить все проверки для своего кода в Idea (посмотрите here) или в автономном режиме с помощью средств командной строки (смотрите here).

+0

Смотрите мой комментарий по вопросу. –

+0

Добавил некоторые полезные ссылки в мой ответ, которые могут вам помочь. – esin88

+0

Как именно вы бы использовали IntelliJ для решения дела OP? Я считаю, что этого не может быть сделано, но я хотел бы видеть, что я ошибаюсь! –