Search in sources :

Example 16 with FileSystem

use of org.sonar.api.batch.fs.FileSystem in project sonar-java by SonarSource.

the class InternalCheckVerifier method sonarComponents.

private SonarComponents sonarComponents() {
    SensorContext sensorContext;
    if (isCacheEnabled) {
        sensorContext = new CacheEnabledSensorContext(readCache, writeCache);
    } else {
        sensorContext = new InternalSensorContext();
    }
    FileSystem fileSystem = sensorContext.fileSystem();
    Configuration config = sensorContext.config();
    ClasspathForMain classpathForMain = new ClasspathForMain(config, fileSystem);
    ClasspathForTest classpathForTest = new ClasspathForTest(config, fileSystem);
    SonarComponents sonarComponents = new SonarComponents(null, fileSystem, classpathForMain, classpathForTest, null) {

        @Override
        public boolean reportAnalysisError(RecognitionException re, InputFile inputFile) {
            throw new AssertionError(String.format("Should not fail analysis (%s)", re.getMessage()));
        }

        @Override
        public boolean canSkipUnchangedFiles() {
            return isCacheEnabled;
        }
    };
    sonarComponents.setSensorContext(sensorContext);
    return sonarComponents;
}
Also used : SensorContext(org.sonar.api.batch.sensor.SensorContext) SonarComponents(org.sonar.java.SonarComponents) Configuration(org.sonar.api.config.Configuration) ClasspathForTest(org.sonar.java.classpath.ClasspathForTest) FileSystem(org.sonar.api.batch.fs.FileSystem) ClasspathForMain(org.sonar.java.classpath.ClasspathForMain) RecognitionException(com.sonar.sslr.api.RecognitionException) InputFile(org.sonar.api.batch.fs.InputFile)

Example 17 with FileSystem

use of org.sonar.api.batch.fs.FileSystem in project sonar-iac by SonarSource.

the class IacSensor method execute.

@Override
public void execute(SensorContext sensorContext) {
    if (!isActive(sensorContext)) {
        return;
    }
    importExternalReports(sensorContext);
    DurationStatistics statistics = new DurationStatistics(sensorContext.config());
    FileSystem fileSystem = sensorContext.fileSystem();
    Iterable<InputFile> inputFiles = fileSystem.inputFiles(mainFilePredicate(sensorContext));
    List<String> filenames = StreamSupport.stream(inputFiles.spliterator(), false).map(InputFile::toString).collect(Collectors.toList());
    ProgressReport progressReport = new ProgressReport("Progress of the " + language.getName() + " analysis", TimeUnit.SECONDS.toMillis(10));
    progressReport.start(filenames);
    boolean success = false;
    Analyzer analyzer = new Analyzer(treeParser(), visitors(sensorContext, statistics), statistics);
    try {
        success = analyzer.analyseFiles(sensorContext, inputFiles, progressReport);
    } finally {
        if (success) {
            progressReport.stop();
        } else {
            progressReport.cancel();
        }
    }
    statistics.log();
}
Also used : FileSystem(org.sonar.api.batch.fs.FileSystem) ProgressReport(org.sonarsource.analyzer.commons.ProgressReport) InputFile(org.sonar.api.batch.fs.InputFile)

Example 18 with FileSystem

use of org.sonar.api.batch.fs.FileSystem in project sonar-web by SonarSource.

the class WebSensor method execute.

@Override
public void execute(SensorContext sensorContext) {
    // configure the lexer
    final PageLexer lexer = new PageLexer();
    FileSystem fileSystem = sensorContext.fileSystem();
    // configure page scanner and the visitors
    final HtmlAstScanner scanner = setupScanner(sensorContext);
    FilePredicates predicates = fileSystem.predicates();
    Iterable<InputFile> inputFiles = fileSystem.inputFiles(predicates.and(predicates.hasType(InputFile.Type.MAIN), predicates.hasLanguage(WebConstants.LANGUAGE_KEY)));
    for (InputFile inputFile : inputFiles) {
        WebSourceCode sourceCode = new WebSourceCode(inputFile);
        try (FileReader reader = new FileReader(inputFile.file())) {
            scanner.scan(lexer.parse(reader), sourceCode, fileSystem.encoding());
            saveMetrics(sensorContext, sourceCode);
            saveLineLevelMeasures(inputFile, sourceCode);
        } catch (Exception e) {
            LOG.error("Cannot analyze file " + inputFile.file().getAbsolutePath(), e);
        }
    }
}
Also used : PageLexer(org.sonar.plugins.web.lex.PageLexer) FileSystem(org.sonar.api.batch.fs.FileSystem) FilePredicates(org.sonar.api.batch.fs.FilePredicates) WebSourceCode(org.sonar.plugins.web.visitor.WebSourceCode) FileReader(java.io.FileReader) HtmlAstScanner(org.sonar.plugins.web.visitor.HtmlAstScanner) InputFile(org.sonar.api.batch.fs.InputFile)

