Josef created GROOVY-7954: ----------------------------- Summary: Equal Operator for Classes implementing Comparable not Working on Interfaces Key: GROOVY-7954 URL: https://issues.apache.org/jira/browse/GROOVY-7954 Project: Groovy Issue Type: Bug Components: groovy-runtime Affects Versions: 2.4.7 Environment: Windows 10, Java 7 Reporter: Josef
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. -- This message was sent by Atlassian JIRA (v6.3.4#6332)