Skip to content

[🧬 Duplicate Code Report 🔍] Duplicate Code: Response building pattern in SecurityDependencyDemoController #111

@github-actions

Description

@github-actions

🔍 Duplicate Code Detected: Repeated Response-Building Pattern

Analysis of latest commit on main

Assignee: @copilot

Summary

Los tres métodos de SecurityDependencyDemoController repiten el mismo bloque de construcción de respuesta usando LinkedHashMap, con las claves mode y dependency seguidas de datos específicos. Este patrón podría extraerse a un método auxiliar.

Duplication Details

Pattern: Repeated LinkedHashMap response construction

  • Severity: Low
  • Occurrences: 3
  • Locations:
    • src/main/java/com/example/demo/controller/SecurityDependencyDemoController.java (lines 24-29)
    • src/main/java/com/example/demo/controller/SecurityDependencyDemoController.java (lines 38-42)
    • src/main/java/com/example/demo/controller/SecurityDependencyDemoController.java (lines 49-53)
  • Code Sample:
    // Instance 1 (lines 24-29)
    Map<String, Object> response = new LinkedHashMap<>();
    response.put("mode", "exploitable");
    response.put("dependency", "org.apache.commons:commons-text:1.9");
    response.put("input", template);
    response.put("resolved", resolved);
    return response;
    
    // Instance 2 (lines 38-42)
    Map<String, Object> response = new LinkedHashMap<>();
    response.put("mode", "non-exploitable");
    response.put("dependency", "commons-collections:commons-collections:3.1");
    response.put("entries", unmodifiable);
    return response;
    
    // Instance 3 (lines 49-53)
    Map<String, Object> response = new LinkedHashMap<>();
    response.put("mode", "non-exploitable");
    response.put("dependency", "com.google.guava:guava:24.1.1-jre");
    response.put("entries", demo);
    return response;

Impact Analysis

  • Maintainability: Añadir o renombrar una clave de respuesta requiere cambios en 3 sitios distintos.
  • Bug Risk: Bajo — los datos son demo/estáticos, pero un cambio estructural en el formato de respuesta podría olvidarse en alguno de los métodos.
  • Code Bloat: 18 líneas de código repetido en el mismo controlador.

Refactoring Recommendations

  1. Extraer método auxiliar privado buildResponse

    • Crear un método privado en el mismo controlador:
      private Map<String, Object> buildResponse(String mode, String dependency, Map<String, Object> extra) {
          Map<String, Object> response = new LinkedHashMap<>();
          response.put("mode", mode);
          response.put("dependency", dependency);
          response.putAll(extra);
          return response;
      }
    • Estimated effort: < 1 hora
    • Benefits: Única fuente de verdad para la estructura de respuesta; facilita añadir/renombrar claves.
  2. Usar un DTO o record de Java 14+ como alternativa más tipada:

    record DemoResponse(String mode, String dependency, Map<String, Object> data) {}

Implementation Checklist

  • Revisar los hallazgos
  • Extraer método auxiliar buildResponse
  • Actualizar los 3 métodos para usar el auxiliar
  • Verificar que los tests existentes siguen pasando

Analysis Metadata

  • Analyzed Files: 9 archivos Java en src/main/
  • Detection Method: Semantic code analysis
  • Analysis Date: 2026-06-16

Generated by Duplicate Code Detector · sonnet46 756.3K ·

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 18, 2026, 2:12 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