private Measure getZeroCoverageLineHitsDataMetric(org.sonar.api.resources.File resource, SensorContext context) { PropertiesBuilder<Integer, Integer> lineHitsData = new PropertiesBuilder<>(CoreMetrics.COVERAGE_LINE_HITS_DATA); String nclocData = context.getMeasure(resource, CoreMetrics.NCLOC_DATA).getData(); if (nclocData != null) { String[] lines = nclocData.split(";"); for (String line : lines) { String[] info = line.split("="); if (info.length == 2 && "1".equals(info[1])) { int lineNumber = Integer.parseInt(info[0]); lineHitsData.add(lineNumber, 0); } } } return lineHitsData.build(); }
/** * Saves one class measure and calls {@link #saveLineMeasure(LineNode, PropertiesBuilder, String))} for each class lines. * * @param fileNode * the file node * @param phpFile * the php file * @return the double */ private void saveClassMeasure(FileNode fileNode, PhpFile phpFile) { // Properties builder will generate the data associate with COVERAGE_LINE_HITS_DATA metrics. // This should look like (lineNumner=Count) : 1=0;2=1;3=1.... PropertiesBuilder<Integer, Integer> lineHits = new PropertiesBuilder<Integer, Integer>(CoreMetrics.COVERAGE_LINE_HITS_DATA); for (LineNode line : fileNode.getLines()) { saveLineMeasure(line, lineHits); } MetricsNode metrics = fileNode.getMetrics(); context.saveMeasure(phpFile, lineHits.build()); // Save uncovered statements (lines) double totalStatementsCount = metrics.getTotalStatementsCount(); double uncoveredLines = totalStatementsCount - metrics.getCoveredStatements(); context.saveMeasure(phpFile, CoreMetrics.LINES_TO_COVER, totalStatementsCount); context.saveMeasure(phpFile, CoreMetrics.UNCOVERED_LINES, uncoveredLines); }
private void saveCoverageData(CoverageFileData data) { if (data == null) { return; } Measure<Double> overallCoverage = new Measure<Double>(CoreMetrics.COVERAGE, data.getCoverage()); Measure<Double> lineCoverage = new Measure<Double>(CoreMetrics.LINE_COVERAGE, data.getCoverage()); Measure<Double> linesToCover = new Measure<Double>(CoreMetrics.LINES_TO_COVER, data.getTotalLines()); Measure<Double> uncoveredLines = new Measure<Double>(CoreMetrics.UNCOVERED_LINES, data.getUncoveredLines()); Measure<?> lineHits = data.getLineHitsBuilder().build().setPersistenceMode(PersistenceMode.DATABASE); try { context.saveMeasure(data.getResource(), overallCoverage); context.saveMeasure(data.getResource(), lineCoverage); context.saveMeasure(data.getResource(), linesToCover); context.saveMeasure(data.getResource(), uncoveredLines); context.saveMeasure(data.getResource(), lineHits); DelphiUtils.LOG.debug("Saving coverage to: " + data.getResource().absolutePath()); } catch (Exception e) { DelphiUtils.LOG.error("Error saving coverage measure.", e); } }
private void saveCoverageData(Map<InputFile, CoverageFileData> savedResources, SensorContext context) { for (CoverageFileData data : savedResources.values()) { // TODO sonar.delphi.codecoverage.excluded property // if // (DelphiProjectHelper.getInstance().isExcluded(data.getResource().file().getPath(), // excludedDirs)) { // continue; // do NOT save, in excluded // } Measure<Double> overallCoverage = new Measure<Double>(CoreMetrics.COVERAGE, data.getCoverage()); Measure<Double> lineCoverage = new Measure<Double>(CoreMetrics.LINE_COVERAGE, data.getCoverage()); Measure<Double> linesToCover = new Measure<Double>(CoreMetrics.LINES_TO_COVER, data.getTotalLines()); Measure<Double> uncoveredLines = new Measure<Double>(CoreMetrics.UNCOVERED_LINES, data.getUncoveredLines()); Measure<?> lineHits = data.getLineHitsBuilder().build().setPersistenceMode(PersistenceMode.DATABASE); context.saveMeasure(data.getResource(), overallCoverage); context.saveMeasure(data.getResource(), lineCoverage); context.saveMeasure(data.getResource(), linesToCover); context.saveMeasure(data.getResource(), uncoveredLines); context.saveMeasure(data.getResource(), lineHits); } }