mirror of https://github.com/apache/maven.git
[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.
This commit is contained in:
parent
baed5a294f
commit
ebac165990
|
@ -148,6 +148,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
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
|
@ -209,6 +233,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
|
@Override
|
||||||
public String toString()
|
public String toString()
|
||||||
{
|
{
|
||||||
|
@ -270,6 +318,29 @@ public class ComparableVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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()
|
public String toString()
|
||||||
{
|
{
|
||||||
return value.toString();
|
return value.toString();
|
||||||
|
@ -382,6 +453,29 @@ public class ComparableVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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()
|
public String toString()
|
||||||
{
|
{
|
||||||
return value;
|
return value;
|
||||||
|
@ -581,8 +675,6 @@ public class ComparableVersion
|
||||||
list = (ListItem) stack.pop();
|
list = (ListItem) stack.pop();
|
||||||
list.normalize();
|
list.normalize();
|
||||||
}
|
}
|
||||||
|
|
||||||
canonical = items.toString();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Item parseItem( boolean isDigit, String buf )
|
private static Item parseItem( boolean isDigit, String buf )
|
||||||
|
@ -636,19 +728,23 @@ public class ComparableVersion
|
||||||
|
|
||||||
public String getCanonical()
|
public String getCanonical()
|
||||||
{
|
{
|
||||||
|
if ( canonical == null )
|
||||||
|
{
|
||||||
|
canonical = items.toString();
|
||||||
|
}
|
||||||
return canonical;
|
return canonical;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals( Object o )
|
public boolean equals( Object o )
|
||||||
{
|
{
|
||||||
return ( o instanceof ComparableVersion ) && canonical.equals( ( (ComparableVersion) o ).canonical );
|
return ( o instanceof ComparableVersion ) && items.equals( ( (ComparableVersion) o ).items );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode()
|
public int hashCode()
|
||||||
{
|
{
|
||||||
return canonical.hashCode();
|
return items.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECKSTYLE_OFF: LineLength
|
// CHECKSTYLE_OFF: LineLength
|
||||||
|
|
Loading…
Reference in New Issue