Skip to content

Commit 7cdfdaf

Browse files
committed
Log Java runtime mismatch hints once per project (instead of once globally)
1 parent d5d35b1 commit 7cdfdaf

2 files changed

Lines changed: 36 additions & 7 deletions

File tree

plugin/src/main/scala/com/github/sbt/JavaFormatterPlugin.scala

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ object JavaFormatterPlugin extends AutoPlugin {
130130
.build(),
131131
javafmt := {
132132
val streamz = streams.value
133+
val projectId = thisProjectRef.value.project
133134
val sD = (javafmt / sourceDirectories).value.toList
134135
val iF = (javafmt / includeFilter).value
135136
val eF = (javafmt / excludeFilter).value
@@ -141,6 +142,7 @@ object JavaFormatterPlugin extends AutoPlugin {
141142
val removeUnusedImports = javafmtRemoveUnusedImports.value
142143
val reflowLongStrings = javafmtReflowLongStrings.value
143144
JavaFormatter(
145+
projectId,
144146
sD,
145147
iF,
146148
eF,
@@ -155,6 +157,7 @@ object JavaFormatterPlugin extends AutoPlugin {
155157
},
156158
javafmtCheck := {
157159
val streamz = streams.value
160+
val projectId = thisProjectRef.value.project
158161
val baseDir = (ThisBuild / baseDirectory).value
159162
val sD = (javafmt / sourceDirectories).value.toList
160163
val iF = (javafmt / includeFilter).value
@@ -167,6 +170,7 @@ object JavaFormatterPlugin extends AutoPlugin {
167170
val removeUnusedImports = javafmtRemoveUnusedImports.value
168171
val reflowLongStrings = javafmtReflowLongStrings.value
169172
JavaFormatter.check(
173+
projectId,
170174
baseDir,
171175
sD,
172176
iF,
@@ -182,6 +186,7 @@ object JavaFormatterPlugin extends AutoPlugin {
182186
},
183187
javafmtFixImports := {
184188
val streamz = streams.value
189+
val projectId = thisProjectRef.value.project
185190
val sD = (javafmt / sourceDirectories).value.toList
186191
val iF = (javafmt / includeFilter).value
187192
val eF = (javafmt / excludeFilter).value
@@ -193,6 +198,7 @@ object JavaFormatterPlugin extends AutoPlugin {
193198
val removeUnusedImports = javafmtRemoveUnusedImports.value
194199
val reflowLongStrings = javafmtReflowLongStrings.value
195200
JavaFormatter.fixImports(
201+
projectId,
196202
sD,
197203
iF,
198204
eF,
@@ -207,6 +213,7 @@ object JavaFormatterPlugin extends AutoPlugin {
207213
},
208214
javafmtFixImportsCheck := {
209215
val streamz = streams.value
216+
val projectId = thisProjectRef.value.project
210217
val baseDir = (ThisBuild / baseDirectory).value
211218
val sD = (javafmt / sourceDirectories).value.toList
212219
val iF = (javafmt / includeFilter).value
@@ -219,6 +226,7 @@ object JavaFormatterPlugin extends AutoPlugin {
219226
val removeUnusedImports = javafmtRemoveUnusedImports.value
220227
val reflowLongStrings = javafmtReflowLongStrings.value
221228
JavaFormatter.fixImportsCheck(
229+
projectId,
222230
baseDir,
223231
sD,
224232
iF,

plugin/src/main/scala/com/github/sbt/javaformatter/JavaFormatter.scala

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)