def buildConstraintViolations[T]()

in util-validator/src/main/scala/com/twitter/util/validation/internal/engine/ConstraintViolationFactory.scala [61:114]


  def buildConstraintViolations[T](
    rootClazz: Option[Class[T]],
    root: Option[T],
    leaf: Option[Any],
    path: PathImpl,
    invalidValue: Any,
    constraintDescriptor: ConstraintDescriptor[_],
    constraintValidatorContext: ConstraintValidatorContext
  ): Set[ConstraintViolation[T]] = {
    val results = mutable.HashSet[ConstraintViolation[T]]()
    val constraintViolationCreationContexts =
      constraintValidatorContext
        .asInstanceOf[ConstraintValidatorContextImpl]
        .getConstraintViolationCreationContexts

    var index = 0
    val size = constraintViolationCreationContexts.size()
    while (index < size) {
      val constraintViolationCreationContext = constraintViolationCreationContexts.get(index)
      val messageTemplate = constraintViolationCreationContext.getMessage
      val interpolatedMessage =
        validatorFactory.messageInterpolator
          .interpolate(
            messageTemplate,
            new MessageInterpolatorContext(
              constraintDescriptor,
              invalidValue,
              root.map(_.getClass.asInstanceOf[Class[T]]).orNull,
              constraintViolationCreationContext.getPath,
              constraintViolationCreationContext.getMessageParameters,
              constraintViolationCreationContext.getExpressionVariables,
              constraintViolationCreationContext.getExpressionLanguageFeatureLevel,
              constraintViolationCreationContext.isCustomViolation
            )
          )
      results.add(
        newConstraintViolation[T](
          messageTemplate,
          interpolatedMessage,
          path,
          invalidValue,
          rootClazz.orNull,
          root.map(_.asInstanceOf[T]).getOrElse(null.asInstanceOf[T]),
          leaf.orNull,
          constraintDescriptor,
          constraintViolationCreationContext
        )
      )
      index += 1
    }

    if (results.nonEmpty) results.toSet
    else Set.empty[ConstraintViolation[T]]
  }