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 58718a85..9bf98c31 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,17 +78,7 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) { buildCommand += s"-Porg.gradle.java.installations.paths=${toolchains.paths()}" } - 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 ++= index.finalBuildCommand(List("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 544e79da..e147bcc1 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 @@ -49,6 +49,17 @@ public static void premain(String agentArgs, Instrumentation inst) { named("getCompileClasspath"), DefaultJvmLanguageCompileSpecAdvice.class.getName())) .installOn(inst); + new AgentBuilder.Default() + .disableClassFormatChanges() + .type( + named("org.gradle.api.internal.tasks.compile.DefaultJavaCompileSpec") + .or(named("tests.GradleDefaultJavaCompileSpec"))) + .transform( + new AgentBuilder.Transformer.ForAdvice() + .advice( + named("getAnnotationProcessorPath"), + DefaultJavaCompileSpecAdvice.class.getName())) + .installOn(inst); new AgentBuilder.Default() .type( named("org.gradle.api.internal.tasks.compile.JavaCompilerArgumentsBuilder") @@ -92,6 +103,23 @@ public static void getClasspath( } } + @SuppressWarnings("all") + public static class DefaultJavaCompileSpecAdvice { + @Advice.OnMethodExit + public static void getAnnotationProcessorPath( + @Advice.Return(readOnly = false, typing = DYNAMIC) List classpath) { + if (classpath == null) return; + String PLUGINPATH = System.getProperty("semanticdb.pluginpath"); + if (PLUGINPATH == null) throw new NoSuchElementException("-Dsemanticdb.pluginpath"); + File semanticdbJar = new File(PLUGINPATH); + if (!classpath.contains(semanticdbJar)) { + List newClasspath = new ArrayList<>(classpath); + newClasspath.add(semanticdbJar); + classpath = newClasspath; + } + } + } + @SuppressWarnings("all") public static class JavaCompilerArgumentsBuilderAdvice {