[ http://jira.codehaus.org/browse/MNG-3047?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
John Casey closed MNG-3047. --------------------------- Resolution: Fixed Fix Version/s: (was: Reviewed Pending Version Assignment) 2.1-alpha-1 2.0.8 Applied. Thanks! > DefaultArtifactVersion compareTo inconsistent with equals > --------------------------------------------------------- > > Key: MNG-3047 > URL: http://jira.codehaus.org/browse/MNG-3047 > Project: Maven 2 > Issue Type: Improvement > Components: Artifacts and Repositories > Affects Versions: 2.0.6 > Reporter: David Julian > Assignee: John Casey > Priority: Minor > Fix For: 2.0.8, 2.1-alpha-1 > > Attachments: MNG-3047-maven-artifact.patch > > > Over the course of investigating MNG-3046, I discovered > DefaultArtifactVersion's implementation of Comparable.compareTo() is > inconsistent with its equals(Object). (DefaultArtifactVersion doesn't > implement equals(...); it's using the instance equals it gets from Object.) > The contract for Comparable.compareTo()[1] states, while it's not strictly > required the behavior between compareTo and equals be consistent, breaking it > should be an overt and visible decision. In the case of > DefaultArtifactVersion, there's really no reason not to implement equals and > hashCode. > I have a fix--I'll attach a patch shortly--that implements equals and > hashCode following the recipes from Bloch's "Effective Java." In fact, > equals now uses a cleaned-up compareTo, ensuring consistency across these > methods. > Since the interface ArtifactVersion extends Comparable (as opposed to > DefaultArtifactVersion implementing both ArtifactVersion and Comparable) I > assume the intent is to be able to compare different ArtifactVersions > regardless of implementation. Therefore, I added the equals and hashCode > declaration to the interface and made the equals and compareTo > implementations work with all ArtifactVersions. > Note that this work obviates the patch for MNG-3046. I made that patch small > and surgical to fix a major issue. This fix is less urgent--still important, > imho--but I wasn't sure if the interface changes were right for the whole > project, if such a big change is warranted, etc. The bottom line is: only > that patch or this one need be applied, not both. > [1] > http://java.sun.com/javase/6/docs/api/java/lang/Comparable.html#compareTo(T) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira