@@ -32,13 +32,15 @@ object JavaFormatter {
3232 private val GoogleJavaFormatMain = " com.google.googlejavaformat.java.Main"
3333 private val JavaHomeEnvVar = " SBT_JAVAFMT_JAVA_HOME"
3434 private val JavaHomeProperty = " sbt-javafmt.java.home"
35- private val incompatibleJavaRuntimeHelpLogged = new AtomicBoolean (false )
35+ private val incompatibleJavaRuntimeHelpLoggedByProject =
36+ new scala.collection.concurrent.TrieMap [String , AtomicBoolean ]
3637
3738 private val JavaExports = Seq (" api" , " code" , " file" , " parser" , " tree" , " util" ).map { exportedPackage =>
3839 s " --add-exports=jdk.compiler/com.sun.tools.javac. $exportedPackage=ALL-UNNAMED "
3940 }
4041
4142 def apply (
43+ projectId : String ,
4244 sourceDirectories : Seq [File ],
4345 includeFilter : FileFilter ,
4446 excludeFilter : FileFilter ,
@@ -55,6 +57,7 @@ object JavaFormatter {
5557 cacheStoreFactory,
5658 files,
5759 streams.log,
60+ projectId,
5861 options,
5962 formatterClasspath,
6063 javaMaxHeap,
@@ -65,6 +68,7 @@ object JavaFormatter {
6568 }
6669
6770 def fixImports (
71+ projectId : String ,
6872 sourceDirectories : Seq [File ],
6973 includeFilter : FileFilter ,
7074 excludeFilter : FileFilter ,
@@ -81,6 +85,7 @@ object JavaFormatter {
8185 cacheStoreFactory,
8286 files,
8387 streams.log,
88+ projectId,
8489 options,
8590 formatterClasspath,
8691 javaMaxHeap,
@@ -91,6 +96,7 @@ object JavaFormatter {
9196 }
9297
9398 def check (
99+ projectId : String ,
94100 baseDir : File ,
95101 sourceDirectories : Seq [File ],
96102 includeFilter : FileFilter ,
@@ -110,6 +116,7 @@ object JavaFormatter {
110116 baseDir,
111117 files,
112118 streams.log,
119+ projectId,
113120 options,
114121 formatterClasspath,
115122 javaMaxHeap,
@@ -121,6 +128,7 @@ object JavaFormatter {
121128 }
122129
123130 def fixImportsCheck (
131+ projectId : String ,
124132 baseDir : File ,
125133 sourceDirectories : Seq [File ],
126134 includeFilter : FileFilter ,
@@ -140,6 +148,7 @@ object JavaFormatter {
140148 baseDir,
141149 files,
142150 streams.log,
151+ projectId,
143152 options,
144153 formatterClasspath,
145154 javaMaxHeap,
@@ -178,6 +187,7 @@ object JavaFormatter {
178187 baseDir : File ,
179188 sources : Seq [File ],
180189 log : Logger ,
190+ projectId : String ,
181191 options : JavaFormatterOptions ,
182192 formatterClasspath : Seq [File ],
183193 javaMaxHeap : Option [String ],
@@ -195,6 +205,7 @@ object JavaFormatter {
195205 baseDir,
196206 filesToCheck.toList,
197207 log,
208+ projectId,
198209 options,
199210 formatterClasspath,
200211 javaMaxHeap,
@@ -214,6 +225,7 @@ object JavaFormatter {
214225 baseDir : File ,
215226 sources : Seq [File ],
216227 log : Logger ,
228+ projectId : String ,
217229 options : JavaFormatterOptions ,
218230 formatterClasspath : Seq [File ],
219231 javaMaxHeap : Option [String ],
@@ -229,6 +241,7 @@ object JavaFormatter {
229241 baseDir,
230242 sources,
231243 log,
244+ projectId,
232245 options,
233246 formatterClasspath,
234247 javaMaxHeap,
@@ -244,6 +257,7 @@ object JavaFormatter {
244257 cacheStoreFactory : CacheStoreFactory ,
245258 sources : Seq [File ],
246259 log : Logger ,
260+ projectId : String ,
247261 options : JavaFormatterOptions ,
248262 formatterClasspath : Seq [File ],
249263 javaMaxHeap : Option [String ],
@@ -260,6 +274,7 @@ object JavaFormatter {
260274 formatSources(
261275 filesToFormat,
262276 log,
277+ projectId,
263278 options,
264279 formatterClasspath,
265280 javaMaxHeap,
@@ -275,6 +290,7 @@ object JavaFormatter {
275290 private def formatSources (
276291 sources : Set [File ],
277292 log : Logger ,
293+ projectId : String ,
278294 options : JavaFormatterOptions ,
279295 formatterClasspath : Seq [File ],
280296 javaMaxHeap : Option [String ],
@@ -287,6 +303,7 @@ object JavaFormatter {
287303 baseDir = new File (" ." ),
288304 sources.toList,
289305 log,
306+ projectId,
290307 options,
291308 formatterClasspath,
292309 javaMaxHeap,
@@ -299,6 +316,7 @@ object JavaFormatter {
299316 runReplace(
300317 changed.toList,
301318 log,
319+ projectId,
302320 options,
303321 formatterClasspath,
304322 javaMaxHeap,
@@ -357,11 +375,13 @@ object JavaFormatter {
357375
358376 private case class CliResult (exitCode : Int , stdout : Vector [String ], stderr : Vector [String ])
359377
360- private def logCliFailure (result : CliResult , log : Logger ): Unit = {
378+ private def logCliFailure (result : CliResult , log : Logger , projectId : String ): Unit = {
361379 result.stderr.foreach(line => log.error(line))
362380 result.stdout.foreach(line => log.error(line))
363381 incompatibleJavaRuntimeHelp(result).foreach { message =>
364- if (incompatibleJavaRuntimeHelpLogged.compareAndSet(false , true )) {
382+ val loggedForProject =
383+ incompatibleJavaRuntimeHelpLoggedByProject.getOrElseUpdate(projectId, new AtomicBoolean (false ))
384+ if (loggedForProject.compareAndSet(false , true )) {
365385 log.info(message)
366386 }
367387 }
@@ -449,6 +469,7 @@ object JavaFormatter {
449469 baseDir : File ,
450470 sources : Seq [File ],
451471 log : Logger ,
472+ projectId : String ,
452473 options : JavaFormatterOptions ,
453474 formatterClasspath : Seq [File ],
454475 javaMaxHeap : Option [String ],
@@ -469,13 +490,13 @@ object JavaFormatter {
469490 result.exitCode match {
470491 case 0 | 1 =>
471492 if (result.exitCode == 1 && changed.isEmpty) {
472- logCliFailure(result, log)
493+ logCliFailure(result, log, projectId )
473494 throw new MessageOnlyException (" google-java-format check failed" )
474495 }
475496 changed
476497 case _ =>
477498 if (warnOnFailure) {
478- logCliFailure(result, log)
499+ logCliFailure(result, log, projectId )
479500 }
480501 throw new MessageOnlyException (" google-java-format check failed" )
481502 }
@@ -484,6 +505,7 @@ object JavaFormatter {
484505 private def runReplace (
485506 sources : Seq [File ],
486507 log : Logger ,
508+ projectId : String ,
487509 options : JavaFormatterOptions ,
488510 formatterClasspath : Seq [File ],
489511 javaMaxHeap : Option [String ],
@@ -499,8 +521,7 @@ object JavaFormatter {
499521 " --replace" ) ++ sources.map(_.getAbsolutePath)
500522 val result = runCli(args, formatterClasspath, log, javaMaxHeap)
501523 if (result.exitCode != 0 ) {
502- result.stderr.foreach(line => log.error(line))
503- result.stdout.foreach(line => log.error(line))
524+ logCliFailure(result, log, projectId)
504525 throw new MessageOnlyException (" google-java-format failed" )
505526 }
506527 }
0 commit comments