Skip to content

Commit 1ef5efe

Browse files
authored
Drop SemanticdbAgent, PackageHub, and other dead code paths (#902)
1 parent 1f339b8 commit 1ef5efe

24 files changed

Lines changed: 92 additions & 1053 deletions

bin/packagehub.sh

Lines changed: 0 additions & 2 deletions
This file was deleted.

build.sbt

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ lazy val V =
1515
val gradle = "7.0"
1616
val scala213 = "2.13.13"
1717
val scalameta = "4.9.3"
18-
val requests = "0.8.0"
1918
val kotlinVersion = "2.2.0"
2019
val kotest = "4.6.3"
2120
val kctfork = "0.7.1"
@@ -86,25 +85,6 @@ lazy val semanticdbShared = project
8685
libraryDependencies += "com.google.protobuf" % "protobuf-java" % V.protobuf
8786
)
8887

89-
lazy val agent = project
90-
.in(file("semanticdb-agent"))
91-
.settings(
92-
fatjarPackageSettings,
93-
javaOnlySettings,
94-
moduleName := "semanticdb-agent",
95-
libraryDependencies ++=
96-
List(
97-
"net.bytebuddy" % "byte-buddy" % "1.15.11",
98-
"net.bytebuddy" % "byte-buddy-agent" % "1.15.11"
99-
),
100-
Compile / packageBin / packageOptions +=
101-
Package.ManifestAttributes(
102-
"Agent-Class" -> "com.sourcegraph.semanticdb_javac.SemanticdbAgent",
103-
"Can-Redefine-Classes" -> "true",
104-
"Can-Retransform-Classes" -> "true",
105-
"Premain-Class" -> "com.sourcegraph.semanticdb_javac.SemanticdbAgent"
106-
)
107-
)
10888
lazy val gradlePlugin = project
10989
.in(file("semanticdb-gradle-plugin"))
11090
.settings(
@@ -155,10 +135,6 @@ lazy val javacPlugin = project
155135
// referenced from META-INF/services/com.sun.source.util.Plugin
156136
"com.sourcegraph.semanticdb_javac.SemanticdbPlugin" ->
157137
"com.sourcegraph.semanticdb_javac.SemanticdbPlugin",
158-
// Don't rename PrintJavaVersion because we load it via FQN to
159-
// detect the Java of a JVM installation.
160-
"com.sourcegraph.semanticdb_javac.PrintJavaVersion" ->
161-
"com.sourcegraph.semanticdb_javac.PrintJavaVersion",
162138
// Don't rename InjectSemanticdbOptions because we load it via FQN to
163139
// process a list of Java compiler options.
164140
"com.sourcegraph.semanticdb_javac.InjectSemanticdbOptions" ->
@@ -243,7 +219,6 @@ lazy val cli = project
243219
libraryDependencies ++=
244220
List(
245221
"org.scala-lang.modules" %% "scala-xml" % V.scalaXml,
246-
"com.lihaoyi" %% "requests" % V.requests,
247222
"org.scalameta" %% "moped" % V.moped,
248223
"org.jetbrains.kotlin" % "kotlin-compiler-embeddable" % V.kotlinVersion,
249224
"org.jetbrains.kotlin" % "kotlin-scripting-common" % V.kotlinVersion,
@@ -267,10 +242,6 @@ lazy val cli = project
267242
(javacPlugin / Compile / Keys.`package`).value,
268243
"semanticdb-plugin.jar"
269244
)
270-
addJar(
271-
(agent / Compile / Keys.`package`).value,
272-
"semanticdb-agent.jar"
273-
)
274245
addJar((gradlePlugin / Compile / assembly).value, "gradle-plugin.jar")
275246
addJar(
276247
(semanticdbKotlinc / Compile / Keys.`package`).value,
@@ -532,16 +503,6 @@ lazy val semanticdbKotlincMinimized = project
532503
.value
533504
)
534505

535-
commands +=
536-
Command.command("nativeImageProfiled") { s =>
537-
val targetroot =
538-
file("tests/minimized/.j11/target/scala-2.13/meta").absolutePath
539-
val output = Files.createTempFile("scip-java", "index.scip")
540-
"minimized/compile" ::
541-
s"""nativeImageRunAgent " index-semanticdb --output=$output $targetroot"""" ::
542-
"nativeImage" :: s
543-
}
544-
545506
def minimizedSourceDirectory =
546507
file("tests/minimized/src/main/java").getAbsoluteFile
547508

@@ -577,7 +538,7 @@ lazy val minimizedSettings = List[Def.Setting[_]](
577538
lazy val minimized = project
578539
.in(file("tests/minimized/.j11"))
579540
.settings(minimizedSettings, javaOnlySettings)
580-
.dependsOn(agent, javacPlugin)
541+
.dependsOn(javacPlugin)
581542
.disablePlugins(JavaFormatterPlugin)
582543

583544
def javacModuleOptions = List(
@@ -617,15 +578,6 @@ lazy val buildTools = project
617578
.in(file("tests/buildTools"))
618579
.settings(
619580
testSettings,
620-
(Test / javaOptions) ++=
621-
List(
622-
s"-javaagent:${(agent / Compile / Keys.`package`).value}",
623-
s"-Dsemanticdb.pluginpath=${(javacPlugin / Compile / Keys.`package`)
624-
.value}",
625-
s"-Dsemanticdb.sourceroot=${(ThisBuild / baseDirectory).value}",
626-
s"-Dsemanticdb.targetroot=${(agent / Compile / target).value /
627-
"semanticdb-targetroot"}"
628-
),
629581
Test / envVars ++=
630582
Map(
631583
"SCIP_JAVA_CLI" -> ((cli / pack).value / "bin" / "scip-java").toString
@@ -635,7 +587,7 @@ lazy val buildTools = project
635587
// everything worse
636588
Test / testForkedParallel := !sys.env.contains("CI")
637589
)
638-
.dependsOn(agent, unit)
590+
.dependsOn(unit)
639591

640592
lazy val snapshots = project
641593
.in(file("tests/snapshots"))

scip-java/src/main/scala/com/sourcegraph/scip_java/Embedded.scala

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -21,21 +21,14 @@ object Embedded {
2121
"gradle-plugin.jar"
2222
)
2323

24-
def agentJar(tmpDir: Path): Path = copyFile(tmpDir, "semanticdb-agent.jar")
25-
2624
def semanticdbKotlincJar(tmpDir: Path): Path = copyFile(
2725
tmpDir,
2826
"semanticdb-kotlinc.jar"
2927
)
3028

3129
private def javacErrorpath(tmp: Path) = tmp.resolve("errorpath.txt")
3230

33-
def customJavac(
34-
sourceroot: Path,
35-
targetroot: Path,
36-
tmp: Path,
37-
javaAtLeast17: Boolean
38-
): Path = {
31+
def customJavac(sourceroot: Path, targetroot: Path, tmp: Path): Path = {
3932
val bin = tmp.resolve("bin")
4033
val javac = bin.resolve("javac")
4134
val java = bin.resolve("java")
@@ -51,11 +44,9 @@ object Embedded {
5144
|""".stripMargin.getBytes(StandardCharsets.UTF_8)
5245
)
5346
val newJavacopts = tmp.resolve("javac_newarguments")
54-
val javacModuleOptions =
55-
if (javaAtLeast17)
56-
BuildInfo.javacModuleOptions.mkString(" ")
57-
else
58-
""
47+
// --add-exports flags required to access internal javac APIs from our
48+
// SemanticDB plugin. Always set; Java 11+ is the supported baseline.
49+
val javacModuleOptions = BuildInfo.javacModuleOptions.mkString(" ")
5950
val injectSemanticdbArguments = List[String](
6051
"java",
6152
s"-Dsemanticdb.errorpath=$errorpath",

scip-java/src/main/scala/com/sourcegraph/scip_java/ScipPrinters.scala

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import scala.collection.mutable
44
import scala.jdk.CollectionConverters.CollectionHasAsScala
55
import scala.math.Ordering.Implicits.seqOrdering
66

7-
import com.sourcegraph.scip_java.commands.CommentSyntax
87
import moped.reporters.Input
98
import moped.reporters.Position
109
import org.scip_code.scip.Document
@@ -20,11 +19,10 @@ object ScipPrinters {
2019
*/
2120
val sourceIndent = " "
2221

23-
def printTextDocument(
24-
doc: Document,
25-
text: String,
26-
comments: CommentSyntax = CommentSyntax.default
27-
): String = {
22+
// scip-java only indexes Java and Kotlin sources, both of which use `//`.
23+
private val commentSyntax = "//"
24+
25+
def printTextDocument(doc: Document, text: String): String = {
2826
val out = new mutable.StringBuilder()
2927
val occurrencesByLine = doc
3028
.getOccurrencesList
@@ -56,8 +54,6 @@ object ScipPrinters {
5654
}
5755
)
5856
.toMap
59-
val extension = doc.getRelativePath.split("\\.").lastOption.getOrElse("")
60-
val commentSyntax = comments.extensionSyntax(extension)
6157
val input = Input.filename(doc.getRelativePath, text)
6258

6359
// Collect enclosing ranges from all occurrences, grouped by start/end line.
@@ -118,7 +114,7 @@ object ScipPrinters {
118114
(o.getRangeList.asScala.toList.map(_.toInt), o.getSymbol)
119115
)
120116
occurrences.foreach { occ =>
121-
formatOccurrence(input, out, occ, line, symtab, commentSyntax)
117+
formatOccurrence(input, out, occ, line, symtab)
122118
if ((occ.getSymbolRoles & SymbolRole.Definition_VALUE) > 0) {
123119
syntheticDefinitions
124120
.getOrElse(occ.getSymbol, Nil)
@@ -129,7 +125,6 @@ object ScipPrinters {
129125
occ,
130126
line,
131127
symtab,
132-
commentSyntax,
133128
syntheticDefinition = Some(syntheticDefinition)
134129
)
135130
}
@@ -177,7 +172,6 @@ object ScipPrinters {
177172
occ: Occurrence,
178173
line: String,
179174
symtab: Map[String, SymbolInformation],
180-
comment: String,
181175
syntheticDefinition: Option[SymbolInformation] = None
182176
): Unit = {
183177
val pos = mopedPosition(input, occ)
@@ -199,8 +193,8 @@ object ScipPrinters {
199193
else
200194
"reference"
201195
val indent =
202-
if (pos.startColumn + sourceIndent.length > comment.length)
203-
" " * (pos.startColumn + sourceIndent.length - comment.length)
196+
if (pos.startColumn + sourceIndent.length > commentSyntax.length)
197+
" " * (pos.startColumn + sourceIndent.length - commentSyntax.length)
204198
else
205199
""
206200
val caretCharacter =
@@ -220,7 +214,7 @@ object ScipPrinters {
220214
val _ = ScipSymbol.parseOrThrowExceptionIfInvalid(symbol)
221215

222216
out
223-
.append(comment)
217+
.append(commentSyntax)
224218
.append(indent)
225219
.append(carets)
226220
.append(" ")
@@ -235,7 +229,7 @@ object ScipPrinters {
235229
syntheticDefinition.orElse(symtab.get(occ.getSymbol)) match {
236230
case Some(info) if isDefinition =>
237231
val prefix =
238-
comment + (" " * indent.length) + (" " * carets.length) + " "
232+
commentSyntax + (" " * indent.length) + (" " * carets.length) + " "
239233
if (!info.getDisplayName.isEmpty) {
240234
out
241235
.append(prefix)

scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/BuildTool.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ object BuildTool {
5757
.copy(
5858
output = index.finalOutput,
5959
targetroot = List(targetroot),
60-
packagehub = index.packagehub,
6160
app = index.app
6261
)
6362
.run()

scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/ClasspathEntry.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ case class ClasspathEntry(
2323
artifactId: String,
2424
version: String
2525
) {
26-
def toPackageHubId: String = s"maven:$groupId:$artifactId:$version"
26+
def mavenCoordinate: String = s"maven:$groupId:$artifactId:$version"
2727
def toPackageInformation: MavenPackage =
2828
new MavenPackage(entry, groupId, artifactId, version)
2929
}

scip-java/src/main/scala/com/sourcegraph/scip_java/buildtools/GradleBuildTool.scala

Lines changed: 53 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import java.nio.file._
55

66
import scala.collection.mutable.ListBuffer
77
import scala.util.Properties
8+
import scala.util.Try
89

910
import com.sourcegraph.io.DeleteVisitor
1011
import com.sourcegraph.scip_java.Embedded
@@ -26,13 +27,60 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) {
2627
}
2728

2829
override def generateScip(): Int = {
29-
BuildTool.generateScipFromTargetroot(
30-
generateSemanticdb(),
31-
targetroot,
32-
index
33-
)
30+
val gradleResult = generateSemanticdb()
31+
if (gradleResult.exitCode == 0) {
32+
reportMissingSemanticdbOutput()
33+
}
34+
BuildTool.generateScipFromTargetroot(gradleResult, targetroot, index)
35+
}
36+
37+
/**
38+
* Diagnose the case where Gradle finished successfully but our SemanticDB
39+
* compiler plugin never produced any `.semanticdb` files. This used to be
40+
* silently rescued by a `-javaagent` fallback; now it surfaces as a clear
41+
* error pointing at the two known causes.
42+
*/
43+
private def reportMissingSemanticdbOutput(): Unit = {
44+
if (containsFileWithSuffix(targetroot, ".semanticdb"))
45+
return
46+
if (!containsFileWithSuffix(index.workingDirectory, ".class"))
47+
// Project produced no compiled JVM output — nothing to index, stay quiet.
48+
return
49+
index
50+
.app
51+
.reporter
52+
.error(
53+
s"""scip-java: Gradle finished successfully but produced no SemanticDB output in $targetroot.
54+
|
55+
|This means our SemanticDB compiler plugin was not attached to one or more JavaCompile tasks. Two known causes:
56+
|
57+
| 1. The 'compileOnly' configuration was already resolved before our init script ran.
58+
| Check the Gradle output above for warnings of the form:
59+
| "scip-java: failed to attach SemanticDB compiler plugin to project '<name>'"
60+
| Workaround: apply the SemanticDB plugin earlier (e.g. via a settings plugin),
61+
| or restructure the build so that 'compileOnly' is not resolved at evaluation time.
62+
|
63+
| 2. Another Gradle plugin is replacing the compiler arguments we add (rather than appending).
64+
| Verify with: ./gradlew compileJava --info | grep -- '-Xplugin:semanticdb'
65+
| If '-Xplugin:semanticdb' is missing from the printed javac command, another plugin
66+
| is overwriting JavaCompile.options.compilerArgs.
67+
|""".stripMargin
68+
)
3469
}
3570

71+
private def containsFileWithSuffix(root: Path, suffix: String): Boolean =
72+
Files.isDirectory(root) &&
73+
Try {
74+
val stream = Files.find(
75+
root,
76+
Integer.MAX_VALUE,
77+
(p, attrs) =>
78+
attrs.isRegularFile && p.getFileName.toString.endsWith(suffix)
79+
)
80+
try stream.findFirst().isPresent
81+
finally stream.close()
82+
}.getOrElse(false)
83+
3684
def targetroot: Path = index.finalTargetroot(defaultTargetroot)
3785

3886
private def defaultTargetroot: Path = Paths.get(
@@ -62,7 +110,6 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) {
62110
}
63111

64112
private def runCompileCommand(
65-
// toolchains: GradleJavaToolchains,
66113
tmp: Path,
67114
gradleCommand: String
68115
): CommandResult = {
@@ -81,27 +128,14 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) {
81128

82129
Files.walkFileTree(targetroot, new DeleteVisitor())
83130
val result = index.process(buildCommand, env = Map("TERM" -> "dumb"))
84-
printDebugLogs(tmp)
85131
Embedded
86132
.reportUnexpectedJavacErrors(index.app.reporter, tmp)
87133
.getOrElse(result)
88134
}
89135

90136
private def scipJavaDependencies = "scipJavaDependencies"
91137

92-
private def printDebugLogs(tmp: Path): Unit = {
93-
val path = GradleJavaCompiler.debugPath(tmp)
94-
if (index.verbose && Files.isRegularFile(path)) {
95-
Files
96-
.readAllLines(path)
97-
.forEach { line =>
98-
index.app.info(line)
99-
}
100-
}
101-
}
102-
103138
private def initScript(tmp: Path): Path = {
104-
val agentpath = Embedded.agentJar(tmp)
105139
val pluginpath = Embedded.semanticdbJar(tmp)
106140
val gradlePluginPath = Embedded.gradlePluginJar(tmp)
107141
val semanticdbKotlincPath = Embedded.semanticdbKotlincJar(tmp)
@@ -122,7 +156,6 @@ class GradleBuildTool(index: IndexCommand) extends BuildTool("Gradle", index) {
122156
| project.ext["semanticdbTarget"] = "$targetroot"
123157
| project.ext["javacPluginJar"] = "$pluginpath"
124158
| project.ext["dependenciesOut"] = "$dependenciesPath"
125-
| project.ext["javacAgentPath"] = "$agentpath"
126159
| project.ext["semanticdbKotlincJar"] = "$semanticdbKotlincPath"
127160
| apply plugin: SemanticdbGradlePlugin
128161
| }

0 commit comments

Comments
 (0)