private void saveMeasure(FileLinesContext context, String metricKey, Map<Integer, Integer> values) { for (Map.Entry<Integer, Integer> entry : values.entrySet()) { context.setIntValue(metricKey, entry.getKey(), entry.getValue()); } }
private void processFileMeasures(InputFile inputFile, SensorContext context) { File ioFile = inputFile.file(); File measureFile = new File(ioFile.getParentFile(), ioFile.getName() + MEASURES_EXTENSION); if (measureFile.exists()) { LOG.debug("Processing " + measureFile.getAbsolutePath()); try { FileLinesContext linesContext = contextFactory.createFor(inputFile); List<String> lines = FileUtils.readLines(measureFile, context.fileSystem().encoding().name()); int lineNumber = 0; for (String line : lines) { lineNumber++; if (StringUtils.isBlank(line) || line.startsWith("#")) { continue; } processMeasure(linesContext, measureFile, lineNumber, line); } linesContext.save(); } catch (IOException e) { throw new IllegalStateException(e); } } }
private void saveLineLevelMeasures(InputFile inputFile, HtmlSourceCode htmlSourceCode) { FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(inputFile); for (Integer line : htmlSourceCode.getDetailedLinesOfCode()) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, 1); } fileLinesContext.save(); }
@Override public void leaveFile(AstNode astNode) { int fileLength = getContext().peekSourceCode().getInt(CSharpMetric.LINES); for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, linesOfComments.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); linesOfComments.clear(); }
public static void saveLineLevelMeasures(InputFile inputFile, HtmlSourceCode htmlSourceCode, FileLinesContextFactory fileLinesContextFactory) { FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(inputFile); final int lineContainsCode = 1; for (Integer line : htmlSourceCode.getDetailedLinesOfCode()) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, lineContainsCode); } fileLinesContext.save(); }
private static void saveLinesMetrics(FileLinesContext linesContext, Set<Integer> lines, String metricKey) { lines.forEach(line -> linesContext.setIntValue(metricKey, line, 1)); }
private void processFileMeasures(InputFile inputFile, SensorContext context) { File ioFile = inputFile.file(); File measureFile = new File(ioFile.getParentFile(), ioFile.getName() + MEASURES_EXTENSION); if (measureFile.exists()) { LOG.debug("Processing " + measureFile.getAbsolutePath()); try { FileLinesContext linesContext = contextFactory.createFor(inputFile); List<String> lines = FileUtils.readLines(measureFile, context.fileSystem().encoding().name()); int lineNumber = 0; for (String line : lines) { lineNumber++; if (StringUtils.isBlank(line) || line.startsWith("#")) { continue; } processMeasure(linesContext, measureFile, lineNumber, line); } linesContext.save(); } catch (IOException e) { throw new IllegalStateException(e); } } }
@Override public void scanFile(JavaFileScannerContext context) { super.scanFile(context); File currentFile = context.getFile(); FileLinesContext fileLinesContext = sonarComponents.fileLinesContextFor(currentFile); int fileLength = sonarComponents.fileLength(currentFile); for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, line, executableLines.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); executableLines.clear(); }
private void saveMeasure(FileLinesContext context, String metricKey, Map<Integer, Integer> values) { for (Map.Entry<Integer, Integer> entry : values.entrySet()) { context.setIntValue(metricKey, entry.getKey(), entry.getValue()); } }
private void saveMetrics(Metrics metrics, SensorContext context, InputFile inputFile) { saveMetric(context, inputFile, CoreMetrics.NCLOC, metrics.linesOfCode.size()); saveMetric(context, inputFile, CoreMetrics.COMMENT_LINES, metrics.commentLines.size()); saveMetric(context, inputFile, CoreMetrics.CLASSES, metrics.numberOfClasses); saveMetric(context, inputFile, CoreMetrics.FUNCTIONS, metrics.numberOfFunctions); saveMetric(context, inputFile, CoreMetrics.STATEMENTS, metrics.numberOfStatements); saveMetric(context, inputFile, CoreMetrics.COGNITIVE_COMPLEXITY, metrics.cognitiveComplexity); FileLinesContext linesContext = fileLinesContextFactory.createFor(inputFile); saveLinesMetrics(linesContext, metrics.linesOfCode, CoreMetrics.NCLOC_DATA_KEY); saveLinesMetrics(linesContext, metrics.commentLines, CoreMetrics.COMMENT_LINES_DATA_KEY); saveLinesMetrics(linesContext, metrics.executableLines, CoreMetrics.EXECUTABLE_LINES_DATA_KEY); linesContext.save(); }
@Override public void scanFile(JavaFileScannerContext context) { super.scanFile(context); File currentFile = context.getFile(); FileLinesContext fileLinesContext = sonarComponents.fileLinesContextFor(currentFile); int fileLength = sonarComponents.fileLength(currentFile); for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, line, executableLines.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); executableLines.clear(); }
private void handleToken(Token token, int nextTokenLine, List<String> lines) { int tokenType = token.getType(); int tokenLine = token.getLine(); if (isComment(tokenType)) { if (isNotHeaderComment(tokenLine)) { comments += nextTokenLine - tokenLine + 1 - numberEmptyLines(token, lines); } for (int commentLineNb = tokenLine; commentLineNb <= nextTokenLine; commentLineNb++) { fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, commentLineNb, 1); } } else if (isNotWhitespace(tokenType) && tokenLine != currentLine) { loc++; fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, tokenLine, 1); currentLine = tokenLine; } }
LOG.error("Unable to read file: " + file.getName(), e); fileLinesContext.save();
private void saveLineLevelMeasures(File sonarFile, WebSourceCode webSourceCode) { FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(sonarFile); Set<Integer> linesOfCode = webSourceCode.getDetailedLinesOfCode(); Set<Integer> linesOfComments = webSourceCode.getDetailedLinesOfComments(); for (int line = 1; line <= webSourceCode.getMeasure(CoreMetrics.LINES).getIntValue(); line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, linesOfComments.contains(line) ? 1 : 0); } fileLinesContext.save(); }
@Test public void test() { String filename = "metrics/lines_of_code.php"; PhpFile file = FileTestUtils.getFile(new File("src/test/resources/"+filename)); FileLinesContext fileLinesContext = mock(FileLinesContext.class); FileMeasures fileMeasures = new MetricsVisitor().getFileMeasures(file, parse(filename), fileLinesContext); assertThat(fileMeasures.getFileComplexity()).isEqualTo(1); assertThat(fileMeasures.getFileCognitiveComplexity()).isEqualTo(0); assertThat(fileMeasures.getClassComplexity()).isEqualTo(1); assertThat(fileMeasures.getFunctionComplexity()).isEqualTo(1); assertThat(fileMeasures.getFileComplexityDistribution().build()).isEqualTo("0=1;5=0;10=0;20=0;30=0;60=0;90=0"); assertThat(fileMeasures.getFunctionComplexityDistribution().build()).isEqualTo("1=1;2=0;4=0;6=0;8=0;10=0;12=0"); assertThat(fileMeasures.getFunctionNumber()).isEqualTo(1); assertThat(fileMeasures.getStatementNumber()).isEqualTo(2); assertThat(fileMeasures.getClassNumber()).isEqualTo(1); assertThat(fileMeasures.getLinesOfCodeNumber()).isEqualTo(7); assertThat(fileMeasures.getCommentLinesNumber()).isEqualTo(5); verify(fileLinesContext).setIntValue(CoreMetrics.EXECUTABLE_LINES_DATA_KEY, 21, 1); }
@Override public void scanFile(JavaFileScannerContext context) { super.scanFile(context); FileLinesContext fileLinesContext = sonarComponents.fileLinesContextFor(context.getFile()); // TODO minimize access to files, another one in LinesVisitor int fileLength; try { fileLength = Files.readLines(context.getFile(), charset).size(); } catch (IOException e) { throw Throwables.propagate(e); } for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, linesOfComments.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); linesOfComments.clear(); }
@Override public void leaveFile(AstNode astNode) { File sonarFile = File.fromIOFile(getContext().getFile(), project); FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(sonarFile); int fileLength = getContext().peekSourceCode().getInt(FlexMetric.LINES); for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, linesOfComments.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); linesOfComments.clear(); }
@Override public void leaveFile(AstNode astNode) { FileLinesContext fileLinesContext = sonarComponents.fileLinesContextFor(getContext().getFile()); // TODO minimize access to files, another one in LinesVisitor int fileLength; try { fileLength = Files.readLines(getContext().getFile(), charset).size(); } catch (IOException e) { throw Throwables.propagate(e); } for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, linesOfComments.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); linesOfComments.clear(); }
@Override public void leaveFile(AstNode astNode) { File sonarFile = File.fromIOFile(getContext().getFile(), project); FileLinesContext fileLinesContext = fileLinesContextFactory.createFor(sonarFile); int fileLength = getContext().peekSourceCode().getInt(CssMetric.LINES); for (int line = 1; line <= fileLength; line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, linesOfCode.contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, linesOfComments.contains(line) ? 1 : 0); } fileLinesContext.save(); linesOfCode.clear(); linesOfComments.clear(); }
/** * Saves the measures of the passed YAML file: lines of code and comments * * @param yamlFile the YAML file being analyzed * @param data the {@code LineCountData} describing this YAML file * @param fileLinesContext {@code FileLinesContext} used to save the code lines and comments of the YAML file * @param context the {@code SensorContext} */ private static void saveMeasures(InputFile yamlFile, LineCountData data, FileLinesContext fileLinesContext, SensorContext context) { for (int line = 1; line <= data.linesNumber(); line++) { fileLinesContext.setIntValue(CoreMetrics.NCLOC_DATA_KEY, line, data.linesOfCodeLines().contains(line) ? 1 : 0); fileLinesContext.setIntValue(CoreMetrics.COMMENT_LINES_DATA_KEY, line, data.effectiveCommentLines().contains(line) ? 1 : 0); } fileLinesContext.save(); saveMeasure(context, yamlFile, CoreMetrics.COMMENT_LINES, data.effectiveCommentLines().size()); saveMeasure(context, yamlFile, CoreMetrics.NCLOC, data.linesOfCodeLines().size()); }