Findbugs - «close () вызывается для значения, которое всегда равно нулю» - PullRequest
1 голос
/ 31 августа 2011

У меня есть этот блок кода

private void doSomething(Properties properties) throws XXException 
{
    PersistenceManager pm = null;        

    try {
        pm = new PersistenceManager(distributedDatabase, "PeriodHelper: insertPeriod");

        try {
            pm.create(Tables.MY_TABLE);
        } catch (ObjectAlreadyExistsException e) {
            logger.warn("Could not create table! - "+e.getMessage(), e);
            return;
        }

        pm.commit();
        return;
    } 
    catch (Exception e) {
        throw new XXException(e.getMessage(), e);
    }
    finally {
        if (pm != null) 
            pm.close();
    }
}

, о котором сообщает findbugs / sonar, затронуто

Correctness - close() invoked on a value that is always null
close() is being invoked on a value that is always null. If this statement 
is executed, a null pointer exception will occur. But the big risk here you
never close something that should be closed.
Key:    NP_CLOSING_NULL

но если вы посмотрите на код, объект pm при вызове метода close () всегда будет не нулевым. Кто-нибудь может объяснить, почему findbugs ошибается?

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Либо Findbugs просто не прав (не в первый раз) или он знает, что pm не может быть ненулевым здесь (в этом случае это будет вид сообщения о неправильной ошибке, он должен сказать "мертвый код" или "условие всегда ложно").

0 голосов
/ 31 августа 2011

Вы пытаетесь приложить if if, используя фигурные скобки?

if (pm!=null) {pm.close()};
...