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
}
}