private Path createPathWithElementDescriptors(Path path, ValueContext<?, ?> localContext) {
List<ElementDescriptor> elementDescriptors = new ArrayList<ElementDescriptor>();
// first node in method level validation is the method and its descriptor
ExecutableDescriptorImpl executableDescriptor = getMethodDescriptor();
elementDescriptors.add( getMethodDescriptor() );
Object value;
if ( isReturnValueValidation( localContext ) ) {
// add the return value descriptor
elementDescriptors.add( executableDescriptor.getReturnValueDescriptor() );
value = localContext.getCurrentBean();
if ( value != null && ReflectionHelper.isIterable( value.getClass() ) ) {
value = ReflectionHelper.getIndexedValue( value, getIterableIndex( path ) );
}
}
else {
// add the parameter descriptor
Integer parameterIndex = localContext.getParameterIndex();
ParameterDescriptor parameterDescriptor = executableDescriptor.getParameterDescriptors()
.get( parameterIndex );
elementDescriptors.add( parameterDescriptor );
value = parameterValues[localContext.getParameterIndex()];