On Fri, 18 Feb 2011 09:01:16 +0100, Emmanuel Bernard
<emmanuel(a)hibernate.org> wrote:
Reading the Google design by contract work, I realized that we do not
cover cross-parameter validation in method-level validation.
I assume you are talking about cofoja (
http://code.google.com/p/cofoja),
right?
//We want to make sure departure is after arrival.
void book(Date arrival, Date departure);
Any idea on ow best to address that?
Some ideas:
Introduce an equivalent to class level validators:
@DateParameterCheck
void book(Date arrival, Date departure);
@MyMethodValidator could contain a marker annotation so that we know that
we
have a method level validation. At first thought we would have to pass
object arrays
to the validator implementations. This is of course at odds with the type
safety approach
of BV.
Also if the method has a return value it is not directly clear by reading
the code
whether the return value would be validated or the parameters.
An alternative would be something similar to @ScriptAssert:
@ParameterCheck("arg[0].before(arg[1])")
void book(Date arrival, Date departure);
Gunnar already thought about naming parameters using @Named (HV-409),
maybe we could also do
something like:
@ParameterCheck("arrival.before(departure)")
void book(@Named("arrival") Date arrival, @Named("departure") Date
departure);
--Hardy