SonarQube:更改此条件,使其不会始终评估为" false" (最后在javax.mail接收)

时间:2016-09-25 13:55:14

标签: java sonarqube javamail

为什么SonarQube会抱怨这部分代码?

SonarQube说: 更改此条件,以便它不会始终评估为" false"

然而,我似乎无法理解为什么这种情况总是错误的?事实上,实际上并非如此,我只是在调试模式下再次重新使用此部分并且它完美地运行,它确实进入内部,并且大多数情况下条件都不是假的。

这是代码部分:

    } finally {
        if ((inboxFolder != null) && (inboxFolder.isOpen())) {
            try {
                inboxFolder.close(true);
            } catch (MessagingException e) {
                log.error(e.getMessage(), e);
            }
        }
        if ((store != null) && (store.isConnected())) {
            try {
                store.close();
            } catch (MessagingException e) {
                log.error(e.getMessage(), e);
            }
        }
    }

当尝试使用javax.email接收电子邮件时,它是try-catch的最后一部分,如果有条件,它会抱怨这两种情况。

这是这些变量的声明,它们在try部分实例化:

Folder inboxFolder = null;
Store store = null;

为什么SonarQube抱怨这个?

1 个答案:

答案 0 :(得分:1)

我们遇到类似的误报,产生错误'更改此条件,以便它不会总是评估为" false"'。 有问题的代码如下:

  public Properties getProperties() {
  Properties properties = new Properties();
  InputStream in = getClass().getResourceAsStream("/my.properties");
  IllegalStateException streamCloseError = null;
  try {
    if (in != null) {
      try {
        properties.load(in);
      } catch (Exception e) {
        //fall through...
      }
    }
  } finally {
    try {
      if (in != null) {
        in.close();
      }
    } catch (IOException e) {
      streamCloseError = new IllegalStateException(e);
    }
  }
  if (streamCloseError != null) {
    throw streamCloseError;
  }
  return properties;
}

错误行在if (streamCloseError != null) {行上。 在阅读了有关使用上述try-with-resources之后,我们清理了这段代码。

使用此规则是否可以检测它是否与"关闭"如果有,请提供使用try-with-resources的提示?

感谢您考虑这一点。