Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
2.4.7
-
None
-
Windows 10, Java 7
Description
Using the equal operator "==" on two instances A and B does not work correctly, when
1) A and B implement the same interface I1 but are not the same class and
2) interface I1 extends the "Comparable" interface.
The checking in DefaultTypeTransformation.compareToWithEqualityCheck(...) checks for assignable classes, and uses compareTo when assignable on class level (which is not the case for instance A and B). But it does not check on interface level.
That way, calling the compareTo(..) method is not performed.
In my use case, class A and B are actually considered equal, even so their concrete implementation is different. And the compareTo(...) method would actually return 0.
How about doing real equality checking instead of returning -1 close to the end of method DefaultTypeTransformation.compareToWithEqualityCheck(...):
...
if (equalityCheckOnly) {
return left.equals(right) ? 0 : -1;
}
throw new GroovyRuntimeException("Cannot compare " + left.getClass().getName() + " with value '" +
left + "' and " + right.getClass().getName() + " with value '" + right + "'");
Thanks for your effort.
Attachments
Attachments
Issue Links
- links to