Как заставить IntelliJ IDEA понять мой метод проверки на ноль?

У меня есть метод, в котором параметр помечен аннотацией @Nonnull. Код, который вызывает метод, должен проверить, является ли значение нулевым. Вместо простой проверки x != nullон вызывает служебный метод другого класса. (В реальном коде служебный метод также проверяет, является ли это пустой строкой).

Моя проблема заключается в том, что Intellij Idea показывает предупреждение проверки при вызове метода Nonnull, в котором говорится, что моя переменная "может быть нулевой". Я знаю, что он не может быть нулевым из-за проверки служебного метода - как я могу сообщить об этом инспектору?

Поскольку это немного абстрактно, вот минимальный пример того, что я имею в виду:

package org.ethelred.ideatest;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

/**
 * tests annotations
 */
public class AnnotationChecker
{
    public static void main(String[] args)
    {
        String x = null;
        if(args.length > 0)
        {
            x = args[0];
        }

        if(!isNull(x))
        {
            useObject(x);
        }

        if(x != null)
        {
            useObject(x);
        }
    }

    public static boolean isNull(@CheckForNull Object o)
    {
        return o == null;
    }


    public static void useObject(@Nonnull Object o)
    {
        System.out.println(o);
    }
}

Здесь используются аннотации JSR 305.

В этом примере в первомвызове useObjectIntellij помещает предупреждение в параметр xо том, что «Аргумент 'x' может быть нулевым». Во втором вызове предупреждения нет.

6
задан Matt Hurne 17 May 2012 в 14:50
поделиться