java - OnlyOneReturn 无DD异常

标签 java pmd

@RequestMapping(value = "/product/baselist", method = RequestMethod.POST)
public ResponseEntity<Object> baseListProductFilters(@RequestBody final ObjectNode json) {
    LOGGER.debug("Gettig all product filters");
    try {
        final int offset = json.get("offset") == null ? OFFSET_AUTOCOMPL
                : json.get("offset").asInt(OFFSET_AUTOCOMPL);
        final int limit = json.get("limit") == null ? LIMIT_AUTOCOMPL : json.get("limit").asInt(LIMIT_AUTOCOMPL);

        return ResponseEntity.status(HttpStatus.OK)
                .body(filterService.getList(getUsername(), ResourceType.PRODUCT, offset, limit));
    } catch (Exception e) {
        LOGGER.error("Error getting product filter list: ", e);
        return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e);
    }
}

这是我的代码。我安装了 PMD 代码分析器。它建议我应该只有一个返回。所以我这样做了:

@RequestMapping(value = "/product/baselist", method = RequestMethod.POST)
public ResponseEntity<Object> baseListProductFilters(@RequestBody final ObjectNode json) {
    LOGGER.debug("Gettig all product filters");
    ResponseEntity<Object> toReturn;
    try {
        final int offset = json.get("offset") == null ? OFFSET_AUTOCOMPL
                : json.get("offset").asInt(OFFSET_AUTOCOMPL);
        final int limit = json.get("limit") == null ? LIMIT_AUTOCOMPL : json.get("limit").asInt(LIMIT_AUTOCOMPL);

        toReturn = ResponseEntity.status(HttpStatus.OK)
                .body(filterService.getList(getUsername(), ResourceType.PRODUCT, offset, limit));
    } catch (Exception e) {
        LOGGER.error("Error getting product filter list: ", e);
        toReturn = ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(e);
    }
    return toReturn;
}

不再有 OnlyOneReturn 违规,但出现“DD”异常。我的客户要求 OnlyOneReturn 不能被忽略。我有什么想法可以解决这个问题吗?

最佳答案

我作为 PMD 维护者的两分钱。

应谨慎对待有争议的规则集中的规则。确保添加每一个确实有意义。仅仅因为它是 PMD 的一部分就包括整个规则集通常不是一个好主意。我们正在努力建立更好的默认值/有更好的规则,但与此同时要小心。

DataflowAnomalyAnalysis 目前是一个糟糕的规则。

  • 并非所有异常都意味着存在问题/有意义。 UR 异常意味着代码甚至无法编译。 DU异常在代码中其实很常见。 DD 异常最多可能指向虚假分配,但并不一定意味着存在错误。
  • 该规则没有正确处理所有 Java 结构。 assert 未处理,for-each 未处理,try-with-resources 未正确处理...有很多 open issues on GitHub for this

我们确实计划最终对其进行改进(但目前不是首要任务,因为我们正在开发一些其他核心功能,我们认为这些功能对日常开发人员工作的影响要大得多)。

与此同时,您可能应该禁用该规则,或根据需要设置 add suppressions

如果您发现更多失败场景,请提交问题。

关于java - OnlyOneReturn 无DD异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44675993/

相关文章:

java - JPA:如何在运行时指定类对应的表名?

java - 为什么 setCursor() 不起作用?

java - 在构建和报告部分之间共享 Maven 插件配置

java - 如何通过正则表达式从 pmd 规则中排除类

java - 颜色字符串中的Java int十六进制

java - 如何让一个表中传递的数据不再显示在另一个表中

java - 将用 PMD 编写的规则转换为 Sonar 自定义规则

java - Autowiring 字段上的 PMD 异常 BeanMembersShouldSerialize

maven-plugin - maven-pmd-plugin 仅使用捆绑的规则集

java - 在java中按字母顺序排列二维数组