[
http://opensource.atlassian.com/projects/hibernate/browse/HV-421?page=com...
]
Gunnar Morling commented on HV-421:
-----------------------------------
The problem with conjoining all the preconditions of a method in a hierarchy is that a
caller could get a constraint violation although he completely fulfilled the contract he
has seen. So if a caller invokes foo() on a variable which's static type is A, a
constraint violation might be the result if the variable's runtime is B and the
precondition at B#foo() is stronger without any chance for the caller to know in advance.
So most PbC implementations choose to disjoin the preconditions in a hierarchy, causing
the weakest precondition in the hierarchy to apply. Other implementations choose to
prohibit multiple preconditions in a hierarchy at all (e.g. Microsoft's Code
Contracts). Given the complexity of the matter at hand and the chance we might get
something wrong here, I feel we might well start with such a conservative approach in 4.2
and add support for the inheritence scenario later on. WDYT?
Reconsider behavior of parameter validation for inheritance
hierarchies
-----------------------------------------------------------------------
Key: HV-421
URL:
http://opensource.atlassian.com/projects/hibernate/browse/HV-421
Project: Hibernate Validator
Issue Type: Bug
Components: engine
Reporter: Gunnar Morling
Assignee: Gunnar Morling
Fix For: 4.2.0.Beta2
Let A extend B and A#foo() override B#foo(). When validating an invocation of A#foo() the
current implementation will evaluate all parameter constraints defined at A#foo() *and*
B#foo(). That way foo()'s preconditions defined in B are strengthened by A.
According to the ["Programming by
contract"|http://en.wikipedia.org/wiki/Programming_by_contract] article on WP this is
not allowed, subtypes may only weaken preconditions defined by supertypes. The common
implementation pattern for this is to combine the preconditions within a hierarchy by a
logical OR, meaning the weakest precondition in the hierarchy applies.
Note that postconditions (return value constraints) may be strengthened (but not
weakened) by subtypes. Therefore the current implementation (AND combination) should be
correct here.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://opensource.atlassian.com/projects/hibernate/secure/Administrators....
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira