From 7749657f4eafe08f32727c80c8940b1f8b0da8c4 Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Tue, 5 Dec 2023 12:15:19 +0000 Subject: [PATCH] Fix Gradle builds with -Werror (#670) The warning in question is only triggered if there are annotation processors in the build --- build.sbt | 22 ++++++------- .../main/scala/SemanticdbGradlePlugin.scala | 3 +- .../SemanticdbJavacOptions.java | 7 ++-- .../scala/tests/GradleBuildToolSuite.scala | 32 +++++++++++++++++++ 4 files changed, 48 insertions(+), 16 deletions(-) diff --git a/build.sbt b/build.sbt index 2d5d4952..d7b0ccd9 100644 --- a/build.sbt +++ b/build.sbt @@ -357,18 +357,16 @@ lazy val minimizedSettings = List[Def.Setting[_]]( (run / fork) := true, (Compile / unmanagedSourceDirectories) += minimizedSourceDirectory, libraryDependencies ++= List("org.projectlombok" % "lombok" % "1.18.22"), - javacOptions ++= - List[String]( - s"-Arandomtimestamp=${System.nanoTime()}", - List( - s"-Xplugin:semanticdb", - s"-build-tool:sbt", - s"-text:on", - s"-verbose", - s"-sourceroot:${(ThisBuild / baseDirectory).value}", - s"-targetroot:${(Compile / semanticdbTargetRoot).value}" - ).mkString(" ") - ) + javacOptions += + List( + s"-Xplugin:semanticdb", + s"-build-tool:sbt", + s"-text:on", + s"-verbose", + s"-sourceroot:${(ThisBuild / baseDirectory).value}", + s"-targetroot:${(Compile / semanticdbTargetRoot).value}", + s"-randomtimestamp=${System.nanoTime()}" + ).mkString(" ") ) lazy val minimized = project diff --git a/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala b/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala index d11cf79e..d8044158 100644 --- a/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala +++ b/semanticdb-gradle-plugin/src/main/scala/SemanticdbGradlePlugin.scala @@ -165,8 +165,7 @@ class SemanticdbGradlePlugin extends Plugin[Project] { // TODO: before this plugin is published to Maven Central, // we will need to revert this change - as it can have detrimental // effect on people's builds - s"-Arandomtimestamp=${System.currentTimeMillis()}", - s"-Xplugin:semanticdb -targetroot:$targetRoot -sourceroot:$sourceRoot" + s"-Xplugin:semanticdb -targetroot:$targetRoot -sourceroot:$sourceRoot -randomtimestamp=${System.nanoTime()}" ).asJava ) } diff --git a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java index b0523ad5..7c1acc44 100644 --- a/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java +++ b/semanticdb-javac/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbJavacOptions.java @@ -97,6 +97,7 @@ public static SemanticdbJavacOptions parse(String[] args, JavacTask task) { result.verboseEnabled = true; } else if (arg.equals("-verbose:off")) { result.verboseEnabled = false; + } else if (arg.startsWith("-randomtimestamp")) { } else { result.errors.add(String.format("unknown flag '%s'\n", arg)); } @@ -126,8 +127,10 @@ private static boolean isSourcerootDefined(SemanticdbJavacOptions options) { // warning - use of internal API // requires --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED private static TargetPaths getJavacClassesDir(SemanticdbJavacOptions result, JavacTask task) { - // both Context and BasicJavacTask are internal JDK classes so not exported under >= JDK 17 - // com.sun.tools.javac.util.Context ctx = ((com.sun.tools.javac.api.BasicJavacTask) + // both Context and BasicJavacTask are internal JDK classes so not exported + // under >= JDK 17 + // com.sun.tools.javac.util.Context ctx = + // ((com.sun.tools.javac.api.BasicJavacTask) // task).getContext(); // I'm not aware of a better way to get the class output directory from javac Path classOutputDir = null; diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index 4e0f8570..3fbf48f1 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -50,6 +50,38 @@ abstract class GradleBuildToolSuite(allGradle: List[String]) gradleVersions = List(Gradle8, Gradle7, Gradle67) ) + checkGradleBuild( + "build-with-Werror", + """|/build.gradle + |plugins { + | id 'java-library' + |} + |repositories { + | // Use Maven Central for resolving dependencies. + | mavenCentral() + |} + |dependencies { + | compileOnly 'org.immutables:value:2.9.2' + | annotationProcessor 'org.immutables:value:2.9.2' + |} + |compileJava { + | options.compilerArgs << "-Werror" + |} + |/src/main/java/main/bla/ExampleClass.java + |package test; + |import org.immutables.value.Value; + |import java.util.Optional; + |@Value.Immutable + |public abstract class ExampleClass { + | public abstract Optional getWorkflowIdReusePolicy(); + |} + """.stripMargin, + // See comment about immutable annotation processor above, + // it explains why we expecte 2 semanticdb files + expectedSemanticdbFiles = 2, + gradleVersions = List(Gradle8, Gradle7, Gradle67) + ) + checkGradleBuild( "publishing", """|/build.gradle