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;
}
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();
}
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);
}
}
}
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;
}
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();
}
Aggregations