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

Reply via email to