3131import org .slf4j .Logger ;
3232import org .slf4j .LoggerFactory ;
3333import org .sonar .api .batch .fs .InputFile ;
34- import org .sonar .java .annotations .VisibleForTesting ;
3534import org .sonar .java .ast .JavaAstScanner ;
3635import org .sonar .java .ast .visitors .FileLinesVisitor ;
3736import org .sonar .java .ast .visitors .SyntaxHighlighterVisitor ;
@@ -59,7 +58,7 @@ public class JavaFrontend {
5958 private final JavaAstScanner astScannerForTests ;
6059 private final JavaAstScanner astScannerForGeneratedFiles ;
6160
62- public JavaFrontend (JavaVersion javaVersion , @ Nullable SonarComponents sonarComponents , Measurer measurer ,
61+ public JavaFrontend (JavaVersion javaVersion , SonarComponents sonarComponents , Measurer measurer ,
6362 JavaResourceLocator javaResourceLocator , @ Nullable SonarJavaIssueFilter postAnalysisIssueFilter , JavaCheck ... visitors ) {
6463 this .javaVersion = javaVersion ;
6564 this .sonarComponents = sonarComponents ;
@@ -77,25 +76,17 @@ public JavaFrontend(JavaVersion javaVersion, @Nullable SonarComponents sonarComp
7776 List <JavaCheck > testCodeVisitors = new ArrayList <>(commonVisitors );
7877 testCodeVisitors .add (measurer .new TestFileMeasurer ());
7978
80- List <File > classpath = new ArrayList <>();
81- List <File > testClasspath = new ArrayList <>();
82- List <JavaCheck > jspCodeVisitors = new ArrayList <>();
83- List <File > jspClasspath = new ArrayList <>();
84- boolean inAndroidContext = false ;
85-
86- if (sonarComponents != null ) {
87- if (!sonarComponents .isSonarLintContext ()) {
88- codeVisitors .add (new FileLinesVisitor (sonarComponents ));
89- codeVisitors .add (new SyntaxHighlighterVisitor (sonarComponents ));
90- testCodeVisitors .add (new SyntaxHighlighterVisitor (sonarComponents ));
91- }
92- classpath = sonarComponents .getJavaClasspath ();
93- testClasspath = sonarComponents .getJavaTestClasspath ();
94- jspClasspath = sonarComponents .getJspClasspath ();
95- testCodeVisitors .addAll (sonarComponents .testChecks ());
96- jspCodeVisitors = sonarComponents .jspChecks ();
97- inAndroidContext = sonarComponents .inAndroidContext ();
79+ if (!sonarComponents .isSonarLintContext ()) {
80+ codeVisitors .add (new FileLinesVisitor (sonarComponents ));
81+ codeVisitors .add (new SyntaxHighlighterVisitor (sonarComponents ));
82+ testCodeVisitors .add (new SyntaxHighlighterVisitor (sonarComponents ));
9883 }
84+ List <File > classpath = sonarComponents .getJavaClasspath ();
85+ List <File > testClasspath = sonarComponents .getJavaTestClasspath ();
86+ List <File > jspClasspath = sonarComponents .getJspClasspath ();
87+ testCodeVisitors .addAll (sonarComponents .testChecks ());
88+ List <JavaCheck > jspCodeVisitors = sonarComponents .jspChecks ();
89+ boolean inAndroidContext = sonarComponents .inAndroidContext ();
9990
10091 globalClasspath = Stream .of (classpath , testClasspath , jspClasspath )
10192 .flatMap (Collection ::stream ).distinct ().toList ();
@@ -113,11 +104,6 @@ public JavaFrontend(JavaVersion javaVersion, @Nullable SonarComponents sonarComp
113104 astScannerForGeneratedFiles .setVisitorBridge (new VisitorsBridge (jspCodeVisitors , jspClasspath , sonarComponents , javaVersion , inAndroidContext ));
114105 }
115106
116- @ VisibleForTesting
117- boolean analysisCancelled () {
118- return sonarComponents != null && sonarComponents .analysisCancelled ();
119- }
120-
121107 public void scan (Iterable <InputFile > sourceFiles , Iterable <InputFile > testFiles , Iterable <? extends InputFile > generatedFiles ) {
122108 if (canOptimizeScanning ()) {
123109 long successfullyScanned = 0L ;
@@ -147,13 +133,12 @@ public void scan(Iterable<InputFile> sourceFiles, Iterable<InputFile> testFiles,
147133 }
148134
149135 // SonarLint is not compatible with batch mode, it needs InputFile#contents() and batch mode use InputFile#absolutePath()
150- boolean isSonarLint = sonarComponents != null && sonarComponents .isSonarLintContext ();
151- boolean fileByFileMode = isSonarLint || isFileByFileEnabled ();
136+ boolean fileByFileMode = sonarComponents .isSonarLintContext () || sonarComponents .isFileByFileEnabled ();
152137 if (fileByFileMode ) {
153138 scanAndMeasureTask (sourceFiles , astScanner ::scan , "Main" );
154139 scanAndMeasureTask (testFiles , astScannerForTests ::scan , "Test" );
155140 scanAndMeasureTask (generatedFiles , astScannerForGeneratedFiles ::scan , "Generated" );
156- } else if (isAutoScan ()) {
141+ } else if (sonarComponents . isAutoScan ()) {
157142 scanAsBatch (new AutoScanBatchContext (), sourceFiles , testFiles );
158143 } else {
159144 scanAsBatch (new DefaultBatchModeContext (astScanner , "Main" ), sourceFiles );
@@ -204,7 +189,7 @@ private void scanAsBatch(BatchModeContext context, Iterable<? extends InputFile>
204189 private void scanInBatches (BatchModeContext context , List <InputFile > allInputFiles ) {
205190 String logUsingBatch = String .format ("Using ECJ batch to parse %d %s java source files" , allInputFiles .size (), context .descriptor ());
206191 AnalysisProgress analysisProgress = new AnalysisProgress (allInputFiles .size ());
207- long batchModeSizeInKB = getBatchModeSizeInKB ();
192+ long batchModeSizeInKB = sonarComponents . getBatchModeSizeInKB ();
208193 if (batchModeSizeInKB < 0L || batchModeSizeInKB >= Long .MAX_VALUE / 1_000L ) {
209194 LOG .info ("{} in a single batch." , logUsingBatch );
210195 scanBatch (context , allInputFiles , analysisProgress );
@@ -222,10 +207,9 @@ private void scanInBatches(BatchModeContext context, List<InputFile> allInputFil
222207 private <T extends InputFile > void scanBatch (BatchModeContext context , List <T > batchFiles , AnalysisProgress analysisProgress ) {
223208 analysisProgress .startBatch (batchFiles .size ());
224209 Set <Runnable > environmentsCleaners = new HashSet <>();
225- boolean shouldIgnoreUnnamedModuleForSplitPackage = sonarComponents != null && sonarComponents .shouldIgnoreUnnamedModuleForSplitPackage ();
226210 JParserConfig .Mode .BATCH
227- .create (javaVersion , context .getClasspath (), shouldIgnoreUnnamedModuleForSplitPackage )
228- .parse (batchFiles , this ::analysisCancelled , analysisProgress , (input , result ) -> scanAsBatchCallback (input , result , context , environmentsCleaners ));
211+ .create (javaVersion , context .getClasspath (), sonarComponents . shouldIgnoreUnnamedModuleForSplitPackage () )
212+ .parse (batchFiles , sonarComponents ::analysisCancelled , analysisProgress , (input , result ) -> scanAsBatchCallback (input , result , context , environmentsCleaners ));
229213 // Due to a bug in ECJ, JAR files remain locked after the analysis on Windows, we unlock them manually, at the end of each batches. See SONARJAVA-3609.
230214 environmentsCleaners .forEach (Runnable ::run );
231215 analysisProgress .endBatch ();
@@ -320,28 +304,13 @@ public void endOfAnalysis() {
320304
321305 }
322306
323- @ VisibleForTesting
324- boolean isFileByFileEnabled () {
325- return sonarComponents != null && sonarComponents .isFileByFileEnabled ();
326- }
327-
328- @ VisibleForTesting
329- boolean isAutoScan () {
330- return sonarComponents != null && sonarComponents .isAutoScan ();
331- }
332-
333- @ VisibleForTesting
334- long getBatchModeSizeInKB () {
335- return sonarComponents == null ? -1L : sonarComponents .getBatchModeSizeInKB ();
336- }
337-
338307 private boolean isCacheEnabled () {
339- return sonarComponents != null && CacheContextImpl .of (sonarComponents ).isCacheEnabled ();
308+ return CacheContextImpl .of (sonarComponents ).isCacheEnabled ();
340309 }
341310
342311 private boolean canOptimizeScanning () {
343312 try {
344- return sonarComponents != null && sonarComponents .canSkipUnchangedFiles () && isCacheEnabled ();
313+ return sonarComponents .canSkipUnchangedFiles () && isCacheEnabled ();
345314 } catch (ApiMismatchException e ) {
346315 return false ;
347316 }
0 commit comments