in maven-plugin/src/main/scala/org/apache/pekko/grpc/maven/AbstractGenerateMojo.scala [171:221]
private def generate(language: Language, generatedSourcesDir: File, protoDir: File): Unit = {
val scanner = buildContext.newScanner(protoDir, true)
scanner.setIncludes(Array("**/*.proto"))
scanner.scan()
val schemas = scanner.getIncludedFiles.map(file => new File(protoDir, file)).filter(buildContext.hasDelta).toSet
// only build if there are changes to the proto files
if (schemas.isEmpty) {
getLog.info("No changed or new .proto-files found in [%s], skipping code generation".format(generatedSourcesDir))
} else {
import scala.collection.JavaConverters._
val loadedExtraGenerators =
extraGenerators.asScala.map(cls =>
Class.forName(cls).getDeclaredConstructor().newInstance().asInstanceOf[CodeGenerator])
val targets = language match {
case Java =>
val glueGenerators = loadedExtraGenerators ++ Seq(
if (generateServer) Seq(JavaInterfaceCodeGenerator, JavaServerCodeGenerator) else Seq.empty,
if (generateClient) Seq(JavaInterfaceCodeGenerator, JavaClientCodeGenerator)
else Seq.empty).flatten.distinct
val settings = parseGeneratorSettings(generatorSettings)
val javaSettings = settings.intersect(ProtocSettings.protocJava)
Seq[Target](Target(protocbridge.gens.java, generatedSourcesDir, javaSettings)) ++
glueGenerators.map(g => adaptAkkaGenerator(generatedSourcesDir, g, settings))
case Scala =>
// Add flatPackage option as default if it's not set.
val settings =
if (generatorSettings.containsKey("flatPackage"))
parseGeneratorSettings(generatorSettings)
else
parseGeneratorSettings(generatorSettings) :+ "flat_package"
val scalapbSettings = settings.intersect(ProtocSettings.scalapb)
val glueGenerators = Seq(
if (generateServer) Seq(ScalaTraitCodeGenerator, ScalaServerCodeGenerator) else Seq.empty,
if (generateClient) Seq(ScalaTraitCodeGenerator, ScalaClientCodeGenerator) else Seq.empty).flatten.distinct
// TODO whitelist scala generator parameters instead of blacklist
Seq[Target]((JvmGenerator("scala", ScalaPbCodeGenerator), scalapbSettings) -> generatedSourcesDir) ++
glueGenerators.map(g => adaptAkkaGenerator(generatedSourcesDir, g, settings))
}
val runProtoc: Seq[String] => Int = args =>
com.github.os72.protocjar.Protoc.runProtoc(protocVersion +: args.toArray)
val protocOptions = if (includeStdTypes) Seq("--include_std_types") else Seq.empty
compile(runProtoc, schemas, protoDir, protocOptions, targets)
}
}