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

theigl pushed a commit to branch wicket-9.x
in repository https://gitbox.apache.org/repos/asf/wicket.git


The following commit(s) were added to refs/heads/wicket-9.x by this push:
     new bde5ac8a06 WICKET-6977 More efficient hashcode computations (#513)
bde5ac8a06 is described below

commit bde5ac8a0695332c06df2d9459d71953275d6a49
Author: Alan Stange <asta...@gmail.com>
AuthorDate: Fri Apr 29 08:01:01 2022 -0400

    WICKET-6977 More efficient hashcode computations (#513)
    
    * Use more efficient hashcode computations
    
    * WICKET-6977 Always call super for equals/hashCode in abstract header item 
base classes
    
    Co-authored-by: Thomas Heigl <thomas.he...@gmail.com>
    (cherry picked from commit 80726e2dae60e5893be0621761883f2dec20cac0)
---
 .../head/AbstractCssReferenceHeaderItem.java       |  9 +++++--
 .../AbstractJavaScriptReferenceHeaderItem.java     | 17 +++++++++---
 .../wicket/markup/head/CssReferenceHeaderItem.java |  8 +++++-
 .../markup/head/CssUrlReferenceHeaderItem.java     |  7 ++++-
 .../markup/head/JavaScriptContentHeaderItem.java   |  5 +++-
 .../markup/head/JavaScriptReferenceHeaderItem.java |  6 ++++-
 .../head/JavaScriptUrlReferenceHeaderItem.java     |  5 +++-
 .../wicket/markup/head/MetaDataHeaderItem.java     |  6 ++++-
 .../wicket/markup/head/OnEventHeaderItem.java      |  6 ++++-
 .../wicket/request/resource/ResourceReference.java | 31 +++++++++-------------
 10 files changed, 69 insertions(+), 31 deletions(-)

diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractCssReferenceHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractCssReferenceHeaderItem.java
index eccbf521e1..cfe993b950 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractCssReferenceHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractCssReferenceHeaderItem.java
@@ -101,7 +101,6 @@ public abstract class AbstractCssReferenceHeaderItem 
extends CssHeaderItem imple
                response.write("\n");
        }
 
-
        @Override
        public boolean equals(Object o)
        {
@@ -109,6 +108,8 @@ public abstract class AbstractCssReferenceHeaderItem 
extends CssHeaderItem imple
                        return true;
                if (o == null || getClass() != o.getClass())
                        return false;
+               if (!super.equals(o))
+                       return false;
                AbstractCssReferenceHeaderItem that = 
(AbstractCssReferenceHeaderItem)o;
                return Objects.equals(integrity, that.integrity)
                        && Objects.equals(crossOrigin, that.crossOrigin);
@@ -117,6 +118,10 @@ public abstract class AbstractCssReferenceHeaderItem 
extends CssHeaderItem imple
        @Override
        public int hashCode()
        {
-               return Objects.hash(integrity, crossOrigin);
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + (crossOrigin != null ? 
crossOrigin.hashCode() : 0);
+               result = 31 * result + (integrity != null ? 
integrity.hashCode() : 0);
+               return result;
        }
 }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractJavaScriptReferenceHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractJavaScriptReferenceHeaderItem.java
index 2dfd200ef1..91daf7fcdd 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractJavaScriptReferenceHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractJavaScriptReferenceHeaderItem.java
@@ -124,9 +124,13 @@ public abstract class 
AbstractJavaScriptReferenceHeaderItem extends JavaScriptHe
        @Override
        public boolean equals(Object o)
        {
-               if (this == o) return true;
-               if (o == null || getClass() != o.getClass()) return false;
-               AbstractJavaScriptReferenceHeaderItem that = 
(AbstractJavaScriptReferenceHeaderItem) o;
+               if (this == o)
+                       return true;
+               if (o == null || getClass() != o.getClass())
+                       return false;
+               if (!super.equals(o))
+                       return false;
+               AbstractJavaScriptReferenceHeaderItem that = 
(AbstractJavaScriptReferenceHeaderItem)o;
                return async == that.async &&
                                defer == that.defer &&
                                Objects.equals(charset, that.charset);
@@ -135,6 +139,11 @@ public abstract class 
AbstractJavaScriptReferenceHeaderItem extends JavaScriptHe
        @Override
        public int hashCode()
        {
-               return Objects.hash(async, defer, charset);
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + (async ? 1 : 0);
+               result = 31 * result + (defer ? 1 : 0);
+               result = 31 * result + (charset != null ? charset.hashCode() : 
0);
+               return result;
        }
 }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java
index f26ccc3bb0..a2ee043045 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java
@@ -154,7 +154,13 @@ public class CssReferenceHeaderItem extends 
AbstractCssReferenceHeaderItem imple
        @Override
        public int hashCode()
        {
-               return Objects.hash(super.hashCode(), reference, getMedia(), 
pageParameters, getRel());
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + ((reference != null) ? 
reference.hashCode() : 0);
+               result = 31 * result + ((getMedia() != null) ? 
getMedia().hashCode() : 0);
+               result = 31 * result + ((pageParameters != null) ? 
pageParameters.hashCode() : 0);
+               result = 31 * result + ((getRel() != null) ? 
getRel().hashCode() : 0);
+               return result;
        }
 
        @Override
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java
index 5895b7ba2d..950a1106ef 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java
@@ -97,7 +97,12 @@ public class CssUrlReferenceHeaderItem extends 
AbstractCssReferenceHeaderItem
        @Override
        public int hashCode()
        {
-               return Objects.hash(super.hashCode(), url, getMedia(), 
getRel());
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + ((url != null) ? url.hashCode() : 0);
+               result = 31 * result + ((getMedia() != null) ? 
getMedia().hashCode() : 0);
+               result = 31 * result + ((getRel() != null) ? 
getRel().hashCode() : 0);
+               return result;
        }
 
        @Override
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptContentHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptContentHeaderItem.java
index b4f80cbb75..0c8839d6f4 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptContentHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptContentHeaderItem.java
@@ -94,6 +94,9 @@ public class JavaScriptContentHeaderItem extends 
JavaScriptHeaderItem
        @Override
        public int hashCode()
        {
-               return Objects.hash(super.hashCode(), javaScript);
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + ((javaScript != null) ? 
javaScript.hashCode() : 0);
+               return result;
        }
 }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptReferenceHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptReferenceHeaderItem.java
