private void processFile(InputFile inputFile) { try { Set<Integer> noSonarLines = new HashSet<>(); int[] lineCounter = {1}; try (Stream<String> stream = Files.lines(inputFile.path(), inputFile.charset())) { stream.forEachOrdered(lineStr -> { if (lineStr.contains("//NOSONAR")) { noSonarLines.add(lineCounter[0]); } lineCounter[0]++; }); } noSonarFilter.noSonarInFile(inputFile, noSonarLines); } catch (IOException e) { throw new IllegalStateException("Fail to process " + inputFile, e); } } }
@Test public void should_store_nosonar_lines_on_inputfile() { DefaultInputFile f = TestInputFileBuilder.create("module1", "myfile.java").build(); new NoSonarFilter().noSonarInFile(f, new HashSet<>(Arrays.asList(1,4))); assertThat(f.hasNoSonarAt(1)).isTrue(); assertThat(f.hasNoSonarAt(2)).isFalse(); assertThat(f.hasNoSonarAt(4)).isTrue(); } }
private void processFile(InputFile inputFile) { try { Set<Integer> noSonarLines = new HashSet<>(); int[] lineCounter = {1}; try (Stream<String> stream = Files.lines(inputFile.path(), inputFile.charset())) { stream.forEachOrdered(lineStr -> { if (lineStr.contains("//NOSONAR")) { noSonarLines.add(lineCounter[0]); } lineCounter[0]++; }); } noSonarFilter.noSonarInFile(inputFile, noSonarLines); } catch (IOException e) { throw new IllegalStateException("Fail to process " + inputFile, e); } } }
@Override public void endDocument() { if (noSonarLines != null && !noSonarLines.isEmpty()) { noSonarFilter.noSonarInFile(getHtmlSourceCode().inputFile(), noSonarLines); } }
private CommentLinesVisitor createCommentLineVisitorAndFindNoSonar(JavaFileScannerContext context) { CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(); commentLinesVisitor.analyzeCommentLines(context.getTree()); noSonarFilter.noSonarInFile(sonarFile, commentLinesVisitor.noSonarLines()); return commentLinesVisitor; }
private CommentLinesVisitor createCommentLineVisitorAndFindNoSonar(JavaFileScannerContext context) { CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(); commentLinesVisitor.analyzeCommentLines(context.getTree()); noSonarFilter.noSonarInFile(sonarFile, commentLinesVisitor.noSonarLines()); return commentLinesVisitor; }
private void saveMetrics(SensorContext sensorContext, SensorContextUtils.AnalysisResponse analysisResponse, InputFile inputFile) { saveMetric(sensorContext, inputFile, CoreMetrics.FUNCTIONS, analysisResponse.functions); saveMetric(sensorContext, inputFile, CoreMetrics.CLASSES, analysisResponse.classes); saveMetric(sensorContext, inputFile, CoreMetrics.STATEMENTS, analysisResponse.statements); saveMetric(sensorContext, inputFile, CoreMetrics.NCLOC, analysisResponse.ncloc.length); saveMetric(sensorContext, inputFile, CoreMetrics.COMMENT_LINES, analysisResponse.commentLines.length); saveMetric(sensorContext, inputFile, CoreMetrics.COMPLEXITY, analysisResponse.complexity); saveMetric(sensorContext, inputFile, CoreMetrics.COGNITIVE_COMPLEXITY, analysisResponse.cognitiveComplexity); noSonarFilter.noSonarInFile(inputFile, Arrays.stream(analysisResponse.nosonarLines).collect(Collectors.toSet())); FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(inputFile); for (int line : analysisResponse.ncloc) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1); } for (int line : analysisResponse.executableLines) { fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, line, 1); } fileLinesContext.save(); }
@Override public void leaveFile(Tree tree) { super.leaveFile(tree); CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(tree, new CssCommentAnalyser()); saveMetricOnFile(CoreMetrics.COMMENT_LINES, commentLinesVisitor.getNumberOfCommentLines()); noSonarFilter.noSonarInFile(inputFile, commentLinesVisitor.getNoSonarLines()); }
@Override public void leaveFile(Tree tree) { super.leaveFile(tree); CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(tree, new LessCommentAnalyser()); saveMetricOnFile(CoreMetrics.COMMENT_LINES, commentLinesVisitor.getNumberOfCommentLines()); noSonarFilter.noSonarInFile(inputFile, commentLinesVisitor.getNoSonarLines()); }
@Override public void leaveFile(Tree tree) { super.leaveFile(tree); CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(tree, new ScssCommentAnalyser()); saveMetricOnFile(CoreMetrics.COMMENT_LINES, commentLinesVisitor.getNumberOfCommentLines()); noSonarFilter.noSonarInFile(inputFile, commentLinesVisitor.getNoSonarLines()); }
newWalker.walk(newVisitorContext); noSonarFilter.noSonarInFile(inputFile, metricsVisitor.getLinesWithNoSonar());
@Override public void leaveFile(Tree tree) { super.leaveFile(tree); CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(tree, new CssCommentAnalyser()); saveMetricOnFile(CoreMetrics.COMMENT_LINES, commentLinesVisitor.getNumberOfCommentLines()); noSonarFilter.noSonarInFile(inputFile, commentLinesVisitor.getNoSonarLines()); }
@Override public void leaveFile(Tree tree) { super.leaveFile(tree); CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(tree, new LessCommentAnalyser()); saveMetricOnFile(CoreMetrics.COMMENT_LINES, commentLinesVisitor.getNumberOfCommentLines()); noSonarFilter.noSonarInFile(inputFile, commentLinesVisitor.getNoSonarLines()); }
@Override public void leaveFile(Tree tree) { super.leaveFile(tree); CommentLinesVisitor commentLinesVisitor = new CommentLinesVisitor(tree, new ScssCommentAnalyser()); saveMetricOnFile(CoreMetrics.COMMENT_LINES, commentLinesVisitor.getNumberOfCommentLines()); noSonarFilter.noSonarInFile(inputFile, commentLinesVisitor.getNoSonarLines()); }
private void saveMeasures(InputFile inputFile, PythonVisitorContext visitorContext) { boolean ignoreHeaderComments = new PythonConfiguration(context.fileSystem().encoding()).getIgnoreHeaderComments(); FileMetrics fileMetrics = new FileMetrics(visitorContext, ignoreHeaderComments); FileLinesVisitor fileLinesVisitor = fileMetrics.fileLinesVisitor(); cpdAnalyzer.pushCpdTokens(inputFile, visitorContext); noSonarFilter.noSonarInFile(inputFile, fileLinesVisitor.getLinesWithNoSonar()); saveFilesComplexityDistribution(inputFile, fileMetrics); saveFunctionsComplexityDistribution(inputFile, fileMetrics); Set<Integer> linesOfCode = fileLinesVisitor.getLinesOfCode(); saveMetricOnFile(inputFile, CoreMetrics.NCLOC, linesOfCode.size()); saveMetricOnFile(inputFile, CoreMetrics.STATEMENTS, fileMetrics.numberOfStatements()); saveMetricOnFile(inputFile, CoreMetrics.FUNCTIONS, fileMetrics.numberOfFunctions()); saveMetricOnFile(inputFile, CoreMetrics.CLASSES, fileMetrics.numberOfClasses()); saveMetricOnFile(inputFile, CoreMetrics.COMPLEXITY, fileMetrics.complexity()); saveMetricOnFile(inputFile, CoreMetrics.COGNITIVE_COMPLEXITY, fileMetrics.cognitiveComplexity()); saveMetricOnFile(inputFile, CoreMetrics.COMMENT_LINES, fileLinesVisitor.getCommentLineCount()); FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(inputFile); for (int line : linesOfCode) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1); } for (int line : fileLinesVisitor.getExecutableLines()) { fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, line, 1); } fileLinesContext.save(); }
private void saveMeasures(InputFile inputFile, PythonVisitorContext visitorContext) { boolean ignoreHeaderComments = new PythonConfiguration(context.fileSystem().encoding()).getIgnoreHeaderComments(); FileMetrics fileMetrics = new FileMetrics(visitorContext, ignoreHeaderComments); FileLinesVisitor fileLinesVisitor = fileMetrics.fileLinesVisitor(); cpdAnalyzer.pushCpdTokens(inputFile, visitorContext); noSonarFilter.noSonarInFile(inputFile, fileLinesVisitor.getLinesWithNoSonar()); saveFilesComplexityDistribution(inputFile, fileMetrics); saveFunctionsComplexityDistribution(inputFile, fileMetrics); Set<Integer> linesOfCode = fileLinesVisitor.getLinesOfCode(); saveMetricOnFile(inputFile, CoreMetrics.NCLOC, linesOfCode.size()); saveMetricOnFile(inputFile, CoreMetrics.STATEMENTS, fileMetrics.numberOfStatements()); saveMetricOnFile(inputFile, CoreMetrics.FUNCTIONS, fileMetrics.numberOfFunctions()); saveMetricOnFile(inputFile, CoreMetrics.CLASSES, fileMetrics.numberOfClasses()); saveMetricOnFile(inputFile, CoreMetrics.COMPLEXITY, fileMetrics.complexity()); saveMetricOnFile(inputFile, CoreMetrics.COGNITIVE_COMPLEXITY, fileMetrics.cognitiveComplexity()); saveMetricOnFile(inputFile, CoreMetrics.COMMENT_LINES, fileLinesVisitor.getCommentLineCount()); FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(inputFile); for (int line : linesOfCode) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1); } for (int line : fileLinesVisitor.getExecutableLines()) { fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, line, 1); } fileLinesContext.save(); }
private void analyseFile(SensorContext context, PHPAnalyzer phpAnalyzer, InputFile inputFile) { try { phpAnalyzer.nextFile(new PhpFileImpl(inputFile)); if (inSonarQube(context)) { phpAnalyzer.getSyntaxHighlighting(context, inputFile).save(); phpAnalyzer.getSymbolHighlighting(context, inputFile).save(); saveNewFileMeasures(context, phpAnalyzer.computeMeasures(fileLinesContextFactory.createFor(inputFile)), inputFile); if (inSonarQube(context)) { saveCpdData(phpAnalyzer.computeCpdTokens(), inputFile, context); } } noSonarFilter.noSonarInFile(inputFile, phpAnalyzer.computeNoSonarLines()); saveIssues(context, phpAnalyzer.analyze(), inputFile); } catch (RecognitionException e) { checkInterrupted(e); LOG.error("Unable to parse file [{}] at line {}", inputFile.uri(), e.getLine()); LOG.error(e.getMessage()); saveParsingIssue(context, e, inputFile); } catch (Exception e) { checkInterrupted(e); throw new AnalysisException("Could not analyse " + inputFile.filename(), e); } }
private void analyseFile(SensorContext context, PHPAnalyzer phpAnalyzer, InputFile inputFile) { try { phpAnalyzer.nextFile(new PhpFileImpl(inputFile)); if (inSonarQube(context)) { phpAnalyzer.getSyntaxHighlighting(context, inputFile).save(); phpAnalyzer.getSymbolHighlighting(context, inputFile).save(); saveNewFileMeasures(context, phpAnalyzer.computeMeasures(fileLinesContextFactory.createFor(inputFile)), inputFile); if (inSonarQube(context)) { saveCpdData(phpAnalyzer.computeCpdTokens(), inputFile, context); } } noSonarFilter.noSonarInFile(inputFile, phpAnalyzer.computeNoSonarLines()); saveIssues(context, phpAnalyzer.analyze(), inputFile); } catch (RecognitionException e) { checkInterrupted(e); LOG.error("Unable to parse file [{}] at line {}", inputFile.uri(), e.getLine()); LOG.error(e.getMessage()); saveParsingIssue(context, e, inputFile); } catch (Exception e) { checkInterrupted(e); throw new AnalysisException("Could not analyse " + inputFile.filename(), e); } }