OnlyOneReturn没有DD异常

时间:2017-06-21 12:21:24

标签: 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&#39; -anomaly。我的客户要求OnlyOneReturn不被忽视。任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

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

应该明智地采取有争议的规则集中的规则。确保添加每个实际上是有意义的。包括整个规则集仅仅因为它是PMD的一部分通常是一个坏主意。我们正在努力建立更好的默认/有更好的规则,但同时要小心。

DataflowAnomalyAnalysis目前处于一个糟糕的规则。

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

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

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

如果您发现更多失败的情况,请提交问题。

答案 1 :(得分:1)

我建议使用ExceptionHandler来处理控制器中的错误情况。这样DD异常就会消失。

答案 2 :(得分:0)

答案是:什么问题/谁在乎?

我认为关于两个规则可能存在很少的代码,这就是为什么两者(“OnlyOneReturn”作为“DataflowAnomalyAnalysis”)都是Controversial Ruleset ..stating:< / p>

  

有争议的规则集包含的规则无论出于何种原因都被认为是有争议的。它们在这里被分开,以允许人们通过自定义规则集包含他们认为合适的内容。这个规则集最初是为了回应关于汤姆喜欢的不必要的构造规则的讨论而创建的,但大多数人真的不喜欢: - )

因此,在这种情况下,您必须决定您认为哪条规则更重要/适用。 (我通常坚持“OnlyOneReturn”;)