From 2cb7c6047b782496186b9cbca5930d94179c8f80 Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Wed, 29 Nov 2023 11:23:22 +0000 Subject: [PATCH 1/5] Add a repro for -Werror flag breaking the build --- .../scala/tests/GradleBuildToolSuite.scala | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index 4e0f8570..e33a66d7 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -50,6 +50,27 @@ abstract class GradleBuildToolSuite(allGradle: List[String]) gradleVersions = List(Gradle8, Gradle7, Gradle67) ) + checkGradleBuild( + "build-with-Werror", + """|/build.gradle + |plugins { + | id 'java' + |} + |repositories { + | // Use Maven Central for resolving dependencies. + | mavenCentral() + |} + |compileJava { + | options.compilerArgs << "-Werror" + |} + |/src/main/java/main/ExampleClass.java + |package test; + |public abstract class ExampleClass {} + """.stripMargin, + expectedSemanticdbFiles = 1, + gradleVersions = List(Gradle8, Gradle7, Gradle67) + ) + checkGradleBuild( "publishing", """|/build.gradle From 3731fc5c6dd963aa8f65c7a069201b01f227baeb Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Thu, 30 Nov 2023 12:41:50 +0000 Subject: [PATCH 2/5] Move randomtimestamp hack into plugin parameters --- build.sbt | 22 +++++++++---------- .../main/scala/SemanticdbGradlePlugin.scala | 3 +-- .../SemanticdbJavacOptions.java | 7 ++++-- 3 files changed, 16 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; From 18ceefde6cef1fb9399855c703d9142d121ae530 Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Thu, 30 Nov 2023 12:43:25 +0000 Subject: [PATCH 3/5] WIP --- .../src/test/scala/tests/GradleBuildToolSuite.scala | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index e33a66d7..888f3da8 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -54,16 +54,29 @@ abstract class GradleBuildToolSuite(allGradle: List[String]) "build-with-Werror", """|/build.gradle |plugins { +<<<<<<< Updated upstream | id 'java' +======= + | id 'java-library' +>>>>>>> Stashed changes |} |repositories { | // Use Maven Central for resolving dependencies. | mavenCentral() |} +<<<<<<< Updated upstream |compileJava { | options.compilerArgs << "-Werror" |} |/src/main/java/main/ExampleClass.java +======= + |allprojects { + | tasks.withType(JavaCompile) { + | options.compilerArgs += ['-Xlint:deprecation', '-Werror'] + | } + |} + |/src/main/java/ExampleClass.java +>>>>>>> Stashed changes |package test; |public abstract class ExampleClass {} """.stripMargin, From 86ca96810c1af4888ec93c7a8cda6198f073f7d0 Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Tue, 5 Dec 2023 10:36:45 +0000 Subject: [PATCH 4/5] remove merging garbage --- .../test/scala/tests/GradleBuildToolSuite.scala | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index 888f3da8..e02de94b 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -54,30 +54,17 @@ abstract class GradleBuildToolSuite(allGradle: List[String]) "build-with-Werror", """|/build.gradle |plugins { -<<<<<<< Updated upstream - | id 'java' -======= | id 'java-library' ->>>>>>> Stashed changes |} |repositories { | // Use Maven Central for resolving dependencies. | mavenCentral() |} -<<<<<<< Updated upstream |compileJava { | options.compilerArgs << "-Werror" |} - |/src/main/java/main/ExampleClass.java -======= - |allprojects { - | tasks.withType(JavaCompile) { - | options.compilerArgs += ['-Xlint:deprecation', '-Werror'] - | } - |} - |/src/main/java/ExampleClass.java ->>>>>>> Stashed changes - |package test; + |/src/main/java/main/bla/ExampleClass.java + |package bla; |public abstract class ExampleClass {} """.stripMargin, expectedSemanticdbFiles = 1, From 1a241dc46ecd390f802187be06f60790aa71489b Mon Sep 17 00:00:00 2001 From: Anton Sviridov Date: Tue, 5 Dec 2023 11:54:11 +0000 Subject: [PATCH 5/5] Correct reproduction The warning in question is only triggered if there are annotation processors in the build --- .../test/scala/tests/GradleBuildToolSuite.scala | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index e02de94b..3fbf48f1 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -60,14 +60,25 @@ abstract class GradleBuildToolSuite(allGradle: List[String]) | // 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 bla; - |public abstract class ExampleClass {} + |package test; + |import org.immutables.value.Value; + |import java.util.Optional; + |@Value.Immutable + |public abstract class ExampleClass { + | public abstract Optional getWorkflowIdReusePolicy(); + |} """.stripMargin, - expectedSemanticdbFiles = 1, + // See comment about immutable annotation processor above, + // it explains why we expecte 2 semanticdb files + expectedSemanticdbFiles = 2, gradleVersions = List(Gradle8, Gradle7, Gradle67) )