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