in scrooge-generator/src/main/scala/com/twitter/scrooge/backend/Generator.scala [103:129]
private def validateFieldAnnotations(
fieldType: FieldType,
fieldAnnotations: scala.collection.immutable.Map[String, String]
): Unit = {
@scala.annotation.tailrec
def extractFieldTypes(fieldType: FieldType): Set[Class[_]] = {
fieldType match {
case at: AnnotatedFieldType => extractFieldTypes(at.unwrap)
case TBool => Set(classOf[java.lang.Boolean], classOf[Boolean])
case TByte => Set(classOf[java.lang.Byte], classOf[Byte])
case TI16 => Set(classOf[java.lang.Short], classOf[Short])
case TI32 => Set(classOf[java.lang.Integer], classOf[Int])
case TI64 => Set(classOf[java.lang.Long], classOf[Long])
case TDouble => Set(classOf[java.lang.Double], classOf[Double])
case TString => Set(classOf[String])
case TBinary => Set(classOf[ByteBuffer])
case MapType(_, _, _) => Set(classOf[Map[_, _]])
case SetType(_, _) => Set(classOf[Set[_]])
case ListType(_, _) => Set(classOf[Seq[_]])
case _ => Set.empty
}
}
val fieldTypes: Set[Class[_]] = extractFieldTypes(fieldType)
val violations = AnnotationValidator.validateAnnotations(fieldTypes, fieldAnnotations)
if (violations.nonEmpty)
throw new IllegalArgumentException(s"The annotation is invalid: ${violations.mkString(", ")}")
}