index 3bebdf2457..a04c6ed306 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptReferenceHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptReferenceHeaderItem.java
@@ -123,7 +123,11 @@ public class JavaScriptReferenceHeaderItem extends 
AbstractJavaScriptReferenceHe
        @Override
        public int hashCode()
        {
-               return java.util.Objects.hash(super.hashCode(), reference, 
pageParameters);
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + (reference != null ? 
reference.hashCode() : 0);
+               result = 31 * result + (pageParameters != null ? 
pageParameters.hashCode() : 0);
+               return result;
        }
 
        @Override
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptUrlReferenceHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptUrlReferenceHeaderItem.java
index bcf7c7c0ad..dc74144a4a 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptUrlReferenceHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptUrlReferenceHeaderItem.java
@@ -94,6 +94,9 @@ public class JavaScriptUrlReferenceHeaderItem extends 
AbstractJavaScriptReferenc
        @Override
        public int hashCode()
        {
-               return Objects.hash(super.hashCode(), url);
+               // Not using `Objects.hash` for performance reasons
+               int result = super.hashCode();
+               result = 31 * result + (url != null ? url.hashCode() : 0);
+               return result;
        }
 }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java
index 38efb5b070..6649ef2b66 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java
@@ -278,6 +278,10 @@ public class MetaDataHeaderItem extends HeaderItem
        @Override
        public int hashCode()
        {
-               return Objects.hash(tagAttributes, tagMinimizedAttributes, 
tagName);
+               // Not using `Objects.hash` for performance reasons
+               int result = tagAttributes != null ? tagAttributes.hashCode() : 
0;
+               result = 31 * result + (tagMinimizedAttributes != null ? 
tagMinimizedAttributes.hashCode() : 0);
+               result = 31 * result + (tagName != null ? tagName.hashCode() : 
0);
+               return result;
        }
 }
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/OnEventHeaderItem.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/OnEventHeaderItem.java
index 9c337877a0..197500b0a6 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/head/OnEventHeaderItem.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/head/OnEventHeaderItem.java
@@ -200,7 +200,11 @@ public class OnEventHeaderItem extends 
AbstractCspHeaderItem
        @Override
        public int hashCode()
        {
-               return Objects.hash(target, event, javaScript);
+               // Not using `Objects.hash` for performance reasons
+               int result = target != null ? target.hashCode() : 0;
+               result = 31 * result + (event != null ? event.hashCode() : 0);
+               result = 31 * result + (javaScript != null ? 
javaScript.hashCode() : 0);
+               return result;
        }
 
        @Override
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
index 4812f1985a..7e97cab8d6 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/request/resource/ResourceReference.java
@@ -350,9 +350,6 @@ public abstract class ResourceReference implements 
IClusterable
                        return variation;
                }
 
-               /**
-                * @see java.lang.Object#equals(java.lang.Object)
-                */
                @Override
                public boolean equals(Object obj)
                {
@@ -370,13 +367,13 @@ public abstract class ResourceReference implements 
IClusterable
                                Objects.equal(getVariation(), 
that.getVariation());
                }
 
-               /**
-                * @see java.lang.Object#hashCode()
-                */
                @Override
-               public int hashCode()
-               {
-                       return Objects.hashCode(getLocale(), getStyle(), 
getVariation());
+               public int hashCode() {
+                       // Not using `Objects.hash` for performance reasons
+                       int result = locale != null ? locale.hashCode() : 0;
+                       result = 31 * result + (style != null ? 
style.hashCode() : 0);
+                       result = 31 * result + (variation != null ? 
variation.hashCode() : 0);
+                       return result;
                }
 
                /**
@@ -441,9 +438,6 @@ public abstract class ResourceReference implements 
IClusterable
                        this.variation = variation != null ? variation.intern() 
: null;
                }
 
-               /**
-                * @see java.lang.Object#equals(java.lang.Object)
-                */
                @Override
                public boolean equals(final Object obj)
                {
@@ -463,13 +457,14 @@ public abstract class ResourceReference implements 
IClusterable
                                Objects.equal(variation, that.variation);
                }
 
-               /**
-                * @see java.lang.Object#hashCode()
-                */
                @Override
-               public int hashCode()
-               {
-                       return Objects.hashCode(scope, name, locale, style, 
variation);
+               public int hashCode() {
+                       int result = scope != null ? scope.hashCode() : 0;
+                       result = 31 * result + (name != null ? name.hashCode() 
: 0);
+                       result = 31 * result + (locale != null ? 
locale.hashCode() : 0);
+                       result = 31 * result + (style != null ? 
style.hashCode() : 0);
+                       result = 31 * result + (variation != null ? 
variation.hashCode() : 0);
+                       return result;
                }
 
                /**

Reply via email to