private Dsm<Resource> getDsm(Collection<Resource> subProjects) { CycleDetector<Resource> cycleDetector = new CycleDetector<Resource>(index, subProjects); Set<Cycle> cycles = cycleDetector.getCycles(); MinimumFeedbackEdgeSetSolver solver = new MinimumFeedbackEdgeSetSolver(cycles); Set<Edge> feedbackEdges = solver.getEdges(); Dsm<Resource> dsm = new Dsm<Resource>(index, subProjects, feedbackEdges); DsmTopologicalSorter.sort(dsm); return dsm; }
private void onPackage(Resource sonarPackage) { Collection<Resource> squidFiles = getResourcesForDirectory(sonarPackage); if (squidFiles != null && !squidFiles.isEmpty()) { IncrementalCyclesAndFESSolver<Resource> cycleDetector = new IncrementalCyclesAndFESSolver<>(graph, squidFiles); Set<Cycle> cycles = cycleDetector.getCycles(); MinimumFeedbackEdgeSetSolver solver = new MinimumFeedbackEdgeSetSolver(cycles); Set<Edge> feedbackEdges = solver.getEdges(); int tangles = solver.getWeightOfFeedbackEdgeSet(); savePositiveMeasure(sonarPackage, CoreMetrics.FILE_CYCLES, cycles.size()); savePositiveMeasure(sonarPackage, CoreMetrics.FILE_FEEDBACK_EDGES, feedbackEdges.size()); savePositiveMeasure(sonarPackage, CoreMetrics.FILE_TANGLES, tangles); savePositiveMeasure(sonarPackage, CoreMetrics.FILE_EDGES_WEIGHT, getEdgesWeight(squidFiles)); String dsmJson = serializeDsm(graph, squidFiles, feedbackEdges); context.saveMeasure(sonarPackage, new Measure(CoreMetrics.DEPENDENCY_MATRIX, dsmJson)); } }