@Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { Predicate<Map.Entry<TextBlock, Integer>> containsLine = new TextBlockContainsLine(lineBuilder.getLine()); // list is sorted to cope with the non-guaranteed order of Map entries which would trigger false detection of changes // in {@link DbFileSources.Line#getDuplicationList()} duplicatedTextBlockIndexByTextBlock.entrySet().stream() .filter(containsLine) .map(Map.Entry::getValue) .sorted(Comparator.naturalOrder()) .forEach(lineBuilder::addDuplication); return Optional.empty(); }
private void processHighlightings(DbFileSources.Line.Builder lineBuilder) { int line = lineBuilder.getLine(); StringBuilder highlighting = new StringBuilder(); incrementHighlightingListMatchingLine(line); for (Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator = highlightingList.iterator(); syntaxHighlightingIterator.hasNext();) { processHighlighting(syntaxHighlightingIterator, highlighting, lineBuilder); } if (highlighting.length() > 0) { lineBuilder.setHighlighting(highlighting.toString()); } }
@Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { lineBuilder.setIsNewLine(newLines.contains(lineBuilder.getLine())); return Optional.empty(); } }
private void processHighlighting(Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator, StringBuilder highlighting, DbFileSources.Line.Builder lineBuilder) { ScannerReport.SyntaxHighlightingRule syntaxHighlighting = syntaxHighlightingIterator.next(); int line = lineBuilder.getLine(); ScannerReport.TextRange range = syntaxHighlighting.getRange(); if (range.getStartLine() <= line) { String offsets = rangeOffsetConverter.offsetToString(syntaxHighlighting.getRange(), line, lineBuilder.getSource().length()); if (offsets.isEmpty()) { if (range.getEndLine() == line) { syntaxHighlightingIterator.remove(); } } else { if (highlighting.length() > 0) { highlighting.append(SYMBOLS_SEPARATOR); } highlighting.append(offsets) .append(OFFSET_SEPARATOR) .append(getCssClass(syntaxHighlighting.getType())); if (range.getEndLine() == line) { syntaxHighlightingIterator.remove(); } } } }
@Override public void read(DbFileSources.Line.Builder lineBuilder) { if (scmReport.hasChangesetForLine(lineBuilder.getLine())) { Changeset changeset = scmReport.getChangesetForLine(lineBuilder.getLine()); String author = changeset.getAuthor(); if (author != null) { lineBuilder.setScmAuthor(author); } String revision = changeset.getRevision(); if (revision != null) { lineBuilder.setScmRevision(revision); } lineBuilder.setScmDate(changeset.getDate()); updateLatestChange(changeset); if (revision != null) { updateLatestChangeWithRevision(changeset); } } }
private void processSymbols(DbFileSources.Line.Builder lineBuilder) { int line = lineBuilder.getLine(); List<ScannerReport.Symbol> lineSymbols = new ArrayList<>(this.symbolsPerLine.get(line)); // Sort symbols to have deterministic results and avoid false variation that would lead to an unnecessary update of the source files // data Collections.sort(lineSymbols, SymbolsComparator.INSTANCE); StringBuilder symbolString = new StringBuilder(); for (ScannerReport.Symbol lineSymbol : lineSymbols) { int symbolId = idsBySymbol.get(lineSymbol); appendSymbol(symbolString, lineSymbol.getDeclaration(), line, symbolId, lineBuilder.getSource()); for (ScannerReport.TextRange range : lineSymbol.getReferenceList()) { appendSymbol(symbolString, range, line, symbolId, lineBuilder.getSource()); } } if (symbolString.length() > 0) { lineBuilder.setSymbols(symbolString.toString()); } }
private void processHighlightings(DbFileSources.Line.Builder lineBuilder) { int line = lineBuilder.getLine(); StringBuilder highlighting = new StringBuilder(); incrementHighlightingListMatchingLine(line); for (Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator = highlightingList.iterator(); syntaxHighlightingIterator.hasNext();) { processHighlighting(syntaxHighlightingIterator, highlighting, lineBuilder); } if (highlighting.length() > 0) { lineBuilder.setHighlighting(highlighting.toString()); } }
@Override public void read(DbFileSources.Line.Builder lineBuilder) { ScannerReport.LineCoverage reportCoverage = getNextLineCoverageIfMatchLine(lineBuilder.getLine()); if (reportCoverage != null) { processCoverage(lineBuilder, reportCoverage); coverage = null; } }
@Override public void read(DbFileSources.Line.Builder lineBuilder) { Predicate<Map.Entry<TextBlock, Integer>> containsLine = new TextBlockContainsLine(lineBuilder.getLine()); for (Integer textBlockIndex : from(duplicatedTextBlockIndexByTextBlock.entrySet()) .filter(containsLine) .transform(MapEntryToBlockId.INSTANCE) // list is sorted to cope with the non-guaranteed order of Map entries which would trigger false detection of changes // in {@link DbFileSources.Line#getDuplicationList()} .toSortedList(Ordering.natural())) { lineBuilder.addDuplication(textBlockIndex); } }
private void processHighlighting(Iterator<ScannerReport.SyntaxHighlightingRule> syntaxHighlightingIterator, StringBuilder highlighting, DbFileSources.Line.Builder lineBuilder) { ScannerReport.SyntaxHighlightingRule syntaxHighlighting = syntaxHighlightingIterator.next(); int line = lineBuilder.getLine(); ScannerReport.TextRange range = syntaxHighlighting.getRange(); if (range.getStartLine() <= line) { String offsets = rangeOffsetConverter.offsetToString(syntaxHighlighting.getRange(), line, lineBuilder.getSource().length()); if (offsets.isEmpty()) { if (range.getEndLine() == line) { syntaxHighlightingIterator.remove(); } } else { if (highlighting.length() > 0) { highlighting.append(SYMBOLS_SEPARATOR); } highlighting.append(offsets) .append(OFFSET_SEPARATOR) .append(getCssClass(syntaxHighlighting.getType())); if (range.getEndLine() == line) { syntaxHighlightingIterator.remove(); } } } }
@Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { if (scmReport.hasChangesetForLine(lineBuilder.getLine())) { Changeset changeset = scmReport.getChangesetForLine(lineBuilder.getLine()); String author = changeset.getAuthor(); if (author != null) { lineBuilder.setScmAuthor(author); } String revision = changeset.getRevision(); if (revision != null) { lineBuilder.setScmRevision(revision); } lineBuilder.setScmDate(changeset.getDate()); updateLatestChange(changeset); if (revision != null) { updateLatestChangeWithRevision(changeset); } } return Optional.empty(); }
/** * Stops reading at first encountered error, which implies the same * {@link org.sonar.ce.task.projectanalysis.source.linereader.LineReader.ReadError} will be returned once an error * has been encountered and for any then provided {@link DbFileSources.Line.Builder lineBuilder}. */ @Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { if (readError == null) { try { processSymbols(lineBuilder); } catch (RangeOffsetConverter.RangeOffsetConverterException e) { readError = new ReadError(Data.SYMBOLS, lineBuilder.getLine()); LOG.warn(format("Inconsistency detected in Symbols data. Symbols will be ignored for file '%s'", file.getDbKey()), e); } } return Optional.ofNullable(readError); }
/** * Stops reading at first encountered error, which implies the same * {@link org.sonar.ce.task.projectanalysis.source.linereader.LineReader.ReadError} will be returned once an error * has been encountered and for any then provided {@link DbFileSources.Line.Builder lineBuilder}. */ @Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { if (readError == null) { try { processHighlightings(lineBuilder); } catch (RangeOffsetConverterException e) { readError = new ReadError(HIGHLIGHTING, lineBuilder.getLine()); LOG.debug(format("Inconsistency detected in Highlighting data. Highlighting will be ignored for file '%s'", file.getDbKey()), e); } } return Optional.ofNullable(readError); }
private void processSymbols(DbFileSources.Line.Builder lineBuilder) { int line = lineBuilder.getLine(); List<ScannerReport.Symbol> lineSymbols = new ArrayList<>(this.symbolsPerLine.get(line)); // Sort symbols to have deterministic results and avoid false variation that would lead to an unnecessary update of the source files // data lineSymbols.sort(SymbolsComparator.INSTANCE); StringBuilder symbolString = new StringBuilder(); for (ScannerReport.Symbol lineSymbol : lineSymbols) { int symbolId = idsBySymbol.get(lineSymbol); appendSymbol(symbolString, lineSymbol.getDeclaration(), line, symbolId, lineBuilder.getSource()); for (ScannerReport.TextRange range : lineSymbol.getReferenceList()) { appendSymbol(symbolString, range, line, symbolId, lineBuilder.getSource()); } } if (symbolString.length() > 0) { lineBuilder.setSymbols(symbolString.toString()); } }
@Override public Optional<ReadError> read(DbFileSources.Line.Builder lineBuilder) { ScannerReport.LineCoverage reportCoverage = getNextLineCoverageIfMatchLine(lineBuilder.getLine()); if (reportCoverage != null) { processCoverage(lineBuilder, reportCoverage); coverage = null; } return Optional.empty(); }