diff --git a/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java b/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java index 37658266d4a..fd1f5ff0597 100644 --- a/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java +++ b/java-frontend/src/main/java/org/sonar/java/JavaFrontend.java @@ -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; @@ -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; @@ -71,19 +69,24 @@ public JavaFrontend(JavaVersion javaVersion, @Nullable SonarComponents sonarComp commonVisitors.add(postAnalysisIssueFilter); } - Iterable codeVisitors = ListUtils.concat(commonVisitors, Arrays.asList(visitors)); - Collection testCodeVisitors = new ArrayList<>(commonVisitors); - Iterable measurers = Collections.singletonList(measurer); - codeVisitors = ListUtils.concat(measurers, codeVisitors); + List codeVisitors = new ArrayList<>(); + codeVisitors.add(measurer); + codeVisitors.addAll(commonVisitors); + codeVisitors.addAll(Arrays.asList(visitors)); + + List testCodeVisitors = new ArrayList<>(commonVisitors); testCodeVisitors.add(measurer.new TestFileMeasurer()); + List classpath = new ArrayList<>(); List testClasspath = new ArrayList<>(); List jspCodeVisitors = new ArrayList<>(); List 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(); @@ -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 codeVisitors, List 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 diff --git a/java-frontend/src/main/java/org/sonar/java/model/VisitorsBridge.java b/java-frontend/src/main/java/org/sonar/java/model/VisitorsBridge.java index e3f500c2df6..5cda049b30e 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/VisitorsBridge.java +++ b/java-frontend/src/main/java/org/sonar/java/model/VisitorsBridge.java @@ -75,6 +75,7 @@ public class VisitorsBridge { protected InputFile currentFile; protected final JavaVersion javaVersion; private final List classpath; + // `inAndroidContext` should be made private final protected boolean inAndroidContext = false; private int fullyScannedFileCount = 0; private int skippedFileCount = 0; @@ -92,6 +93,12 @@ public VisitorsBridge(Iterable visitors, List project this(visitors, projectClasspath, sonarComponents, new JavaVersionImpl()); } + public VisitorsBridge(Iterable visitors, List projectClasspath, @Nullable SonarComponents sonarComponents, JavaVersion javaVersion, + boolean inAndroidContext) { + this(visitors, projectClasspath, sonarComponents, javaVersion); + setInAndroidContext(inAndroidContext); + } + public VisitorsBridge(Iterable visitors, List projectClasspath, @Nullable SonarComponents sonarComponents, JavaVersion javaVersion) { this.visitors = visitors; this.allScanners = new ArrayList<>();