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(); }
public Measure build() { return new Measure(metric, buildData()); }
/** * 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); }
@Override public synchronized void blameResult(InputFile file, List<BlameLine> lines) { Preconditions.checkNotNull(file); Preconditions.checkNotNull(lines); Preconditions.checkArgument(allFilesToBlame.contains(file), "It was not expected to blame file " + file.relativePath()); if (lines.size() != file.lines()) { LOG.debug("Ignoring blame result since provider returned " + lines.size() + " blame lines but file " + file.relativePath() + " has " + file.lines() + " lines"); return; } PropertiesBuilder<Integer, String> authors = propertiesBuilder(CoreMetrics.SCM_AUTHORS_BY_LINE); PropertiesBuilder<Integer, String> dates = propertiesBuilder(CoreMetrics.SCM_LAST_COMMIT_DATETIMES_BY_LINE); PropertiesBuilder<Integer, String> revisions = propertiesBuilder(CoreMetrics.SCM_REVISIONS_BY_LINE); int lineNumber = 1; for (BlameLine line : lines) { authors.add(lineNumber, normalizeString(line.author())); Date date = line.date(); dates.add(lineNumber, date != null ? DateUtils.formatDateTime(date) : ""); revisions.add(lineNumber, line.revision()); lineNumber++; } ScmSensor.saveMeasures(context, file, authors.buildData(), dates.buildData(), revisions.buildData()); allFilesToBlame.remove(file); count++; progressReport.message(count + "/" + total + " files analyzed, last one was " + file.absolutePath()); }
/** * Save line measure. * * @param line * the line * @param lineHits * the line hits * @param fileName * the class name */ private void saveLineMeasure(LineNode line, PropertiesBuilder<Integer, Integer> lineHits) { lineHits.add(line.getNum(), line.getCount()); }
/** * ctor * * @param resource Delphi file */ public CoverageFileData(InputFile resource) { this.resource = resource; lineHitsBuilder = new PropertiesBuilder<String, Integer>(CoreMetrics.COVERAGE_LINE_HITS_DATA); }
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 calculateCoverageData(CoverageFileData fileData, int lineNumber, int lineHits) { fileData.setTotalLines(fileData.getTotalLines() + 1); if (lineHits == 0) { fileData.setUncoveredLines(fileData.getUncoveredLines() + 1); } fileData.getLineHitsBuilder().add(String.valueOf(lineNumber), lineHits); }
private static PropertiesBuilder<Integer, String> propertiesBuilder(Metric metric) { return new PropertiesBuilder<Integer, String>(metric); }
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); } }
data.getLineHitsBuilder().add(lineNumber, isCovered ? 1 : 0); coveredLines += isCovered ? 1 : 0; ++totalLines;