1- def scala213 = " 2.13.4"
2- def scalametaVersion = " 4.4.8"
1+ import java .io .File
2+ import java .util .Properties
3+ import scala .collection .mutable .ListBuffer
4+
5+ lazy val V =
6+ new {
7+ val coursier = " 2.0.8"
8+ val bloop = " 1.4.7"
9+ val bsp = " 2.0.0-M13"
10+ val moped = " 0.1.9"
11+ def scala213 = " 2.13.4"
12+ def scala212 = " 2.12.12"
13+ def scalameta = " 4.4.8"
14+ }
315
416inThisBuild(
517 List (
6- scalaVersion := scala213,
7- crossScalaVersions := List (scala213),
18+ scalaVersion := V . scala213,
19+ crossScalaVersions := List (V . scala213),
820 scalafixDependencies +=
921 " com.github.liancheng" %% " organize-imports" % " 0.5.0" ,
1022 scalafixCaching := true ,
1123 scalacOptions ++= List (" -Wunused:imports" ),
1224 semanticdbEnabled := true ,
13- semanticdbVersion := scalametaVersion ,
25+ semanticdbVersion := V .scalameta ,
1426 organization := " com.sourcegraph" ,
1527 homepage := Some (url(" https://github.com/sourcegraph/lsif-java" )),
28+ dynverSeparator := " -" ,
1629 licenses :=
1730 List (" Apache-2.0" -> url(" http://www.apache.org/licenses/LICENSE-2.0" )),
1831 developers :=
@@ -49,19 +62,30 @@ commands +=
4962 " javafmtCheckAll" :: " publishLocal" :: s
5063 }
5164
52- lazy val testSettings = List (
53- skip.in(publish) := true ,
54- autoScalaLibrary := true ,
55- testFrameworks := List (new TestFramework (" munit.Framework" )),
56- libraryDependencies ++=
57- List (
58- " org.scalameta" %% " munit" % " 0.7.10" ,
59- " org.scalameta" %% " scalameta" % scalametaVersion,
60- " org.scala-lang.modules" %% " scala-parallel-collections" % " 1.0.0" ,
61- " io.get-coursier" %% " coursier" % " 2.0.8" ,
62- " com.lihaoyi" %% " pprint" % " 0.6.1"
63- )
64- )
65+ lazy val agent = project
66+ .in(file(" semanticdb-agent" ))
67+ .settings(
68+ fatjarPackageSettings,
69+ autoScalaLibrary := false ,
70+ moduleName := " semanticdb-agent" ,
71+ libraryDependencies ++=
72+ List (
73+ " org.javassist" % " javassist" % " 3.27.0-GA" ,
74+ " net.bytebuddy" % " byte-buddy" % " 1.10.20" ,
75+ " net.bytebuddy" % " byte-buddy-agent" % " 1.10.20"
76+ ),
77+ incOptions ~= { old =>
78+ old.withEnabled(false )
79+ },
80+ crossPaths := false ,
81+ Compile / packageBin / packageOptions +=
82+ Package .ManifestAttributes (
83+ " Agent-Class" -> " com.sourcegraph.semanticdb_javac.SemanticdbAgent" ,
84+ " Can-Redefine-Classes" -> " true" ,
85+ " Can-Retransform-Classes" -> " true" ,
86+ " Premain-Class" -> " com.sourcegraph.semanticdb_javac.SemanticdbAgent"
87+ )
88+ )
6589
6690lazy val plugin = project
6791 .in(file(" semanticdb-javac" ))
@@ -71,16 +95,69 @@ lazy val plugin = project
7195 incOptions ~= { old =>
7296 old.withEnabled(false )
7397 },
98+ fatjarPackageSettings,
7499 crossPaths := false ,
75100 PB .targets.in(Compile ) :=
76101 Seq (PB .gens.java -> (Compile / sourceManaged).value)
77102 )
78103
104+ lazy val cli = project
105+ .in(file(" cli" ))
106+ .settings(
107+ moduleName := " lsif-java" ,
108+ mainClass.in(Compile ) := Some (" com.sourcegraph.lsif_java.LsifJava" ),
109+ buildInfoKeys :=
110+ Seq [BuildInfoKey ](
111+ version,
112+ scalaVersion,
113+ " bloopVersion" -> V .bloop,
114+ " bspVersion" -> V .bsp
115+ ),
116+ buildInfoPackage := " com.sourcegraph.lsif_java" ,
117+ libraryDependencies ++= List (" org.scalameta" %% " moped" % V .moped),
118+ resourceGenerators.in(Compile ) +=
119+ Def
120+ .task[Seq [File ]] {
121+ val outs = ListBuffer .empty[(File , File )]
122+ val out = resourceManaged.in(Compile ).value.toPath
123+ IO .delete(out.toFile)
124+ def addJar (jar : File , filename : String ): Unit = {
125+ outs += jar -> out.resolve(filename).toFile
126+ }
127+
128+ addJar(
129+ Keys .`package`.in(plugin, Compile ).value,
130+ " semanticdb-plugin.jar"
131+ )
132+ addJar(
133+ Keys .`package`.in(agent, Compile ).value,
134+ " semanticdb-agent.jar"
135+ )
136+
137+ IO .copy(outs)
138+ val props = new Properties ()
139+ val propsFile = out.resolve(" lsif-java.properties" ).toFile
140+ val copiedJars = outs.collect { case (_, out) =>
141+ out
142+ }
143+ val names = copiedJars.map(_.getName).mkString(" ;" )
144+ props.put(" jarNames" , names)
145+ IO .write(props, " lsif-java" , propsFile)
146+
147+ propsFile :: copiedJars.toList
148+ }
149+ .taskValue,
150+ nativeImageOptions ++= List (" -H:IncludeResources=^semanticdb-.*jar$" ),
151+ nativeImageOutput := target.in(NativeImage ).value / " lsif-java"
152+ )
153+ .enablePlugins(NativeImagePlugin , BuildInfoPlugin )
154+
79155lazy val minimized = project
80156 .in(file(" tests/minimized" ))
81157 .settings(
82158 autoScalaLibrary := false ,
83159 skip.in(publish) := true ,
160+ fork.in(run) := true ,
84161 javacOptions.in(Compile ) ++=
85162 List [String ](
86163 s " -Arandomtimestamp= ${System .nanoTime()}" ,
@@ -93,7 +170,7 @@ lazy val minimized = project
93170 ).mkString(" " )
94171 )
95172 )
96- .dependsOn(plugin)
173+ .dependsOn(agent, plugin)
97174
98175lazy val minimizedScala = project
99176 .in(file(" tests/minimized-scala" ))
@@ -123,9 +200,23 @@ lazy val unit = project
123200 ),
124201 buildInfoPackage := " tests"
125202 )
126- .dependsOn(plugin)
203+ .dependsOn(plugin, cli )
127204 .enablePlugins(BuildInfoPlugin )
128205
206+ lazy val buildTools = project
207+ .in(file(" tests/buildTools" ))
208+ .settings(
209+ testSettings,
210+ javaOptions.in(Test ) ++=
211+ List (
212+ s " -javaagent: ${Keys .`package`.in(agent, Compile ).value}" ,
213+ s " -Dsemanticdb.pluginpath= ${Keys .`package`.in(plugin, Compile ).value}" ,
214+ s " -Dsemanticdb.sourceroot= ${baseDirectory.in(ThisBuild ).value}" ,
215+ s " -Dsemanticdb.targetroot= ${target.in(agent, Compile ).value / " semanticdb-targetroot" }"
216+ )
217+ )
218+ .dependsOn(agent, unit)
219+
129220lazy val snapshots = project
130221 .in(file(" tests/snapshots" ))
131222 .settings(
@@ -148,3 +239,41 @@ lazy val bench = project
148239 )
149240 .dependsOn(unit)
150241 .enablePlugins(JmhPlugin )
242+
243+ lazy val testSettings = List (
244+ skip.in(publish) := true ,
245+ autoScalaLibrary := true ,
246+ testFrameworks := List (new TestFramework (" munit.Framework" )),
247+ libraryDependencies ++=
248+ List (
249+ " org.scalameta" %% " munit" % " 0.7.10" ,
250+ " org.scalameta" %% " moped-testkit" % V .moped,
251+ " org.scalameta" %% " scalameta" % V .scalameta,
252+ " org.scala-lang.modules" %% " scala-parallel-collections" % " 1.0.0" ,
253+ " io.get-coursier" %% " coursier" % V .coursier,
254+ " com.lihaoyi" %% " pprint" % " 0.6.1"
255+ )
256+ )
257+
258+ lazy val fatjarPackageSettings = List [Def .Setting [_]](
259+ assemblyMergeStrategy in assembly := {
260+ case PathList (" javax" , _ @_* ) =>
261+ MergeStrategy .discard
262+ case PathList (" com" , " sun" , _ @_* ) =>
263+ MergeStrategy .discard
264+ case PathList (" sun" , _ @_* ) =>
265+ MergeStrategy .discard
266+ case PathList (" META-INF" , " versions" , " 9" , " module-info.class" ) =>
267+ MergeStrategy .first
268+ case x =>
269+ val oldStrategy = (assemblyMergeStrategy in assembly).value
270+ oldStrategy(x)
271+ },
272+ Keys .`package`.in(Compile ) := {
273+ val slimJar = Keys .`package`.in(Compile ).value
274+ val fatJar = crossTarget.value / assemblyJarName.in(assembly).value
275+ val _ = assembly.value
276+ IO .copyFile(fatJar, slimJar, CopyOptions ().withOverwrite(true ))
277+ slimJar
278+ }
279+ )
0 commit comments