Example 19 with FileSystem

use of org.sonar.api.batch.fs.FileSystem in project sonar-java by SonarSource.

the class JavaSquidTest method collectAnalysisErrors.

private SonarComponents collectAnalysisErrors(String code) throws IOException {
    SensorContextTester context = SensorContextTester.create(temp.getRoot().getAbsoluteFile());
    File file = temp.newFile().getAbsoluteFile();
    Files.write(code, file, StandardCharsets.UTF_8);
    DefaultInputFile defaultFile = new TestInputFileBuilder(temp.getRoot().getAbsolutePath(), file.getName()).setLanguage("java").initMetadata(new String(java.nio.file.Files.readAllBytes(file.getAbsoluteFile().toPath()), StandardCharsets.UTF_8)).setCharset(StandardCharsets.UTF_8).build();
    context.fileSystem().add(defaultFile);
    context.setRuntime(SonarRuntimeImpl.forSonarLint(Version.create(6, 7)));
    // Mock visitor for metrics.
    FileLinesContext fileLinesContext = mock(FileLinesContext.class);
    FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class);
    when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext);
    Server server = mock(Server.class);
    when(server.getPublicRootUrl()).thenReturn("https://sonarcloud.io");
    FileSystem fs = context.fileSystem();
    JavaClasspath javaClasspath = mock(JavaClasspath.class);
    JavaTestClasspath javaTestClasspath = mock(JavaTestClasspath.class);
    SonarComponents sonarComponents = new SonarComponents(fileLinesContextFactory, fs, javaClasspath, javaTestClasspath, mock(CheckFactory.class));
    sonarComponents.setSensorContext(context);
    JavaSquid javaSquid = new JavaSquid(new JavaVersionImpl(), sonarComponents, new Measurer(fs, context, mock(NoSonarFilter.class)), mock(JavaResourceLocator.class), null);
    javaSquid.scan(Collections.singletonList(file), Collections.emptyList());
    return sonarComponents;
}
Also used : SensorContextTester(org.sonar.api.batch.sensor.internal.SensorContextTester) Server(org.sonar.api.platform.Server) FileLinesContextFactory(org.sonar.api.measures.FileLinesContextFactory) JavaResourceLocator(org.sonar.plugins.java.api.JavaResourceLocator) InputFile(org.sonar.api.batch.fs.InputFile) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) TestInputFileBuilder(org.sonar.api.batch.fs.internal.TestInputFileBuilder) JavaVersionImpl(org.sonar.java.model.JavaVersionImpl) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) FileSystem(org.sonar.api.batch.fs.FileSystem) CheckFactory(org.sonar.api.batch.rule.CheckFactory) InputFile(org.sonar.api.batch.fs.InputFile) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) File(java.io.File) FileLinesContext(org.sonar.api.measures.FileLinesContext)

Example 20 with FileSystem

use of org.sonar.api.batch.fs.FileSystem in project sonar-java by SonarSource.

the class JavaSquidTest method number_of_visitors_in_sonarLint_context_LTS.

