private[this] def isValid[T]()

in util-validator/src/main/scala/com/twitter/util/validation/ScalaValidator.scala [1269:1354]


  private[this] def isValid[T](
    context: ValidationContext[T],
    constraint: Annotation,
    scalaType: ScalaType,
    value: Any,
    groups: Seq[Class[_]]
  ): Set[ConstraintViolation[T]] =
    isValid(context, constraint, scalaType, value, None, None, groups)

  private[this] def isValid[T](
    context: ValidationContext[T],
    constraint: Annotation,
    scalaType: ScalaType,
    value: Any,
    constraintDescriptorOption: Option[ConstraintDescriptorImpl[Annotation]],
    validatorOption: Option[ConstraintValidator[Annotation, Any]],
    groups: Seq[Class[_]]
  ): Set[ConstraintViolation[T]] = value match {
    case _: Option[_] =>
      isValidOption(
        context,
        constraint,
        scalaType,
        value,
        constraintDescriptorOption,
        validatorOption,
        groups)
    case _ =>
      val constraintDescriptor = constraintDescriptorOption match {
        case Some(descriptor) =>
          descriptor
        case _ =>
          constraintDescriptorFactory.newConstraintDescriptor(
            name = context.fieldName.orNull,
            clazz = scalaType.erasure,
            declaringClazz = context.rootClazz.getOrElse(scalaType.erasure),
            annotation = constraint
          )
      }

      if (!ignorable(value, constraint) && groupsEnabled(constraintDescriptor, groups)) {
        val refinedScalaType =
          Types.refineScalaType(value, scalaType)

        val constraintValidator: ConstraintValidator[Annotation, Any] = validatorOption match {
          case Some(validator) =>
            validator // should already be initialized
          case _ =>
            constraintValidatorManager
              .getInitializedValidator[Annotation](
                Types.getJavaType(refinedScalaType),
                constraintDescriptor,
                validatorFactory.constraintValidatorFactory,
                validatorFactory.validatorFactoryScopedContext.getConstraintValidatorInitializationContext
              ).asInstanceOf[ConstraintValidator[Annotation, Any]]
        }

        if (constraintValidator == null) {
          val configuration =
            if (context.path.toString.isEmpty) Classes.simpleName(scalaType.erasure)
            else context.path.toString
          throw new UnexpectedTypeException(
            s"No validator could be found for constraint '${constraint.annotationType()}' " +
              s"validating type '${scalaType.erasure.getName}'. " +
              s"Check configuration for '$configuration'")
        }
        // create validator context
        val constraintValidatorContext: ConstraintValidatorContext =
          constraintValidatorContextFactory.newConstraintValidatorContext(
            context.path,
            constraintDescriptor)
        // compute if valid
        if (constraintValidator.isValid(value, constraintValidatorContext)) Set.empty
        else {
          constraintViolationFactory.buildConstraintViolations[T](
            rootClazz = context.rootClazz,
            root = context.root,
            leaf = context.leaf,
            path = context.path,
            invalidValue = value,
            constraintDescriptor = constraintDescriptor,
            constraintValidatorContext = constraintValidatorContext
          )
        }
      } else Set.empty
  }