diff --git a/docs/manual-configuration.md b/docs/manual-configuration.md index 24d1be02..111b5100 100644 --- a/docs/manual-configuration.md +++ b/docs/manual-configuration.md @@ -38,7 +38,10 @@ javac -classpath semanticdb-javac.jar MyApplication.java If you're using Gradle. ```groovy -compileOnly group: 'com.sourcegraph', name: 'semanticdb-javac', version: '@STABLE_VERSION@' +// Option 1: if you are not using annotation processors +compileOnly 'com.sourcegraph:semanticdb-javac:@STABLE_VERSION@' +// Option 2: if you are using annotation processors +annotationProcessor 'com.sourcegraph:semanticdb-javac:@STABLE_VERSION@' ``` If you're using Maven. diff --git a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/GradleBuildTool.scala b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/GradleBuildTool.scala index 9bf98c31..58718a85 100644 --- a/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/GradleBuildTool.scala +++ b/lsif-java/src/main/scala/com/sourcegraph/lsif_java/buildtools/GradleBuildTool.scala @@ -78,7 +78,17 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) { buildCommand += s"-Porg.gradle.java.installations.paths=${toolchains.paths()}" } - buildCommand ++= index.finalBuildCommand(List("clean", "compileTestJava")) + buildCommand ++= + index.finalBuildCommand( + List( + // Disable the checkerframework plugin because it updates the processorpath + // in a way that causes the error "plug-in not found: semanticdb". + // Details: https://github.com/kelloggm/checkerframework-gradle-plugin/blob/76d1926ae22144b082dfcfde1abe625750469398/src/main/groovy/org/checkerframework/gradle/plugin/CheckerFrameworkPlugin.groovy#L374-L376 + "-PskipCheckerFramework", + "clean", + "compileTestJava" + ) + ) buildCommand += lsifJavaDependencies val result = index.process(buildCommand, env = Map("TERM" -> "dumb")) diff --git a/semanticdb-agent/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbAgent.java b/semanticdb-agent/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbAgent.java index 297d478a..544e79da 100644 --- a/semanticdb-agent/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbAgent.java +++ b/semanticdb-agent/src/main/java/com/sourcegraph/semanticdb_javac/SemanticdbAgent.java @@ -135,12 +135,18 @@ public static void build( switch (previousOption) { case "-processorpath": case "-processor-path": + case "-cp": case "-classpath": case "-class-path": isProcessorpathUpdated = true; newOptions.add(PLUGINPATH + File.pathSeparator + option); break; + case "-Xlint": + break; default: + if (option.startsWith("-Xplugin:ErrorProne")) { + break; + } newOptions.add(option); break; } @@ -155,13 +161,19 @@ public static void build( "-Xplugin:semanticdb -sourceroot:%s -targetroot:%s", SOURCEROOT, TARGETROOT)); if (DEBUGPATH != null) { - try (PrintStream fos = - new PrintStream( - Files.newOutputStream( - Paths.get(DEBUGPATH), StandardOpenOption.APPEND, StandardOpenOption.CREATE))) { - fos.println("Java Home: " + System.getProperty("java.home")); - fos.println("Old Options: " + arguments); - fos.println("New Options: " + newOptions); + ArrayList debuglines = new ArrayList<>(); + debuglines.add("============== Java Home: " + System.getProperty("java.home")); + debuglines.add("============== Old Options"); + debuglines.addAll(arguments); + debuglines.add("============== New Options"); + debuglines.addAll(newOptions); + + try { + Files.write( + Paths.get(DEBUGPATH), + debuglines, + StandardOpenOption.CREATE, + StandardOpenOption.APPEND); } catch (IOException e) { } } diff --git a/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala index 6cc5ca75..e2e86e1b 100644 --- a/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/BaseBuildToolSuite.scala @@ -76,7 +76,7 @@ abstract class BaseBuildToolSuite extends MopedSuite(LsifJava.app) { if (semanticdbFiles.length != expectedSemanticdbFiles) { fail( s"Expected $expectedSemanticdbFiles SemanticDB file(s) to be generated.", - clues(semanticdbFiles) + clues(semanticdbFiles, app.capturedOutput) ) } if (expectedPackages.nonEmpty) { diff --git a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala index f991ac99..8aa5ae0f 100644 --- a/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala +++ b/tests/buildTools/src/test/scala/tests/GradleBuildToolSuite.scala @@ -207,4 +207,30 @@ class GradleBuildToolSuite extends BaseBuildToolSuite { 2, // Two files because `conf/routes` generates a Java file. initCommand = gradleVersion("6.8") ) + + checkBuild( + "checkerframework", + """|/build.gradle + |plugins { + | id 'java' + | id 'org.checkerframework' version '0.5.24' + |} + |repositories { + | mavenCentral() + |} + |java { + | toolchain { + | languageVersion = JavaLanguageVersion.of(8) + | } + |} + |/src/main/java/foo/Example.java + |package foo; + |public class Example {} + |/src/test/java/foo/ExampleSuite.java + |package foo; + |public class ExampleSuite {} + |""".stripMargin, + 2, + initCommand = gradleVersion("6.8.3") + ) }