@Test
public void number_of_visitors_in_sonarLint_context_LTS() throws Exception {
    SensorContextTester context = SensorContextTester.create(temp.getRoot().getAbsoluteFile());
    // set up a file to analyze
    File file = temp.newFile().getAbsoluteFile();
    Files.write("/***/\nclass A {\n String foo() {\n  return foo();\n }\n}", file, StandardCharsets.UTF_8);
    DefaultInputFile defaultFile = new TestInputFileBuilder(temp.getRoot().getAbsolutePath(), file.getName()).setLanguage("java").initMetadata(new String(java.nio.file.Files.readAllBytes(file.getAbsoluteFile().toPath()), StandardCharsets.UTF_8)).setCharset(StandardCharsets.UTF_8).build();
    context.fileSystem().add(defaultFile);
    // Set sonarLint runtime
    context.setRuntime(SonarRuntimeImpl.forSonarLint(Version.create(6, 7)));
    // Mock visitor for metrics.
    FileLinesContext fileLinesContext = mock(FileLinesContext.class);
    FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class);
    when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext);
    FileSystem fs = context.fileSystem();
    JavaClasspath javaClasspath = mock(JavaClasspath.class);
    JavaTestClasspath javaTestClasspath = mock(JavaTestClasspath.class);
    SonarComponents sonarComponents = new SonarComponents(fileLinesContextFactory, fs, javaClasspath, javaTestClasspath, mock(CheckFactory.class));
    sonarComponents.setSensorContext(context);
    JavaSquid javaSquid = new JavaSquid(new JavaVersionImpl(), sonarComponents, new Measurer(fs, context, mock(NoSonarFilter.class)), mock(JavaResourceLocator.class), null);
    javaSquid.scan(Collections.singletonList(file), Collections.emptyList());
    // No symbol table : check reference to foo is empty.
    assertThat(context.referencesForSymbolAt(defaultFile.key(), 3, 8)).isNull();
    // No metrics on lines
    verify(fileLinesContext, never()).save();
    // No highlighting
    assertThat(context.highlightingTypeAt(defaultFile.key(), 1, 0)).isEmpty();
    // No measures
    assertThat(context.measures(defaultFile.key())).isEmpty();
    verify(javaClasspath, times(1)).getElements();
    verify(javaTestClasspath, times(1)).getElements();
}
Also used : SensorContextTester(org.sonar.api.batch.sensor.internal.SensorContextTester) FileLinesContextFactory(org.sonar.api.measures.FileLinesContextFactory) JavaResourceLocator(org.sonar.plugins.java.api.JavaResourceLocator) InputFile(org.sonar.api.batch.fs.InputFile) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) TestInputFileBuilder(org.sonar.api.batch.fs.internal.TestInputFileBuilder) JavaVersionImpl(org.sonar.java.model.JavaVersionImpl) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) FileSystem(org.sonar.api.batch.fs.FileSystem) CheckFactory(org.sonar.api.batch.rule.CheckFactory) InputFile(org.sonar.api.batch.fs.InputFile) DefaultInputFile(org.sonar.api.batch.fs.internal.DefaultInputFile) File(java.io.File) FileLinesContext(org.sonar.api.measures.FileLinesContext) Test(org.junit.Test)

Aggregations

FileSystem (org.sonar.api.batch.fs.FileSystem)34 InputFile (org.sonar.api.batch.fs.InputFile)31 FilePredicates (org.sonar.api.batch.fs.FilePredicates)21 File (java.io.File)7 FilePredicate (org.sonar.api.batch.fs.FilePredicate)5 SensorContext (org.sonar.api.batch.sensor.SensorContext)4 ArrayList (java.util.ArrayList)3 NewIssue (org.sonar.api.batch.sensor.issue.NewIssue)3 RecognitionException (com.sonar.sslr.api.RecognitionException)2 HashMap (java.util.HashMap)2 Map (java.util.Map)2 DefaultInputFile (org.sonar.api.batch.fs.internal.DefaultInputFile)2 TestInputFileBuilder (org.sonar.api.batch.fs.internal.TestInputFileBuilder)2 CheckFactory (org.sonar.api.batch.rule.CheckFactory)2 NewCoverage (org.sonar.api.batch.sensor.coverage.NewCoverage)2 SensorContextTester (org.sonar.api.batch.sensor.internal.SensorContextTester)2 NewIssueLocation (org.sonar.api.batch.sensor.issue.NewIssueLocation)2 Configuration (org.sonar.api.config.Configuration)2 FileLinesContext (org.sonar.api.measures.FileLinesContext)2 FileLinesContextFactory (org.sonar.api.measures.FileLinesContextFactory)2