private <T> int validateParametersForGroup(MethodValidationContext<T> validationContext, T object, Object[] parameterValues, Group group) {
int numberOfViolationsBefore = validationContext.getFailingConstraints().size();
ExecutableElement executable = validationContext.getExecutable();
BeanMetaData<T> beanMetaData = beanMetaDataManager.getBeanMetaData( validationContext.getRootBeanClass() );
ExecutableMetaData methodMetaData = beanMetaData.getMetaDataFor( executable );
// TODO GM: define behavior with respect to redefined default sequences. Should only the
// sequence from the validated bean be honored or also default sequence definitions up in
// the inheritance tree?
// For now a redefined default sequence will only be considered if specified at the bean
// hosting the validated itself, but no other default sequence from parent types
List<Class<?>> groupList;
if ( group.isDefaultGroup() ) {
groupList = beanMetaData.getDefaultGroupSequence( object );
}
else {
groupList = Arrays.<Class<?>>asList( group.getDefiningClass() );
}
//the only case where we can have multiple groups here is a redefined default group sequence
for ( Class<?> oneGroup : groupList ) {
int numberOfViolationsOfCurrentGroup = 0;
for ( int i = 0; i < parameterValues.length; i++ ) {
Object value = parameterValues[i];
String parameterName = methodMetaData.getParameterMetaData( i ).getName();
// validate constraints at parameter itself
ValueContext<T, Object> valueContext;
if ( object != null ) {
valueContext = ValueContext.getLocalExecutionContext(
object, PathImpl.createPathForParameter( executable, parameterName ), i, parameterName
);
}
else {
valueContext = ValueContext.getLocalExecutionContext(
object,
(Class<T>) executable.getMember().getDeclaringClass(),
PathImpl.createPathForParameter( executable, parameterName ),
i,
parameterName
);
}