You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by th...@apache.org on 2022/04/29 12:08:30 UTC

[wicket] branch wicket-9.x updated: WICKET-6977 More efficient hashcode computations (#513)

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 <as...@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 <th...@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;
 		}
 
 		/**