声纳没有考虑注释@Contract

时间:2018-04-16 09:16:20

标签: java intellij-idea sonarqube sonarlint sonarlint-intellij

如果我们有代码:

@Contract("null, _, _ -> fail")
static void ifNull(Object object, ErrorType errorType, Object... args) throws ServiceException {
    if (object == null) {
        ExceptionFactory.throwServiceException(errorType, args);
    }
}

private boolean checkSeqValue(Sequence sequence, @Nonnull Number value) {
...
}

和某处:

ifNull(value, ErrorType.NOT_FOUND, "Value for a sequence", "name = " + seqName);
if (checkSeqValue(sequence, value)) {
        result = value;
}

然后SonarLint插件显示一个严重错误:

  

squid:S2637“@NonNull”值不应设置为null

for checkSeqValue此调用的参数2标记为javax.annotation.Nonnull,但是传递了

直接检查:

    if (value == null) {
        throw new ServiceException();
    }            
    if (!isNeedCheck || checkSeqValue(sequence, value)) {
        result = value;
    }

不会发出任何声纳错误。

是否有人知道声纳如何考虑@Contract注释?

SonarLint插件版本3.3.0.2482

SonarQube 6.0

Intellij idea 2018.1.1

非常感谢

0 个答案:

没有答案