This is an automated email from the ASF dual-hosted git repository. hboutemy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
commit ebac1659909e70abe2520262d0a51cb258760708 Author: Stefan Oehme <[email protected]> AuthorDate: Tue Apr 9 15:35:07 2019 +0200 [MNG-6630] - Make ComparableVersion faster By not allocating the canonical representation for equals/hashcode, but instead using the items we already have. This saves both time and memory. I left the canonical field around for testing purposes. --- .../artifact/versioning/ComparableVersion.java | 104 ++++++++++++++++++++- 1 file changed, 100 insertions(+), 4 deletions(-) diff --git a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java index 568ee44..64e07cd 100644 --- a/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java +++ b/maven-artifact/src/main/java/org/apache/maven/artifact/versioning/ComparableVersion.java @@ -149,6 +149,30 @@ public class ComparableVersion } @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + + IntItem intItem = (IntItem) o; + + return value == intItem.value; + + } + + @Override + public int hashCode() + { + return value; + } + + @Override public String toString() { return Integer.toString( value ); @@ -210,6 +234,30 @@ public class ComparableVersion } @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + + LongItem longItem = (LongItem) o; + + return value == longItem.value; + + } + + @Override + public int hashCode() + { + return (int) ( value ^ ( value >>> 32 ) ); + } + + @Override public String toString() { return Long.toString( value ); @@ -270,6 +318,29 @@ public class ComparableVersion } @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + + BigIntegerItem that = (BigIntegerItem) o; + + return value.equals( that.value ); + + } + + @Override + public int hashCode() + { + return value.hashCode(); + } + public String toString() { return value.toString(); @@ -382,6 +453,29 @@ public class ComparableVersion } @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + + StringItem that = (StringItem) o; + + return value.equals( that.value ); + + } + + @Override + public int hashCode() + { + return value.hashCode(); + } + public String toString() { return value; @@ -581,8 +675,6 @@ public class ComparableVersion list = (ListItem) stack.pop(); list.normalize(); } - - canonical = items.toString(); } private static Item parseItem( boolean isDigit, String buf ) @@ -636,19 +728,23 @@ public class ComparableVersion public String getCanonical() { + if ( canonical == null ) + { + canonical = items.toString(); + } return canonical; } @Override public boolean equals( Object o ) { - return ( o instanceof ComparableVersion ) && canonical.equals( ( (ComparableVersion) o ).canonical ); + return ( o instanceof ComparableVersion ) && items.equals( ( (ComparableVersion) o ).items ); } @Override public int hashCode() { - return canonical.hashCode(); + return items.hashCode(); } // CHECKSTYLE_OFF: LineLength
