@Override public boolean match(SourceCode unit) { switch (operator) { case EQUALS: return NumberUtils.compare(unit.getDouble(metric), value) == 0; case GREATER_THAN: return unit.getDouble(metric) > value; case GREATER_THAN_EQUALS: return unit.getDouble(metric) >= value; case LESS_THAN_EQUALS: return unit.getDouble(metric) <= value; case LESS_THAN: return unit.getDouble(metric) < value; default: throw new IllegalStateException("The operator value '" + operator + "' is unknown."); } }
public Map<Integer, Integer> distributeAccordingTo(MetricDef metric, int... thresholds) { Map<Integer, Integer> result = new TreeMap<Integer, Integer>(); for (int threshold : thresholds) { result.put(threshold, 0); } for (SourceCode unit : units) { for (int index = thresholds.length - 1; index >= 0; index--) { if (unit.getDouble(metric) >= thresholds[index]) { result.put(thresholds[index], result.get(thresholds[index]) + 1); break; } } } return result; } }
private void saveClassComplexity(org.sonar.api.resources.File sonarFile, SourceFile squidFile) { double complexityInClasses = 0; Set<SourceCode> children = squidFile.getChildren(); if (children != null) { for (SourceCode sourceCode : squidFile.getChildren()) { if (sourceCode.isType(SourceClass.class)) { complexityInClasses += sourceCode.getDouble(EcmaScriptMetric.COMPLEXITY); } } } context.saveMeasure(sonarFile, CoreMetrics.COMPLEXITY_IN_CLASSES, complexityInClasses); }
/** * Saves a measure with the limits of the function. * * @param sonarFile input file. * @param squidFile source file. */ private void saveFunctionsComplexityDistribution(InputFile sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner.getIndex().search( new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder( CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); squidFunctionsInFile.forEach(squidFunction -> complexityDistribution.add(squidFunction.getDouble(ApexMetric.COMPLEXITY)) ); context.saveMeasure(sonarFile, buildMeasure(complexityDistribution)); }
private void decorateWith(SourceCode sourceCode, MetricDef... metrics) { if (sourceCode.hasChildren()) { for (SourceCode child : sourceCode.getChildren()) { decorateWith(child, metrics); } } for (MetricDef metric : metrics) { if (!metric.aggregateIfThereIsAlreadyAValue() && Double.doubleToRawLongBits(sourceCode.getDouble(metric)) != 0) { continue; } if (sourceCode.hasChildren()) { for (SourceCode child : sourceCode.getChildren()) { if (!metric.isCalculatedMetric() && metric.isThereAggregationFormula()) { sourceCode.add(metric, child); } } } } } }
private void saveFunctionsComplexityDistribution(File sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner.getIndex().search(new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder(CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); for (SourceCode squidFunction : squidFunctionsInFile) { complexityDistribution.add(squidFunction.getDouble(ObjectiveCMetric.COMPLEXITY)); } context.saveMeasure(sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); }
private void saveFunctionsComplexityAndDistribution(File sonarFile, SourceFile squidFile) { Collection<SourceCode> squidFunctionsInFile = scanner.getIndex().search(new QueryByParent(squidFile), new QueryByType(SourceFunction.class)); RangeDistributionBuilder complexityDistribution = new RangeDistributionBuilder(CoreMetrics.FUNCTION_COMPLEXITY_DISTRIBUTION, FUNCTIONS_DISTRIB_BOTTOM_LIMITS); double complexityInFunction = 0; for (SourceCode squidFunction : squidFunctionsInFile) { double functionComplexity = squidFunction.getDouble(EcmaScriptMetric.COMPLEXITY); complexityDistribution.add(functionComplexity); complexityInFunction += functionComplexity; } context.saveMeasure(sonarFile, complexityDistribution.build().setPersistenceMode(PersistenceMode.MEMORY)); context.saveMeasure(sonarFile, CoreMetrics.COMPLEXITY_IN_FUNCTIONS, complexityInFunction); }