【发布时间】:2018-07-10 11:23:40
【问题描述】:
我在 Java 项目中使用 SonarQube 6.7.1 LTS,并使用 Maven 声纳插件对其进行分析。
我有以下代码示例,它在方法 testGregorianCalendar2 中发现了一个 S2637 问题:
public static final @Nonnull Calendar testGregorianCalendar1() {
return GregorianCalendar.getInstance();
}
public static final @Nonnull Calendar testGregorianCalendar2() {
return setTimeZone2(GregorianCalendar.getInstance());
}
public static final Calendar setTimeZone2(final Calendar inputCalendar) {
if (null == inputCalendar) {
return null;
}
return inputCalendar;
}
public static final @Nonnull Calendar testGregorianCalendar3() {
return setTimeZone3(GregorianCalendar.getInstance());
}
public static final Calendar setTimeZone3(final Calendar inputCalendar) {
return inputCalendar;
}
在方法
testGregorianCalendar1和testGregorianCalendar3中,Sonar 没有发现该问题。 我认为在testGregorianCalendar2中应该也找不到,或者应该在testGregorianCalendar*的所有3种方法中都找到,因为:
Sonar 应该自行决定GregorianCalendar.getInstance() 是否可以返回 null。
如果是,所有 3 种方法都可以返回 null,Sonar 应该在所有这些方法中找到问题。
如果否,则调用setTimeZone2 方法时使用非空值,然后它将返回非空值,因此testGregorianCalendar2 将返回非空值。
那里出了什么问题?
【问题讨论】: