Skip to content

[🧬 Duplicate Code Report 🔍] Duplicate Code: Patrón Response Builder en SecurityDependencyDemoController #99

@github-actions

Description

@github-actions

Análisis del commit b16c75a

Resumen

Los tres métodos endpoint de SecurityDependencyDemoController repiten el mismo patrón de construcción de respuesta: crear un LinkedHashMap, insertar las claves "mode" y "dependency", y retornar el mapa. Además, los métodos commonsCollectionsNonExploitable y guavaNonExploitable son casi idénticos en su estructura completa.

Detalles de la Duplicación

Patrón: LinkedHashMap Response Builder

  • Severidad: Media
  • Ocurrencias: 3
  • Ubicaciones:
    • src/main/java/com/example/demo/controller/SecurityDependencyDemoController.java (líneas 24–29)
    • src/main/java/com/example/demo/controller/SecurityDependencyDemoController.java (líneas 38–42)
    • src/main/java/com/example/demo/controller/SecurityDependencyDemoController.java (líneas 49–53)
  • Ejemplo de código duplicado:
    Map<String, Object> response = new LinkedHashMap<>();
    response.put("mode", "...");
    response.put("dependency", "...");
    response.put("entries", ...);
    return response;

Métodos casi idénticos

commonsCollectionsNonExploitable (líneas 32–43) y guavaNonExploitable (líneas 45–54) siguen la misma estructura: crear datos locales → construir el mapa de respuesta → retornar. La única diferencia son los valores concretos de "dependency" y "entries".

Análisis de Impacto

  • Mantenibilidad: Añadir o renombrar un campo de respuesta requiere modificar 3 métodos independientes
  • Riesgo de bugs: Se podrían introducir inconsistencias de nombres o tipos de forma independiente en cada método
  • Código redundante: ~15 líneas de código repetido que podrían reducirse a un único método utilitario

Recomendaciones de Refactoring

  1. Extraer un método helper privado

    private Map<String, Object> buildDemoResponse(String mode, String dependency, String entriesKey, Object entries) {
        Map<String, Object> response = new LinkedHashMap<>();
        response.put("mode", mode);
        response.put("dependency", dependency);
        if (entries != null) response.put(entriesKey, entries);
        return response;
    }
    • Esfuerzo estimado: 30 min
    • Beneficios: Un único lugar para modificar la forma de la respuesta; métodos más limpios
  2. Usar un record de Java

    • Crear un record DemoResponse con campos mode, dependency y entries
    • Beneficios: Type-safe; más fácil de serializar; autodocumentado

Checklist de Implementación

  • Revisar los hallazgos de duplicación
  • Priorizar las tareas de refactoring
  • Crear plan de refactoring
  • Implementar cambios
  • Actualizar tests
  • Verificar que no se rompe ninguna funcionalidad

Metadatos del Análisis

  • Archivos analizados: 8 archivos fuente (excluidos tests y workflows)
  • Método de detección: Análisis semántico de código
  • Commit: b16c75a
  • Fecha de análisis: 2026-06-10

Generated by Duplicate Code Detector · sonnet46 826K ·

Add this agentic workflows to your repo

To install this agentic workflow, run

gh aw add githubnext/agentics/workflows/duplicate-code-detector.md@298f992955146a6731d380a9de808e17861708e5
  • expires on Jun 12, 2026, 1:34 PM UTC

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions