private static void storeZeroCoverageForEachExecutableLine(final SensorContext context, InputFile f, DefaultMeasure<String> execLines) { NewCoverage newCoverage = context.newCoverage().onFile(f); Map<Integer, Integer> lineMeasures = KeyValueFormat.parseIntInt((String) execLines.value()); for (Map.Entry<Integer, Integer> lineMeasure : lineMeasures.entrySet()) { int lineIdx = lineMeasure.getKey(); if (lineIdx <= f.lines() && lineMeasure.getValue() > 0) { newCoverage.lineHits(lineIdx, 0); } } newCoverage.save(); }
try { List<String> lines = FileUtils.readLines(coverageFile, context.fileSystem().encoding().name()); NewCoverage coverageBuilder = context.newCoverage() .onFile(inputFile) .ofType(getCoverageType());
private void parseFiles(SMInputCursor fileCursor, SensorContext context) throws XMLStreamException { while (fileCursor.getNext() != null) { checkElementName(fileCursor, "file"); String filePath = mandatoryAttribute(fileCursor, "path"); InputFile inputFile = context.fileSystem().inputFile(context.fileSystem().predicates().hasPath(filePath)); if (inputFile == null) { numberOfUnknownFiles++; if (numberOfUnknownFiles <= MAX_STORED_UNKNOWN_FILE_PATHS) { firstUnknownFiles.add(filePath); } continue; } Preconditions.checkState( inputFile.language() != null, "Line %s of report refers to a file with an unknown language: %s", fileCursor.getCursorLocation().getLineNumber(), filePath); matchedFileKeys.add(inputFile.key()); NewCoverage newCoverage = context.newCoverage().onFile(inputFile); SMInputCursor lineToCoverCursor = fileCursor.childElementCursor(); while (lineToCoverCursor.getNext() != null) { parseLineToCover(lineToCoverCursor, newCoverage); } newCoverage.save(); } }
private Map<InputFile, NewCoverage> parse(List<String> lines) { final Map<InputFile, FileData> files = Maps.newHashMap(); FileData fileData = null; int reportLineNum = 0; for (String line : lines) { reportLineNum++; if (line.startsWith(SF)) { fileData = loadCurrentFileData(files, line); } else if (fileData != null) { if (line.startsWith(DA)) { parseLineCoverage(fileData, reportLineNum, line); } else if (line.startsWith(BRDA)) { parseBranchCoverage(fileData, reportLineNum, line); } } } Map<InputFile, NewCoverage> coveredFiles = Maps.newHashMap(); for (Map.Entry<InputFile, FileData> e : files.entrySet()) { NewCoverage newCoverage = context.newCoverage().onFile(e.getKey()); e.getValue().save(newCoverage); coveredFiles.put(e.getKey(), newCoverage); } return coveredFiles; }
private Map<InputFile, NewCoverage> parse(List<String> lines) { final Map<InputFile, FileData> files = Maps.newHashMap(); FileData fileData = null; int reportLineNum = 0; for (String line : lines) { reportLineNum++; if (line.startsWith(SF)) { fileData = loadCurrentFileData(files, line); } else if (fileData != null) { if (line.startsWith(DA)) { parseLineCoverage(fileData, reportLineNum, line); } else if (line.startsWith(BRDA)) { parseBranchCoverage(fileData, reportLineNum, line); } } } Map<InputFile, NewCoverage> coveredFiles = Maps.newHashMap(); for (Map.Entry<InputFile, FileData> e : files.entrySet()) { NewCoverage newCoverage = context.newCoverage().onFile(e.getKey()); e.getValue().save(newCoverage); coveredFiles.put(e.getKey(), newCoverage); } return coveredFiles; }
private void parse(List<String> lines) { final Map<InputFile, FileData> files = new HashMap<>(); FileData fileData = null; int reportLineNum = 0; for (String line : lines) { reportLineNum++; if (line.startsWith(SF)) { fileData = loadCurrentFileData(files, line); } else if (fileData != null) { if (line.startsWith(DA)) { parseLineCoverage(fileData, reportLineNum, line); } else if (line.startsWith(BRDA)) { parseBranchCoverage(fileData, reportLineNum, line); } } } for (Map.Entry<InputFile, FileData> e : files.entrySet()) { NewCoverage newCoverage = context.newCoverage().onFile(e.getKey()); e.getValue().save(newCoverage); } }
private void collectFileData(String filePath, NodeList nodeList) { InputFile resource = getFile(filePath); LOGGER.info("Collect file data: {}",resource.toString()); if (resource != null) { boolean lineAdded = false; NewCoverage coverage = context.newCoverage(); coverage.onFile(resource); for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node.getNodeType() == Node.ELEMENT_NODE) { Element element = (Element) node; int lineId = Integer.parseInt(element.getAttribute(NUMBER)); coverage.lineHits(lineId, Integer.parseInt(element.getAttribute(HITS))); lineAdded = true; String isBranch = element.getAttribute(BRANCH); String text = element.getAttribute(COVERAGE); if ("true".equalsIgnoreCase(isBranch) && text != null && !text.isEmpty()) addCoverageConditions(coverage,lineId,text); } } // If there was no lines covered or uncovered (e.g. everything is ignored), but the file exists then Sonar would report the file as uncovered // so adding a fake one to line number 1 if (!lineAdded) { coverage.lineHits(1, 1); } coverage.save(); } }
private static void storeZeroCoverageForEachExecutableLine(final SensorContext context, InputFile f, DefaultMeasure<String> execLines) { NewCoverage newCoverage = context.newCoverage().onFile(f); Map<Integer, Integer> lineMeasures = KeyValueFormat.parseIntInt((String) execLines.value()); for (Map.Entry<Integer, Integer> lineMeasure : lineMeasures.entrySet()) { int lineIdx = lineMeasure.getKey(); if (lineIdx <= f.lines() && lineMeasure.getValue() > 0) { newCoverage.lineHits(lineIdx, 0); } } newCoverage.save(); }
private static void saveFileCoverage(SensorContext sensorContext, String filePath, List<CoverageStat> coverageStats) throws IOException { FileSystem fileSystem = sensorContext.fileSystem(); InputFile inputFile = findInputFile(filePath, fileSystem); if (inputFile != null) { LOG.debug("Saving coverage measures for file '{}'", filePath); List<String> lines = Arrays.asList(inputFile.contents().split("\\r?\\n")); NewCoverage newCoverage = sensorContext.newCoverage().onFile(inputFile); FileCoverage fileCoverage = new FileCoverage(coverageStats, lines); for (Map.Entry<Integer, LineCoverage> entry : fileCoverage.lineMap.entrySet()) { newCoverage.lineHits(entry.getKey(), entry.getValue().hits); } newCoverage.save(); } else { LOG.warn("File '{}' is not included in the project, ignoring coverage", filePath); } }
public void saveForAllLine(final SensorContext context, final InputFile i) { final NewCoverage coverage = context.newCoverage().onFile(i); try (Stream<String> fileLine = Files.lines(i.path())) { FactoryLine.init(); LinePredicate.init(); fileLine.map(FactoryLine::create).filter(LinePredicate::filterLine) .forEach(l -> coverage.lineHits(l.getLineNumber(), l.getHits())); coverage.ofType(CoverageType.UNIT); coverage.save(); } catch (IOException e) { LOGGER.warn("IO Exception" + e); } }
private void collectFileMeasures(SMInputCursor clazz, Map<String, ParsingResult> resultByFilename) throws XMLStreamException { while (clazz.getNext() != null) { String fileName = clazz.getAttrValue("filename"); ParsingResult parsingResult = resultByFilename.get(fileName); if (parsingResult == null) { InputFile inputFile = getInputFile(fileName, sourceDirs); NewCoverage onFile = context.newCoverage().onFile(inputFile).ofType(CoverageType.UNIT); parsingResult = new ParsingResult(fileName, inputFile, onFile); resultByFilename.put(fileName, parsingResult); } collectFileData(clazz, parsingResult); } }
public void save(SensorContext context, Map<String, List<LineCoverage>> coveragePerFile) { for (Map.Entry<String, List<LineCoverage>> entry : coveragePerFile.entrySet()) { final String filePath = entry.getKey(); final List<LineCoverage> lines = entry.getValue(); final InputFile inputFile = ProjectExplorer.getByPath(context, filePath); inputFileWithCoverage.add(inputFile); if (inputFile == null) { LOGGER.warn("unable to create InputFile object: " + filePath); return; } final NewCoverage coverage = context.newCoverage().onFile(inputFile); for (final LineCoverage line : lines) { try { coverage.lineHits(line.getLineNumber(), line.getHits()); } catch (final Exception ex) { LOGGER.error(ex.getMessage() + line); } } coverage.ofType(CoverageType.UNIT); coverage.save(); } }
private void collectFileMeasures(SMInputCursor classCursor, SensorContext context, Map<InputFile, NewCoverage> coverageData, List<File> baseDirectories) throws XMLStreamException { while (classCursor.getNext() != null) { String filename = FilenameUtils.normalize(classCursor.getAttrValue("filename")); InputFile inputFile = resolve(context, baseDirectories, filename); if (inputFile != null) { NewCoverage coverage = coverageData.computeIfAbsent(inputFile, f -> context.newCoverage().onFile(f)); collectFileData(classCursor, coverage); } else { classCursor.advance(); } } }
private void collectFileMeasures(SMInputCursor classCursor, SensorContext context, Map<InputFile, NewCoverage> coverageData, List<File> baseDirectories) throws XMLStreamException { while (classCursor.getNext() != null) { String filename = FilenameUtils.normalize(classCursor.getAttrValue("filename")); InputFile inputFile = resolve(context, baseDirectories, filename); if (inputFile != null) { NewCoverage coverage = coverageData.computeIfAbsent(inputFile, f -> context.newCoverage().onFile(f)); collectFileData(classCursor, coverage); } else { classCursor.advance(); } } }
private void saveZeroValue(InputFile inputFile, SensorContext context, Set<Integer> nonCommentLineNumbers) { NewCoverage newCoverage = context .newCoverage() .ofType(CoverageType.UNIT) .onFile(inputFile); if (nonCommentLineNumbers != null) { for (Integer nonCommentLineNumber : nonCommentLineNumbers) { newCoverage.lineHits(nonCommentLineNumber, 0); } } else { for (int i = 1; i <= inputFile.lines(); i++) { newCoverage.lineHits(i, 0); } } newCoverage.save(); }
private static void saveCoverageLineHitsData(FileNode fileNode, InputFile inputFile, SensorContext context) { NewCoverage newCoverage = context.newCoverage().onFile(inputFile); if (fileNode.getLines() != null) { for (LineNode line : fileNode.getLines()) { int lineNum = line.getNum(); if (lineNum > 0 && lineNum <= inputFile.lines()) { newCoverage.lineHits(line.getNum(), line.getCount()); } else { LOG.warn(String.format(WRONG_LINE_EXCEPTION_MESSAGE, lineNum, inputFile.filename())); } } } newCoverage.save(); }
private static void saveCoverageLineHitsData(FileNode fileNode, InputFile inputFile, SensorContext context) { NewCoverage newCoverage = context.newCoverage().onFile(inputFile); if (fileNode.getLines() != null) { for (LineNode line : fileNode.getLines()) { int lineNum = line.getNum(); if (lineNum > 0 && lineNum <= inputFile.lines()) { newCoverage.lineHits(line.getNum(), line.getCount()); } else { LOG.warn(String.format(WRONG_LINE_EXCEPTION_MESSAGE, lineNum, inputFile.filename())); } } } newCoverage.save(); }
private void parseFiles(SMInputCursor fileCursor, SensorContext context) throws XMLStreamException { while (fileCursor.getNext() != null) { checkElementName(fileCursor, "file"); String filePath = mandatoryAttribute(fileCursor, "path"); InputFile inputFile = context.fileSystem().inputFile(context.fileSystem().predicates().hasPath(filePath)); if (inputFile == null) { numberOfUnknownFiles++; if (numberOfUnknownFiles <= MAX_STORED_UNKNOWN_FILE_PATHS) { firstUnknownFiles.add(filePath); } continue; } Preconditions.checkState( inputFile.language() != null, "Line %s of report refers to a file with an unknown language: %s", fileCursor.getCursorLocation().getLineNumber(), filePath); matchedFileKeys.add(inputFile.key()); NewCoverage newCoverage = context.newCoverage().onFile(inputFile); SMInputCursor lineToCoverCursor = fileCursor.childElementCursor(); while (lineToCoverCursor.getNext() != null) { parseLineToCover(lineToCoverCursor, newCoverage); } newCoverage.save(); } }
private void readExecutionData(@Nullable File jacocoExecutionData, SensorContext context) { File newJacocoExecutionData = jacocoExecutionData; if (newJacocoExecutionData == null || !newJacocoExecutionData.isFile()) { JaCoCoExtensions.LOG.info("Project coverage is set to 0% as no JaCoCo execution data has been dumped: {}", newJacocoExecutionData); newJacocoExecutionData = null; } ExecutionDataVisitor executionDataVisitor = new ExecutionDataVisitor(); jacocoReportReader = new JacocoReportReader(newJacocoExecutionData).readJacocoReport(executionDataVisitor, executionDataVisitor); boolean collectedCoveragePerTest = readCoveragePerTests(executionDataVisitor); CoverageBuilder coverageBuilder = jacocoReportReader.analyzeFiles(executionDataVisitor.getMerged(), classFilesCache.values()); int analyzedResources = 0; for (ISourceFileCoverage coverage : coverageBuilder.getSourceFiles()) { InputFile inputFile = getResource(coverage); if (inputFile != null) { NewCoverage newCoverage = context.newCoverage().onFile(inputFile); analyzeFile(newCoverage, inputFile, coverage); newCoverage.save(); analyzedResources++; } } if (analyzedResources == 0) { JaCoCoExtensions.LOG.warn("Coverage information was not collected. Perhaps you forget to include debug information into compiled classes?"); } else if (collectedCoveragePerTest) { JaCoCoExtensions.LOG.info("Information about coverage per test has been collected."); } else if (newJacocoExecutionData != null) { JaCoCoExtensions.LOG.info("No information about coverage per test."); } }
public final void readExecutionData(File jacocoExecutionData, SensorContext context) { ExecutionDataVisitor executionDataVisitor = new ExecutionDataVisitor(); File fileToAnalyze = jacocoExecutionData; if (fileToAnalyze == null || !fileToAnalyze.isFile()) { JaCoCoExtensions.logger().warn("Project coverage is set to 0% as no JaCoCo execution data has been dumped: {}", jacocoExecutionData); fileToAnalyze = null; } else { JaCoCoExtensions.logger().info("Analysing {}", fileToAnalyze); } JaCoCoReportReader jacocoReportReader = new JaCoCoReportReader(fileToAnalyze).readJacocoReport(executionDataVisitor, executionDataVisitor); CoverageBuilder coverageBuilder = jacocoReportReader.analyzeFiles(executionDataVisitor.getMerged(), classFilesCache.values()); int analyzedResources = 0; for (ISourceFileCoverage coverage : coverageBuilder.getSourceFiles()) { InputFile groovyFile = getInputFile(coverage); if (groovyFile != null) { NewCoverage newCoverage = context.newCoverage().onFile(groovyFile).ofType(coverageType()); analyzeFile(newCoverage, groovyFile, coverage); newCoverage.save(); analyzedResources++; } } if (analyzedResources == 0) { JaCoCoExtensions.logger().warn("Coverage information was not collected. Perhaps you forget to include debug information into compiled classes?"); } }