@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);
    }
}

Entonces aquí está mi código. Tengo instalado el análisis de código PMD. Me sugiere que debería haber SOLO UN REGRESO. Entonces hice esto:

@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;
}

No hay más violación de OnlyOneReturn pero aparece la anomalía 'DD'. Mi cliente requiere que OnlyOneReturn no sea ignorado. ¿Alguna idea de cómo puedo resolver este problema?

1
Kristó Zsolt 21 jun. 2017 a las 15:21

3 respuestas

La mejor respuesta

Mis dos centavos como mantenedor de PMD.

Las reglas en el controvertido conjunto de reglas deben tomarse juiciosamente. Asegúrese de que realmente tenga sentido agregar cada uno. Incluir todo el conjunto de reglas solo porque es parte de PMD es generalmente una mala idea. Estamos trabajando para construir mejores valores predeterminados / tener mejores reglas, pero mientras tanto, tenga cuidado.

DataflowAnomalyAnalysis es una regla deficiente en la actualidad.

  • No todas las anomalías significan que hay un problema / tiene sentido. Las anomalías UR significan que el código ni siquiera se compila. Las anomalías de DU son realmente comunes en el código. Las anomalías DD pueden, en el mejor de los casos, señalar tareas espurias, pero no necesariamente significan que haya un error tampoco.
  • La regla no maneja adecuadamente todas las construcciones de Java. assert no se maneja, for-each no se maneja, try-with-resources no se maneja correctamente ... Hay un montón de problemas abiertos en GitHub para esto

Planeamos renovarlo eventualmente (pero no es una prioridad principal en este momento, ya que estamos trabajando en alguna otra funcionalidad central que creemos que tiene un impacto mucho mayor en el trabajo diario del desarrollador).

Mientras tanto, probablemente debería deshabilitar la regla o agregar supresiones según sea necesario.

Envíe los problemas si encuentra más escenarios fallidos.

2
Johnco 21 jun. 2017 a las 14:57

La respuesta es: ¿Qué problema / a quién le importa?

Creo que pueden existir muy pocas piezas de código con respecto a las reglas ambas , es por eso que tanto ("OnlyOneReturn" como "DataflowAnomalyAnalysis") son parte de Conjunto de reglas controvertidas.. indicando:

El conjunto de reglas controvertidas contiene reglas que, por cualquier razón, se consideran controvertidas. Se separan aquí para permitir que las personas lo incluyan como mejor les parezca mediante conjuntos de reglas personalizados. Este conjunto de reglas se creó inicialmente en respuesta a las discusiones sobre UnnecessaryConstructorRule que le gusta a Tom pero a la mayoría de la gente realmente no le gusta :-)

Entonces, en este caso, tendría que decidir qué regla considera más importante / aplicable. (Normalmente me quedo con "OnlyOneReturn";)

0
xerx593 21 jun. 2017 a las 13:07

Sugeriría usar {{ X0}} para manejar el caso de error en su controlador. De esa forma, la anomalía DD desaparecerá.

1
luboskrnac 21 jun. 2017 a las 12:35