in src/main/scala/com/spotify/scio/BigQueryTypeInjector.scala [134:172]
override def injectInners(source: ScTypeDefinition): Seq[String] = {
source.extendsBlock.members
.collect {
case c: ScClass if bqAnnotation(c).isDefined =>
val (annotated, other) =
generatedCaseClasses(source.getQualifiedName.init, c).partition(
_.contains(HasAnnotationSuper)
)
(c, (annotated.headOption, other))
}
.collect { case (c, (Some(annotated), other)) =>
val tupledMethod = getTupledMethod(c.getName, annotated)
val applyPropsSignature =
getApplyPropsSignature(annotated).mkString(",")
val unapplyReturnTypes =
getUnapplyReturnTypes(annotated).mkString(",")
val extraCompanionMethod =
fetchExtraBQTypeCompanionMethods(source, c)
// TODO: missing extends and traits - are they needed?
// $tn extends ${p(c, SType)}.HasSchema[$name] with ..$traits
val companion =
s"""|object ${c.getName} {
| def apply( $applyPropsSignature ): ${c.getName} = ???
| def unapply(x$$0: ${c.getName}): _root_.scala.Option[($unapplyReturnTypes)] = ???
| def fromTableRow: _root_.scala.Function1[_root_.com.google.api.services.bigquery.model.TableRow, ${c.getName} ] = ???
| def toTableRow: _root_.scala.Function1[ ${c.getName}, _root_.com.google.api.services.bigquery.model.TableRow] = ???
| def schema: _root_.com.google.api.services.bigquery.model.TableSchema = ???
| def toPrettyString(indent: Int = 0): String = ???
| $extraCompanionMethod
| $tupledMethod
|}""".stripMargin
// for some reason we need to remove supers if any
companion +: other.map(s => s.substring(0, s.lastIndexOf(')') + 1))
}
.flatten
}