def getParameters()

in util-validator/src/main/scala/org/hibernate/validator/internal/properties/javabean/ExecutableCallable.scala [17:79]


  def getParameters(executable: Executable): Seq[JavaBeanParameter] = {
    if (executable.getParameterCount == 0) Seq.empty[JavaBeanParameter]
    else {
      val parameters = new mutable.ArrayBuffer[JavaBeanParameter](executable.getParameterCount)

      val parameterArray = executable.getParameters
      val parameterTypes = executable.getParameterTypes
      val genericParameterTypes = executable.getGenericParameterTypes
      if (parameterTypes.length == genericParameterTypes.length) {
        var index = 0;
        val length = parameterArray.length
        while (index < length) {
          parameters.append(
            new JavaBeanParameter(
              index,
              parameterArray(index),
              parameterTypes(index),
              getErasedTypeIfTypeVariable(genericParameterTypes(index))))

          index += 1
        }
      } else {
        // in this case, we have synthetic or implicit parameters
        val hasParameterModifierInfo = isAnyParameterCarryingMetadata(parameterArray)
        if (!hasParameterModifierInfo)
          throw new ValidationException("")

        var explicitlyDeclaredParameterIndex = 0
        var index = 0;
        val length = parameterArray.length
        while (index < length) {
          if (explicitlyDeclaredParameterIndex < genericParameterTypes.length
            && isExplicit(parameterArray(index))
            && parameterTypesMatch(
              parameterTypes(index),
              genericParameterTypes(explicitlyDeclaredParameterIndex))) {
            // in this case we have a parameter that is present and matches ("most likely") to the one in the generic parameter types list
            parameters.append(
              new JavaBeanParameter(
                index,
                parameterArray(index),
                parameterTypes(index),
                getErasedTypeIfTypeVariable(genericParameterTypes(explicitlyDeclaredParameterIndex))
              )
            )
            explicitlyDeclaredParameterIndex += 1
          } else {
            // in this case, the parameter is not present in genericParameterTypes, or the types doesn't match
            parameters.append(
              new JavaBeanParameter(
                index,
                parameterArray(index),
                parameterTypes(index),
                parameterTypes(index)))
          }

          index += 1
        }
      }

      parameters.toSeq
    }
  }