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; } /**