声纳更改此条件,使其不会始终评估为“true”。假阳性

时间:2017-01-26 16:35:30

标签: java sonarqube

我们的声纳正在发出Change this condition so that it does not always evaluate to "true"问题,我认为这是误报

    for (Path file: stream) {
        FileDetails fileDetails = getFileDetails(path.toString() + '/' + file.getFileName().toString(), file);
        if (fileDetails != null) {
            fileList.add(fileDetails);
        }
    }
    // Process the list of non null files
    ...

稍后在类

中定义的获取文件详细信息方法
private FileDetails getFileDetails(String absolutePathName, Path path) {
    FileDetails fileDetails = new FileDetails();
    fileDetails.setName(path.getFileName().toString());
    fileDetails.setAbsoluteName(absolutePathName);
    fileDetails.setDirectory(path.toFile().isDirectory());
    fileDetails.setFileStoreUri(fileStoreDetails.getUri());
    try {
        fileDetails.setSize(Files.size(path));
        fileDetails.setModifiedDate(new Date(Files.getLastModifiedTime(path).toMillis()));
    } catch (java.nio.file.AccessDeniedException e) {
        logger.info("Cannot get file details for " + path, e);
        fileDetails = null;
    } catch (IOException e) {
        // No need to throw a checked exception as we can't do anything with it.
        logger.error("Cannot get file details for " + path, e);
        throw new UncheckedIOException(e);
    }
    return fileDetails;
}

从我的阅读中,fileDetails很可能是非空的,但在某种情况下它将为null,因此检查。这里有一个我不知道的伎俩吗?

我们正在使用SonarQube 6.2,使用java插件的v4.4.0.8066

1 个答案:

答案 0 :(得分:2)

因此,java.nio.file.AccessDeniedExceptionIOException的子类,不会直接抛出。在查看了该函数之后,我们决定为拒绝访问返回null是不对的。所以我们删除了这个catch(保留了IOException catch)。这意味着该方法现在不能返回null。这使得像Sonar告诉我们的那样多余了