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
-
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
-
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
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
Análisis del commit
b16c75aResumen
Los tres métodos endpoint de
SecurityDependencyDemoControllerrepiten el mismo patrón de construcción de respuesta: crear unLinkedHashMap, insertar las claves"mode"y"dependency", y retornar el mapa. Además, los métodoscommonsCollectionsNonExploitableyguavaNonExploitableson casi idénticos en su estructura completa.Detalles de la Duplicación
Patrón: LinkedHashMap Response Builder
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)Métodos casi idénticos
commonsCollectionsNonExploitable(líneas 32–43) yguavaNonExploitable(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
Recomendaciones de Refactoring
Extraer un método helper privado
Usar un record de Java
DemoResponsecon camposmode,dependencyyentriesChecklist de Implementación
Metadatos del Análisis
b16c75aAdd this agentic workflows to your repo
To install this agentic workflow, run