private def bqAnnotation()

in src/main/scala/com/spotify/scio/BigQueryTypeInjector.scala [45:70]


  private def bqAnnotation(sc: ScClass): Option[String] =
    sc.annotations
      .map(_.getText)
      .find(t => BigQueryAnnotations.exists(t.contains))

  private def bqQuerySignature(sc: ScClass): Option[String] = {
    sc.annotations.iterator
      .find(sa => sa.getText.contains(FromQuery))
      .flatMap { sa =>
        sa.annotationExpr.getAnnotationParameters.toList match {
          case Nil       => None // no args
          case _ :: Nil  => None // only a query
          case _ :: tail =>
            // query with args
            val optResult = tail
              .foldLeft(Option((0, List.empty[String]))) {
                case (res @ None, _) => res
                case (Some((idx, acc)), paramLiteral: ScLiteral) =>
                  val tpe = "_root_." + paramLiteral.getValue().getClass.getCanonicalName
                  Some((idx + 1, s"queryArg$$${idx}: ${tpe}" :: acc))
                case _ => None
              }
            optResult.map { case (_, params) => params.reverse.mkString(", ") }
        }
      }
  }