@@ -213,8 +213,26 @@ object Build {
213
213
)
214
214
}
215
215
216
+ private def allInputs (
217
+ inputs : Inputs ,
218
+ options : BuildOptions ,
219
+ logger : Logger
220
+ )(using ScalaCliInvokeData ) =
221
+ CrossSources .forInputs(
222
+ inputs,
223
+ Sources .defaultPreprocessors(
224
+ options.archiveCache,
225
+ options.internal.javaClassNameVersionOpt,
226
+ () => options.javaHome().value.javaCommand
227
+ ),
228
+ logger,
229
+ options.suppressWarningOptions,
230
+ options.internal.exclude
231
+ )
232
+
216
233
private def build (
217
234
inputs : Inputs ,
235
+ crossSources : CrossSources ,
218
236
options : BuildOptions ,
219
237
logger : Logger ,
220
238
buildClient : BloopBuildClient ,
@@ -225,20 +243,6 @@ object Build {
225
243
partial : Option [Boolean ],
226
244
actionableDiagnostics : Option [Boolean ]
227
245
)(using ScalaCliInvokeData ): Either [BuildException , Builds ] = either {
228
- // allInputs contains elements from using directives
229
- val (crossSources, allInputs) = value {
230
- CrossSources .forInputs(
231
- inputs,
232
- Sources .defaultPreprocessors(
233
- options.archiveCache,
234
- options.internal.javaClassNameVersionOpt,
235
- () => options.javaHome().value.javaCommand
236
- ),
237
- logger,
238
- options.suppressWarningOptions,
239
- options.internal.exclude
240
- )
241
- }
242
246
val sharedOptions = crossSources.sharedOptions(options)
243
247
val crossOptions = sharedOptions.crossOptions
244
248
@@ -274,15 +278,15 @@ object Build {
274
278
val scopedSources = value(crossSources.scopedSources(baseOptions))
275
279
276
280
val mainSources =
277
- value(scopedSources.sources(Scope .Main , baseOptions, allInputs .workspace, logger))
281
+ value(scopedSources.sources(Scope .Main , baseOptions, inputs .workspace, logger))
278
282
val mainOptions = mainSources.buildOptions
279
283
280
284
val testSources =
281
- value(scopedSources.sources(Scope .Test , baseOptions, allInputs .workspace, logger))
285
+ value(scopedSources.sources(Scope .Test , baseOptions, inputs .workspace, logger))
282
286
val testOptions = testSources.buildOptions
283
287
284
288
val inputs0 = updateInputs(
285
- allInputs ,
289
+ inputs ,
286
290
mainOptions, // update hash in inputs with options coming from the CLI or cross-building, not from the sources
287
291
Some (testOptions).filter(_ != mainOptions)
288
292
)
@@ -556,53 +560,60 @@ object Build {
556
560
buildTests : Boolean ,
557
561
partial : Option [Boolean ],
558
562
actionableDiagnostics : Option [Boolean ]
559
- )(using ScalaCliInvokeData ): Either [BuildException , Builds ] = {
563
+ )(using ScalaCliInvokeData ): Either [BuildException , Builds ] = either {
560
564
val buildClient = BloopBuildClient .create(
561
565
logger,
562
566
keepDiagnostics = options.internal.keepDiagnostics
563
567
)
564
- val classesDir0 = classesRootDir(inputs.workspace, inputs.projectName)
565
-
566
- compilerMaker.withCompiler(
567
- inputs.workspace / Constants .workspaceDirName,
568
- classesDir0,
569
- buildClient,
570
- logger
571
- ) { compiler =>
572
- docCompilerMakerOpt match {
573
- case None =>
574
- build(
575
- inputs = inputs,
576
- options = options,
577
- logger = logger,
578
- buildClient = buildClient,
579
- compiler = compiler,
580
- docCompilerOpt = None ,
581
- crossBuilds = crossBuilds,
582
- buildTests = buildTests,
583
- partial = partial,
584
- actionableDiagnostics = actionableDiagnostics
585
- )
586
- case Some (docCompilerMaker) =>
587
- docCompilerMaker.withCompiler(
588
- inputs.workspace / Constants .workspaceDirName,
589
- classesDir0, // ???
590
- buildClient,
591
- logger
592
- ) { docCompiler =>
568
+ val classesDir0 = classesRootDir(inputs.workspace, inputs.projectName)
569
+ val (crossSources, inputs0) = value(allInputs(inputs, options, logger))
570
+ val buildOptions = crossSources.sharedOptions(options)
571
+ value {
572
+ compilerMaker.withCompiler(
573
+ inputs0.workspace / Constants .workspaceDirName,
574
+ classesDir0,
575
+ buildClient,
576
+ logger,
577
+ buildOptions
578
+ ) { compiler =>
579
+ docCompilerMakerOpt match {
580
+ case None =>
593
581
build(
594
- inputs = inputs,
582
+ inputs = inputs0,
583
+ crossSources = crossSources,
595
584
options = options,
596
585
logger = logger,
597
586
buildClient = buildClient,
598
587
compiler = compiler,
599
- docCompilerOpt = Some (docCompiler) ,
588
+ docCompilerOpt = None ,
600
589
crossBuilds = crossBuilds,
601
590
buildTests = buildTests,
602
591
partial = partial,
603
592
actionableDiagnostics = actionableDiagnostics
604
593
)
605
- }
594
+ case Some (docCompilerMaker) =>
595
+ docCompilerMaker.withCompiler(
596
+ inputs0.workspace / Constants .workspaceDirName,
597
+ classesDir0, // ???
598
+ buildClient,
599
+ logger,
600
+ buildOptions
601
+ ) { docCompiler =>
602
+ build(
603
+ inputs = inputs0,
604
+ crossSources = crossSources,
605
+ options = options,
606
+ logger = logger,
607
+ buildClient = buildClient,
608
+ compiler = compiler,
609
+ docCompilerOpt = Some (docCompiler),
610
+ crossBuilds = crossBuilds,
611
+ buildTests = buildTests,
612
+ partial = partial,
613
+ actionableDiagnostics = actionableDiagnostics
614
+ )
615
+ }
616
+ }
606
617
}
607
618
}
608
619
}
@@ -638,35 +649,48 @@ object Build {
638
649
)
639
650
val threads = BuildThreads .create()
640
651
val classesDir0 = classesRootDir(inputs.workspace, inputs.projectName)
641
- val compiler = compilerMaker.create(
642
- inputs.workspace / Constants .workspaceDirName,
643
- classesDir0,
644
- buildClient,
645
- logger
646
- )
647
- val docCompilerOpt = docCompilerMakerOpt.map(_.create(
648
- inputs.workspace / Constants .workspaceDirName,
649
- classesDir0,
650
- buildClient,
651
- logger
652
- ))
652
+ val info = either {
653
+ val (crossSources, inputs0) = value(allInputs(inputs, options, logger))
654
+ val sharedOptions = crossSources.sharedOptions(options)
655
+ val compiler = value {
656
+ compilerMaker.create(
657
+ inputs0.workspace / Constants .workspaceDirName,
658
+ classesDir0,
659
+ buildClient,
660
+ logger,
661
+ sharedOptions
662
+ )
663
+ }
664
+ val docCompilerOpt = docCompilerMakerOpt.map(_.create(
665
+ inputs0.workspace / Constants .workspaceDirName,
666
+ classesDir0,
667
+ buildClient,
668
+ logger,
669
+ sharedOptions
670
+ )).map(value)
671
+ (compiler, docCompilerOpt, crossSources, inputs0)
672
+ }
653
673
654
674
var res : Either [BuildException , Builds ] = null
655
675
656
676
def run (): Unit = {
657
677
try {
658
- res = build(
659
- inputs,
660
- options,
661
- logger,
662
- buildClient,
663
- compiler,
664
- docCompilerOpt,
665
- crossBuilds = crossBuilds,
666
- buildTests = buildTests,
667
- partial = partial,
668
- actionableDiagnostics = actionableDiagnostics
669
- )
678
+ res =
679
+ info.flatMap { case (compiler, docCompilerOpt, crossSources, inputs) =>
680
+ build(
681
+ inputs,
682
+ crossSources,
683
+ options,
684
+ logger,
685
+ buildClient,
686
+ compiler,
687
+ docCompilerOpt,
688
+ crossBuilds = crossBuilds,
689
+ buildTests = buildTests,
690
+ partial = partial,
691
+ actionableDiagnostics = actionableDiagnostics
692
+ )
693
+ }
670
694
action(res)
671
695
}
672
696
catch {
@@ -678,7 +702,8 @@ object Build {
678
702
679
703
run()
680
704
681
- val watcher = new Watcher (ListBuffer (), threads.fileWatcher, run(), compiler.shutdown())
705
+ val watcher =
706
+ new Watcher (ListBuffer (), threads.fileWatcher, run(), info.foreach(_._1.shutdown()))
682
707
683
708
def doWatch (): Unit = {
684
709
val elements : Seq [Element ] =
@@ -1284,9 +1309,11 @@ object Build {
1284
1309
runJmh = build.options.jmhOptions.runJmh.map(_ => false )
1285
1310
)
1286
1311
)
1312
+ val (crossSources, inputs0) = value(allInputs(jmhInputs, updatedOptions, logger))
1287
1313
val jmhBuilds = value {
1288
1314
Build .build(
1289
- jmhInputs,
1315
+ inputs0,
1316
+ crossSources,
1290
1317
updatedOptions,
1291
1318
logger,
1292
1319
buildClient,
0 commit comments