Hi, thanks for reporting this. There is indeed a problem with the equals implementation. I created an issue: https://issues.apache.org/jira/browse/OAK-2435
Regards Marcel On 22/01/15 06:55, "Johannes Birgmeier" <[email protected]> wrote: >Dear Jackrabbit/Oak developers, > >to keep this very short: I'm a new Stanford computer science PhD student >working on verification. To get started, I've written a program to >verify the hashCode/equals contract in Java. I let this run on Apache >projects. In Apache Jackrabbit-Oak, in the following class: > >https://github.com/apache/jackrabbit-oak/blob/trunk/oak-core/src/main/java >/org/apache/jackrabbit/oak/plugins/document/UpdateOp.java > >in the equals method, somebody wrote: >return name.equals(other.name) && > revision != null ? revision.equals(other.revision) : other.revision == >null; > >However, the ternary operator has lower precedence than "&&". Therefore, >to maintain the hashCode/equals contract, this should be: >return name.equals(other.name) && > (revision != null ? revision.equals(other.revision) : other.revision == >null); > >Could you perhaps get back to me with a very quick acknowledgement if >you think this is sound? I'm going to send my verifier to a conference >on computer aided verification, and bug acknowledgements help a lot to >sell a paper. Thanks a lot in advance for any kind of feedback! > >Best regards, >Johannes Birgmeier >
