From cf085a93a73384593b9b78fd6c6cdb0c81559355 Mon Sep 17 00:00:00 2001 From: Jim Bethancourt Date: Sun, 7 Jun 2026 18:56:57 -0500 Subject: [PATCH] #179 Show codebase map when no cycles are found - Show codebase map when no cycles are found - Skip vertex and edge removal analysis if no cycles are present --- .../report/SimpleHtmlReport.java | 45 +++++++++++-------- 1 file changed, 27 insertions(+), 18 deletions(-) diff --git a/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java b/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java index 2fe99d7..f8422cf 100644 --- a/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java +++ b/report/src/main/java/org/hjug/refactorfirst/report/SimpleHtmlReport.java @@ -180,22 +180,30 @@ public StringBuilder generateReport( classGraph = cycleRanker.getClassReferencesGraph(); cycles = new CircularReferenceChecker().getCycles(classGraph); - // Identify vertexes to remove - log.info("Identifying vertexes to remove"); - EnhancedParameterComputer enhancedParameterComputer = - new EnhancedParameterComputer<>(new SuperTypeToken<>() {}); - EnhancedParameterComputer.EnhancedParameters parameters = - enhancedParameterComputer.computeOptimalParameters(classGraph, 4); - DirectedFeedbackVertexSetSolver vertexSolver = - new DirectedFeedbackVertexSetSolver<>( - classGraph, parameters.getModulator(), null, parameters.getEta(), new SuperTypeToken<>() {}); - DirectedFeedbackVertexSetResult vertexSetResult = vertexSolver.solve(parameters.getK()); - vertexesToRemove = vertexSetResult.getFeedbackVertices(); - - // Identify edges to remove - log.info("Identifying edges to remove"); - PageRankFAS pageRankFAS = new PageRankFAS<>(classGraph, new SuperTypeToken<>() {}); - edgesToRemove = pageRankFAS.computeFeedbackArcSet(); + // Skip vertex and edge removal analysis if there are no cycles + if (!cycles.isEmpty()) { + // Identify vertexes to remove + log.info("Identifying vertexes to remove"); + EnhancedParameterComputer enhancedParameterComputer = + new EnhancedParameterComputer<>(new SuperTypeToken<>() {}); + EnhancedParameterComputer.EnhancedParameters parameters = + enhancedParameterComputer.computeOptimalParameters(classGraph, 4); + DirectedFeedbackVertexSetSolver vertexSolver = + new DirectedFeedbackVertexSetSolver<>( + classGraph, + parameters.getModulator(), + null, + parameters.getEta(), + new SuperTypeToken<>() {}); + DirectedFeedbackVertexSetResult vertexSetResult = vertexSolver.solve(parameters.getK()); + vertexesToRemove = vertexSetResult.getFeedbackVertices(); + + // Identify edges to remove + log.info("Identifying edges to remove"); + PageRankFAS pageRankFAS = + new PageRankFAS<>(classGraph, new SuperTypeToken<>() {}); + edgesToRemove = pageRankFAS.computeFeedbackArcSet(); + } // capture the number of cycles each edge to remove is in Map edgeToRemoveCycleCounts = new HashMap<>(); @@ -279,11 +287,12 @@ public StringBuilder generateReport( if (!hasAnyDisharmony) { stringBuilder - .append("Congratulations! ") + .append("
Congratulations! ") .append(projectName) .append(" ") .append(projectVersion) - .append(" has no Back Edges, God classes, Highly Coupled Classes, or Cycles!"); + .append(" has no Cycles or Disharmonies!
"); + stringBuilder.append(renderClassGraphVisuals()); stringBuilder.append(renderGithubButtons()); log.info("Done! No Disharmonies found!"); return stringBuilder;