in sbt-plugin/src/main/scala/org/apache/pekko/grpc/sbt/PekkoGrpcPlugin.scala [177:210]
def generatorsFor(
stubs: Seq[PekkoGrpc.GeneratedSource],
languages: Seq[PekkoGrpc.Language],
scalaBinaryVersion: ScalaBinaryVersion,
logger: GenLogger): Seq[protocbridge.Generator] = {
import PekkoGrpc._
def toGen(codeGenerator: pekko.grpc.gen.CodeGenerator) =
GeneratorBridge.sandboxedGenerator(codeGenerator, scalaBinaryVersion, logger)
// these two are the model/message (protoc) generators
def ScalaGenerator: protocbridge.Generator = scalapb.gen.SandboxedGenerator
// we have a default flat_package, but that doesn't play with the java generator (it fails)
def JavaGenerator: protocbridge.Generator = PB.gens.java
lazy val scalaBaseGenerators: Seq[Generator] = Seq(ScalaGenerator, toGen(ScalaTraitCodeGenerator))
lazy val javaBaseGenerators: Seq[Generator] = Seq(JavaGenerator, toGen(JavaInterfaceCodeGenerator))
lazy val baseGenerators: Seq[Generator] = languages match {
case Seq(Scala) => scalaBaseGenerators
case Seq(Java) => javaBaseGenerators
case Seq(_, _) => scalaBaseGenerators ++ javaBaseGenerators
}
val generators = (for {
stub <- stubs
language <- languages
} yield (stub, language) match {
case (Client, Scala) => ScalaClientCodeGenerator
case (Server, Scala) => ScalaServerCodeGenerator
case (Client, Java) => JavaClientCodeGenerator
case (Server, Java) => JavaServerCodeGenerator
}).distinct.map(toGen)
if (generators.nonEmpty) baseGenerators ++ generators
else generators
}