Skip to content

Commit 07c2764

Browse files
committed
Split codegen into two libraries:
1) a codegen library that can be used as a protoc plugin without SBT 2) an SBT compiler plugin that registers the plugin from (1)
1 parent e8a765f commit 07c2764

File tree

17 files changed

+42
-24
lines changed

17 files changed

+42
-24
lines changed

build.sbt

+12-3
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,23 @@ lazy val commonSettings = List(
2424
)
2525

2626
lazy val codegen = (project in file("codegen"))
27+
.settings(
28+
commonSettings,
29+
name := "twinagle-codegen",
30+
crossScalaVersions := Seq(scala212, scala213, scala3LTS),
31+
libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % scalapb.compiler.Version.scalapbVersion,
32+
publishLocal := publishLocal.dependsOn(runtime / publishLocal).value,
33+
)
34+
35+
lazy val plugin = (project in file("plugin"))
2736
.enablePlugins(SbtPlugin, BuildInfoPlugin)
37+
.dependsOn(codegen)
2838
.settings(
2939
commonSettings,
3040
name := "twinagle-scalapb-plugin",
3141
addSbtPlugin("com.thesamet" % "sbt-protoc" % "1.0.7"),
32-
libraryDependencies += "com.thesamet.scalapb" %% "compilerplugin" % scalapb.compiler.Version.scalapbVersion,
3342
buildInfoKeys := Seq[BuildInfoKey](version, scalaBinaryVersion),
34-
buildInfoPackage := "com.soundcloud.twinagle.codegen",
43+
buildInfoPackage := "com.soundcloud.twinagle.plugin",
3544
buildInfoUsePackageAsPath := true,
3645
publishLocal := publishLocal.dependsOn(runtime / publishLocal).value,
3746
scriptedLaunchOpts ++= Seq("-Xmx1024M", "-Dplugin.version=" + version.value),
@@ -77,7 +86,7 @@ lazy val runtime = (project in file("runtime")).settings(
7786
)
7887

7988
lazy val root = (project in file("."))
80-
.aggregate(runtime, codegen)
89+
.aggregate(runtime, codegen, plugin)
8190
.settings(
8291
name := "twinagle-root",
8392
resolvers += Resolver.typesafeIvyRepo("releases"),

codegen/src/main/scala/com/soundcloud/twinagle/codegen/ServerClientCodeGenerator.scala

+5-19
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,16 @@ import com.google.protobuf.Descriptors._
44
import com.google.protobuf.ExtensionRegistry
55
import com.google.protobuf.compiler.PluginProtos
66
import com.google.protobuf.compiler.PluginProtos.CodeGeneratorResponse
7-
import protocbridge.Artifact
87
import protocgen.{CodeGenApp, CodeGenRequest, CodeGenResponse}
98
import scalapb.compiler.{DescriptorImplicits, FunctionalPrinter, ProtobufGenerator}
109

11-
import scala.collection.JavaConverters._
10+
import scala.jdk.CollectionConverters._
1211

13-
object ServerClientCodeGenerator extends CodeGenApp {
12+
trait ServerClientCodeGenerator extends CodeGenApp {
1413
override def registerExtensions(registry: ExtensionRegistry): Unit = {
1514
scalapb.options.Scalapb.registerAllExtensions(registry)
1615
}
1716

18-
override def suggestedDependencies: Seq[protocbridge.Artifact] = Seq(
19-
Artifact(
20-
"com.soundcloud",
21-
"twinagle-runtime",
22-
BuildInfo.version,
23-
crossVersion = true
24-
),
25-
Artifact(
26-
"com.thesamet.scalapb",
27-
"scalapb-runtime",
28-
scalapb.compiler.Version.scalapbVersion,
29-
crossVersion = true
30-
)
31-
)
32-
3317
def process(request: CodeGenRequest): CodeGenResponse =
3418
ProtobufGenerator.parseParameters(request.parameter) match {
3519
case Right(params) =>
@@ -54,7 +38,7 @@ object ServerClientCodeGenerator extends CodeGenApp {
5438
file: FileDescriptor,
5539
di: DescriptorImplicits
5640
): Seq[PluginProtos.CodeGeneratorResponse.File] = {
57-
file.getServices.asScala.map { service =>
41+
file.getServices.asScala.toSeq.map { service =>
5842
val p = new TwinagleServicePrinter(service, di)
5943

6044
import di.{ExtendedFileDescriptor, ExtendedServiceDescriptor}
@@ -68,3 +52,5 @@ object ServerClientCodeGenerator extends CodeGenApp {
6852
}
6953

7054
}
55+
56+
object StandaloneServerClientCodeGenerator extends ServerClientCodeGenerator {}

codegen/README.md plugin/README.md

File renamed without changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.soundcloud.twinagle.plugin
2+
3+
import com.soundcloud.twinagle.codegen.ServerClientCodeGenerator
4+
import protocbridge.Artifact
5+
6+
object SbtServerClientCodeGenerator extends ServerClientCodeGenerator {
7+
8+
override def suggestedDependencies: Seq[Artifact] = Seq(
9+
Artifact(
10+
"com.soundcloud",
11+
"twinagle-runtime",
12+
BuildInfo.version,
13+
crossVersion = true
14+
),
15+
Artifact(
16+
"com.thesamet.scalapb",
17+
"scalapb-runtime",
18+
scalapb.compiler.Version.scalapbVersion,
19+
crossVersion = true
20+
)
21+
)
22+
23+
}

codegen/src/main/scala/com/soundcloud/twinagle/codegen/Twinagle.scala plugin/src/main/scala/com/soundcloud/twinagle/plugin/Twinagle.scala

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.soundcloud.twinagle.codegen
1+
package com.soundcloud.twinagle.plugin
22

33
import protocbridge.{JvmGenerator, Target}
44
import sbt._
@@ -33,7 +33,7 @@ object Twinagle extends AutoPlugin {
3333
(Compile / sourceManaged).value / "twinagle-protobuf"
3434
),
3535
Target(
36-
JvmGenerator("scala-twinagle", ServerClientCodeGenerator),
36+
JvmGenerator("scala-twinagle", SbtServerClientCodeGenerator),
3737
(Compile / sourceManaged).value / "twinagle-services",
3838
scalapb.gen(scalapbCodeGeneratorOptions.value)._2
3939
)

0 commit comments

Comments
 (0)