2017-06-21 82 views
1
@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代码分析器。它暗示我应该只有一次返回。 “DD'-异常出现OnlyOne返回没有DD异常

@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违规,但是:所以我这样做。我的客户需要OnlyOneReturn不被忽略。任何想法如何解决这个问题?

+0

请考虑添加'pmd'标签,并删除'spring *'标签,因为这个问题不是spring相关的。 – xerx593

回答

2

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

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

DataflowAnomalyAnalysis是一个不太现实的规则。

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

我们确实计划最终改造它(但不是目前的头等大事,因为我们是致力于其他一些我们认为对日常开发工作产生更大影响的核心功能)。

与此同时,您应该或者禁用规则,或者根据需要禁用add suppressions

请提出问题,如果你发现更多的失败场景。

0

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

我觉得代码极少数几件就可以既规则存在,这就是为什么这两个(“OnlyOneReturn”作为“DataflowAnomalyAnalysis”)是Controversial Ruleset ..stating的一部分:

争论的规则集包含无论何种原因都被认为有争议的规则。他们在这里被分离出来,允许人们通过自定义规则集来包含他们认为合适的人。此规则集最初响应了UnnecessaryConstructorRule讨论创建了汤姆喜欢,但大多数人真的不喜欢:-)

因此,在这种情况下,你必须决定,其中规定,你认为更重要的/应用。 (我通常坚持“OnlyOneReturn”;)