You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by sl...@apache.org on 2019/04/15 13:47:39 UTC

[maven] 01/01: [MNG-6630] - Make ComparableVersion faster

This is an automated email from the ASF dual-hosted git repository.

slachiewicz pushed a commit to branch MNG-6630
in repository https://gitbox.apache.org/repos/asf/maven.git

commit a034f86241be34316e10c3c036de76be02a21a03
Author: Stefan Oehme <st...@gmail.com>
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 c0ad57d..33bbe1a 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
@@ -151,6 +151,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 );
@@ -212,6 +236,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 );
@@ -272,6 +320,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();
@@ -384,6 +455,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;
@@ -583,8 +677,6 @@ public class ComparableVersion
             list = (ListItem) stack.pop();
             list.normalize();
         }
-
-        canonical = items.toString();
     }
 
     private static Item parseItem( boolean isDigit, String buf )
@@ -631,19 +723,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