Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 14 additions & 17 deletions java-frontend/src/main/java/org/sonar/java/JavaFrontend.java
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
Expand All @@ -45,7 +44,6 @@
import org.sonar.plugins.java.api.JavaCheck;
import org.sonar.plugins.java.api.JavaResourceLocator;
import org.sonar.plugins.java.api.JavaVersion;
import org.sonarsource.analyzer.commons.collections.ListUtils;
import org.sonarsource.performance.measure.PerformanceMeasure;
import org.sonarsource.performance.measure.PerformanceMeasure.Duration;

Expand All @@ -71,19 +69,24 @@ public JavaFrontend(JavaVersion javaVersion, @Nullable SonarComponents sonarComp
commonVisitors.add(postAnalysisIssueFilter);
}

Iterable<JavaCheck> codeVisitors = ListUtils.concat(commonVisitors, Arrays.asList(visitors));
Collection<JavaCheck> testCodeVisitors = new ArrayList<>(commonVisitors);
Iterable<JavaCheck> measurers = Collections.singletonList(measurer);
codeVisitors = ListUtils.concat(measurers, codeVisitors);
List<JavaCheck> codeVisitors = new ArrayList<>();
codeVisitors.add(measurer);
codeVisitors.addAll(commonVisitors);
codeVisitors.addAll(Arrays.asList(visitors));

List<JavaCheck> testCodeVisitors = new ArrayList<>(commonVisitors);
testCodeVisitors.add(measurer.new TestFileMeasurer());

List<File> classpath = new ArrayList<>();
List<File> testClasspath = new ArrayList<>();
List<JavaCheck> jspCodeVisitors = new ArrayList<>();
List<File> jspClasspath = new ArrayList<>();
boolean inAndroidContext = false;

if (sonarComponents != null) {
if (!sonarComponents.isSonarLintContext()) {
codeVisitors = ListUtils.concat(codeVisitors, Arrays.asList(new FileLinesVisitor(sonarComponents), new SyntaxHighlighterVisitor(sonarComponents)));
codeVisitors.add(new FileLinesVisitor(sonarComponents));
codeVisitors.add(new SyntaxHighlighterVisitor(sonarComponents));
testCodeVisitors.add(new SyntaxHighlighterVisitor(sonarComponents));
}
classpath = sonarComponents.getJavaClasspath();
Expand All @@ -93,27 +96,21 @@ public JavaFrontend(JavaVersion javaVersion, @Nullable SonarComponents sonarComp
jspCodeVisitors = sonarComponents.jspChecks();
inAndroidContext = sonarComponents.inAndroidContext();
}

globalClasspath = Stream.of(classpath, testClasspath, jspClasspath)
.flatMap(Collection::stream).distinct().toList();

//AstScanner for main files
astScanner = new JavaAstScanner(sonarComponents);
astScanner.setVisitorBridge(createVisitorBridge(codeVisitors, classpath, javaVersion, sonarComponents, inAndroidContext));
astScanner.setVisitorBridge(new VisitorsBridge(codeVisitors, classpath, sonarComponents, javaVersion, inAndroidContext));

//AstScanner for test files
astScannerForTests = new JavaAstScanner(sonarComponents);
astScannerForTests.setVisitorBridge(createVisitorBridge(testCodeVisitors, testClasspath, javaVersion, sonarComponents, inAndroidContext));
astScannerForTests.setVisitorBridge(new VisitorsBridge(testCodeVisitors, testClasspath, sonarComponents, javaVersion, inAndroidContext));

//AstScanner for generated files
astScannerForGeneratedFiles = new JavaAstScanner(sonarComponents);
astScannerForGeneratedFiles.setVisitorBridge(createVisitorBridge(jspCodeVisitors, jspClasspath, javaVersion, sonarComponents, inAndroidContext));
}

private static VisitorsBridge createVisitorBridge(
Iterable<JavaCheck> codeVisitors, List<File> classpath, JavaVersion javaVersion, @Nullable SonarComponents sonarComponents, boolean inAndroidContext) {
VisitorsBridge visitorsBridge = new VisitorsBridge(codeVisitors, classpath, sonarComponents, javaVersion);
visitorsBridge.setInAndroidContext(inAndroidContext);
return visitorsBridge;
astScannerForGeneratedFiles.setVisitorBridge(new VisitorsBridge(jspCodeVisitors, jspClasspath, sonarComponents, javaVersion, inAndroidContext));
}

@VisibleForTesting
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ public class VisitorsBridge {
protected InputFile currentFile;
protected final JavaVersion javaVersion;
private final List<File> classpath;
// `inAndroidContext` should be made private final
protected boolean inAndroidContext = false;
private int fullyScannedFileCount = 0;
private int skippedFileCount = 0;
Expand All @@ -92,6 +93,12 @@ public VisitorsBridge(Iterable<? extends JavaCheck> visitors, List<File> project
this(visitors, projectClasspath, sonarComponents, new JavaVersionImpl());
}

public VisitorsBridge(Iterable<? extends JavaCheck> visitors, List<File> projectClasspath, @Nullable SonarComponents sonarComponents, JavaVersion javaVersion,
boolean inAndroidContext) {
this(visitors, projectClasspath, sonarComponents, javaVersion);
setInAndroidContext(inAndroidContext);
}

public VisitorsBridge(Iterable<? extends JavaCheck> visitors, List<File> projectClasspath, @Nullable SonarComponents sonarComponents, JavaVersion javaVersion) {
this.visitors = visitors;
this.allScanners = new ArrayList<>();
Expand Down