2017-06-21 83 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」;)