You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2017/05/11 19:05:11 UTC

wicket git commit: WICKET-6362 HeaderItems with different PageParameters are treated as identical

Repository: wicket
Updated Branches:
  refs/heads/master 9ed4849be -> 47aa1461d


WICKET-6362 HeaderItems with different PageParameters are treated as identical

Implement proper #equals() and #hashCode() for all HeaderItems


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/47aa1461
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/47aa1461
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/47aa1461

Branch: refs/heads/master
Commit: 47aa1461d58b9a5660fc11032db952ce4df36a33
Parents: 9ed4849
Author: Martin Tzvetanov Grigorov <mg...@apache.org>
Authored: Thu May 11 21:04:28 2017 +0200
Committer: Martin Tzvetanov Grigorov <mg...@apache.org>
Committed: Thu May 11 21:04:28 2017 +0200

----------------------------------------------------------------------
 .../AbstractJavaScriptReferenceHeaderItem.java   | 19 +++++++++++++++++++
 .../wicket/markup/head/CssContentHeaderItem.java | 14 ++++++++------
 .../apache/wicket/markup/head/CssHeaderItem.java | 18 ++++++++++++++++++
 .../markup/head/CssReferenceHeaderItem.java      | 15 ++++++++++-----
 .../markup/head/CssUrlReferenceHeaderItem.java   | 14 +++++++++-----
 .../markup/head/JavaScriptContentHeaderItem.java | 15 +++++++++------
 .../wicket/markup/head/JavaScriptHeaderItem.java | 18 ++++++++++++++++++
 .../head/JavaScriptReferenceHeaderItem.java      | 15 ++++++++++-----
 .../head/JavaScriptUrlReferenceHeaderItem.java   | 15 +++++++++------
 .../wicket/markup/head/MetaDataHeaderItem.java   | 16 +++++++++++-----
 .../wicket/markup/head/OnDomReadyHeaderItem.java | 12 +++++++-----
 .../wicket/markup/head/OnEventHeaderItem.java    | 18 +++++++++---------
 .../wicket/markup/head/OnLoadHeaderItem.java     | 15 ++++++++-------
 .../wicket/markup/head/PriorityHeaderItem.java   | 16 ++++++++--------
 .../wicket/markup/head/StringHeaderItem.java     | 14 ++++++++------
 .../markup/head/filter/FilteredHeaderItem.java   | 15 ++++++++-------
 .../wicket/http2/markup/head/PushHeaderItem.java | 19 +++++++++++++++++++
 .../AbstractAutoCompleteBehavior.java            | 16 ++++++++++++++++
 18 files changed, 204 insertions(+), 80 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/AbstractJavaScriptReferenceHeaderItem.java
----------------------------------------------------------------------
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 06f898d..de85ad8 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
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.head;
 
+import java.util.Objects;
+
 /**
  * A {@link org.apache.wicket.markup.head.HeaderItem} that supports <em>async</em>,
  * <em>defer</em> and <em>charset</em> attributes
@@ -86,4 +88,21 @@ public abstract class AbstractJavaScriptReferenceHeaderItem extends JavaScriptHe
 		this.charset = charset;
 		return this;
 	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		AbstractJavaScriptReferenceHeaderItem that = (AbstractJavaScriptReferenceHeaderItem) o;
+		return async == that.async &&
+				defer == that.defer &&
+				Objects.equals(charset, that.charset);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(async, defer, charset);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java
index 80c3609..0367f8d 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssContentHeaderItem.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Objects;
 
 import org.apache.wicket.request.Response;
 import org.apache.wicket.core.util.string.CssUtils;
@@ -90,16 +91,17 @@ public class CssContentHeaderItem extends CssHeaderItem
 	}
 
 	@Override
-	public int hashCode()
+	public boolean equals(Object o)
 	{
-		return getCss().hashCode();
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		CssContentHeaderItem that = (CssContentHeaderItem) o;
+		return Objects.equals(css, that.css);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public int hashCode()
 	{
-		if (obj instanceof CssContentHeaderItem)
-			return ((CssContentHeaderItem)obj).getCss().equals(getCss());
-		return false;
+		return Objects.hash(css);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java
index aab17c9..d2f05ef 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/CssHeaderItem.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.head;
 
+import java.util.Objects;
+
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.core.util.string.CssUtils;
 import org.apache.wicket.request.Response;
@@ -296,4 +298,20 @@ public abstract class CssHeaderItem extends HeaderItem
 		}
 		response.write("\n");
 	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		CssHeaderItem that = (CssHeaderItem) o;
+		return Objects.equals(condition, that.condition) &&
+				Objects.equals(markupId, that.markupId);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(condition, markupId);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/CssReferenceHeaderItem.java
----------------------------------------------------------------------
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 ee23131..0e0c1ce 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
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Response;
@@ -128,14 +129,18 @@ public class CssReferenceHeaderItem extends CssHeaderItem implements IReferenceH
 	@Override
 	public int hashCode()
 	{
-		return getReference().hashCode();
+		return Objects.hash(super.hashCode(), reference, media, pageParameters);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		if (obj instanceof CssReferenceHeaderItem)
-			return ((CssReferenceHeaderItem)obj).getReference().equals(getReference());
-		return false;
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		if (!super.equals(o)) return false;
+		CssReferenceHeaderItem that = (CssReferenceHeaderItem) o;
+		return Objects.equals(reference, that.reference) &&
+				Objects.equals(media, that.media) &&
+				Objects.equals(pageParameters, that.pageParameters);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/CssUrlReferenceHeaderItem.java
----------------------------------------------------------------------
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 0421668..386fa65 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
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.head;
 
 import java.util.Arrays;
+import java.util.Objects;
 
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.UrlUtils;
@@ -90,14 +91,17 @@ public class CssUrlReferenceHeaderItem extends CssHeaderItem
 	@Override
 	public int hashCode()
 	{
-		return getUrl().hashCode();
+		return Objects.hash(super.hashCode(), url, media);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		if (obj instanceof CssUrlReferenceHeaderItem)
-			return ((CssUrlReferenceHeaderItem)obj).getUrl().equals(getUrl());
-		return false;
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		if (!super.equals(o)) return false;
+		CssUrlReferenceHeaderItem that = (CssUrlReferenceHeaderItem) o;
+		return Objects.equals(url, that.url) &&
+				Objects.equals(media, that.media);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptContentHeaderItem.java
----------------------------------------------------------------------
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 a514e18..2b3f8d5 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
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Objects;
 
 import org.apache.wicket.request.Response;
 import org.apache.wicket.core.util.string.JavaScriptUtils;
@@ -91,16 +92,18 @@ public class JavaScriptContentHeaderItem extends JavaScriptHeaderItem
 	}
 
 	@Override
-	public int hashCode()
+	public boolean equals(Object o)
 	{
-		return getJavaScript().hashCode();
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		if (!super.equals(o)) return false;
+		JavaScriptContentHeaderItem that = (JavaScriptContentHeaderItem) o;
+		return Objects.equals(javaScript, that.javaScript);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public int hashCode()
 	{
-		if (obj instanceof JavaScriptContentHeaderItem)
-			return ((JavaScriptContentHeaderItem)obj).getJavaScript().equals(getJavaScript());
-		return false;
+		return Objects.hash(super.hashCode(), javaScript);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptHeaderItem.java
index 920ba5d..0b43443 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptHeaderItem.java
@@ -16,6 +16,8 @@
  */
 package org.apache.wicket.markup.head;
 
+import java.util.Objects;
+
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.core.util.string.JavaScriptUtils;
 import org.apache.wicket.request.Response;
@@ -371,4 +373,20 @@ public abstract class JavaScriptHeaderItem extends HeaderItem
 			response.write("<![endif]-->\n");
 		}
 	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		JavaScriptHeaderItem that = (JavaScriptHeaderItem) o;
+		return Objects.equals(condition, that.condition) &&
+				Objects.equals(markupId, that.markupId);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(condition, markupId);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptReferenceHeaderItem.java
----------------------------------------------------------------------
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 f130149..ca52cfb 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
@@ -20,6 +20,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import org.apache.wicket.core.util.lang.WicketObjects;
 import org.apache.wicket.request.IRequestHandler;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.cycle.RequestCycle;
@@ -28,6 +29,7 @@ import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.resource.bundles.IResourceBundle;
 import org.apache.wicket.util.lang.Args;
+import org.apache.wicket.util.lang.Objects;
 import org.apache.wicket.util.string.Strings;
 
 /**
@@ -133,14 +135,17 @@ public class JavaScriptReferenceHeaderItem extends AbstractJavaScriptReferenceHe
 	@Override
 	public int hashCode()
 	{
-		return getReference().hashCode();
+		return java.util.Objects.hash(super.hashCode(), reference, pageParameters);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		if (obj instanceof JavaScriptReferenceHeaderItem)
-			return ((JavaScriptReferenceHeaderItem)obj).getReference().equals(getReference());
-		return false;
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		if (!super.equals(o)) return false;
+		JavaScriptReferenceHeaderItem that = (JavaScriptReferenceHeaderItem) o;
+		return java.util.Objects.equals(reference, that.reference) &&
+				java.util.Objects.equals(pageParameters, that.pageParameters);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/JavaScriptUrlReferenceHeaderItem.java
----------------------------------------------------------------------
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 fb4caf9..9c7bdbf 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
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Objects;
 
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.UrlUtils;
@@ -91,16 +92,18 @@ public class JavaScriptUrlReferenceHeaderItem extends AbstractJavaScriptReferenc
 	}
 
 	@Override
-	public int hashCode()
+	public boolean equals(Object o)
 	{
-		return getUrl().hashCode();
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		if (!super.equals(o)) return false;
+		JavaScriptUrlReferenceHeaderItem that = (JavaScriptUrlReferenceHeaderItem) o;
+		return Objects.equals(url, that.url);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public int hashCode()
 	{
-		if (obj instanceof JavaScriptUrlReferenceHeaderItem)
-			return ((JavaScriptUrlReferenceHeaderItem)obj).getUrl().equals(getUrl());
-		return false;
+		return Objects.hash(super.hashCode(), url);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/MetaDataHeaderItem.java
----------------------------------------------------------------------
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 35b3cbd..1835a75 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
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import org.apache.wicket.model.IModel;
 import org.apache.wicket.model.Model;
@@ -29,7 +30,7 @@ import org.apache.wicket.util.string.Strings;
 import org.apache.wicket.util.value.ValueMap;
 
 /**
- * {@link HeaderItem} for meta informations such as &lt;meta&gt; tags or 
+ * {@link HeaderItem} for meta information such as &lt;meta&gt; tags or
  * canonical &lt;link&gt;
  * 
  * @author andrea del bene
@@ -219,16 +220,21 @@ public class MetaDataHeaderItem extends HeaderItem
 
 		return headerItem;
 	}
-	
+
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		return obj instanceof MetaDataHeaderItem && ((MetaDataHeaderItem) obj).generateString().equals(generateString());
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		MetaDataHeaderItem that = (MetaDataHeaderItem) o;
+		return Objects.equals(tagAttributes, that.tagAttributes) &&
+				Objects.equals(tagMinimizedAttributes, that.tagMinimizedAttributes) &&
+				Objects.equals(tagName, that.tagName);
 	}
 
 	@Override
 	public int hashCode()
 	{
-		return generateString().hashCode();
+		return Objects.hash(tagAttributes, tagMinimizedAttributes, tagName);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/OnDomReadyHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/OnDomReadyHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/OnDomReadyHeaderItem.java
index 9d3d5d8..45ec472 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/OnDomReadyHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/OnDomReadyHeaderItem.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.request.Response;
@@ -103,15 +104,16 @@ public class OnDomReadyHeaderItem extends HeaderItem
 	@Override
 	public int hashCode()
 	{
-		return getJavaScript().hashCode();
+		return Objects.hash(javaScript);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		if (obj instanceof OnDomReadyHeaderItem)
-			return ((OnDomReadyHeaderItem)obj).getJavaScript().equals(getJavaScript());
-		return false;
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		OnDomReadyHeaderItem that = (OnDomReadyHeaderItem) o;
+		return Objects.equals(javaScript, that.javaScript);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/OnEventHeaderItem.java
----------------------------------------------------------------------
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 b171616..b69e7a4 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
@@ -19,6 +19,7 @@ package org.apache.wicket.markup.head;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
+import java.util.Objects;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.core.util.string.JavaScriptUtils;
@@ -161,19 +162,18 @@ public class OnEventHeaderItem extends HeaderItem
 	@Override
 	public int hashCode()
 	{
-		return getTarget().hashCode() ^ getEvent().hashCode() ^ getJavaScript().hashCode();
+		return Objects.hash(target, event, javaScript);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		if (obj instanceof OnEventHeaderItem)
-		{
-			OnEventHeaderItem other = (OnEventHeaderItem)obj;
-			return other.getTarget().equals(getTarget()) && other.getEvent().equals(getEvent()) &&
-				other.getJavaScript().equals(getJavaScript());
-		}
-		return false;
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		OnEventHeaderItem that = (OnEventHeaderItem) o;
+		return Objects.equals(target, that.target) &&
+				Objects.equals(event, that.event) &&
+				Objects.equals(javaScript, that.javaScript);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/OnLoadHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/OnLoadHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/OnLoadHeaderItem.java
index 76e45c0..51e34bf 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/OnLoadHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/OnLoadHeaderItem.java
@@ -18,13 +18,13 @@ package org.apache.wicket.markup.head;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.core.util.string.JavaScriptUtils;
 import org.apache.wicket.request.Response;
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.settings.JavaScriptLibrarySettings;
-import org.apache.wicket.util.lang.Args;
 import org.apache.wicket.util.string.Strings;
 
 /**
@@ -102,17 +102,18 @@ public class OnLoadHeaderItem extends HeaderItem
 	}
 
 	@Override
-	public int hashCode()
+	public boolean equals(Object o)
 	{
-		return getJavaScript().hashCode();
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		OnLoadHeaderItem that = (OnLoadHeaderItem) o;
+		return Objects.equals(javaScript, that.javaScript);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public int hashCode()
 	{
-		if (obj instanceof OnLoadHeaderItem)
-			return ((OnLoadHeaderItem)obj).getJavaScript().equals(getJavaScript());
-		return false;
+		return Objects.hash(javaScript);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/PriorityHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/PriorityHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/PriorityHeaderItem.java
index 70a72dc..93813e0 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/PriorityHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/PriorityHeaderItem.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.wicket.request.Response;
 
@@ -90,19 +91,18 @@ public class PriorityHeaderItem extends HeaderItem implements IWrappedHeaderItem
 	}
 
 	@Override
-	public int hashCode()
+	public boolean equals(Object o)
 	{
-		return getWrapped().hashCode();
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		PriorityHeaderItem that = (PriorityHeaderItem) o;
+		return Objects.equals(wrapped, that.wrapped);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public int hashCode()
 	{
-		if (obj instanceof PriorityHeaderItem)
-		{
-			return ((PriorityHeaderItem)obj).getWrapped().equals(getWrapped());
-		}
-		return false;
+		return Objects.hash(wrapped);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/StringHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/StringHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/StringHeaderItem.java
index 7d7426f..c1502ff 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/StringHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/StringHeaderItem.java
@@ -17,6 +17,7 @@
 package org.apache.wicket.markup.head;
 
 import java.util.Collections;
+import java.util.Objects;
 
 import org.apache.wicket.request.Response;
 import org.apache.wicket.util.lang.Args;
@@ -80,16 +81,17 @@ public class StringHeaderItem extends HeaderItem
 	}
 
 	@Override
-	public int hashCode()
+	public boolean equals(Object o)
 	{
-		return getString().hashCode();
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		StringHeaderItem that = (StringHeaderItem) o;
+		return Objects.equals(string, that.string);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public int hashCode()
 	{
-		if (obj instanceof StringHeaderItem)
-			return ((StringHeaderItem)obj).getString().equals(getString());
-		return false;
+		return Objects.hash(string);
 	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/FilteredHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/FilteredHeaderItem.java b/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/FilteredHeaderItem.java
index 120f41d..18745a2 100644
--- a/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/FilteredHeaderItem.java
+++ b/wicket-core/src/main/java/org/apache/wicket/markup/head/filter/FilteredHeaderItem.java
@@ -18,6 +18,7 @@ package org.apache.wicket.markup.head.filter;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.wicket.markup.head.HeaderItem;
 import org.apache.wicket.markup.head.IWrappedHeaderItem;
@@ -109,17 +110,17 @@ public class FilteredHeaderItem extends HeaderItem implements IWrappedHeaderItem
 	@Override
 	public int hashCode()
 	{
-		return getWrapped().hashCode();
+		return Objects.hash(wrapped, filterName);
 	}
 
 	@Override
-	public boolean equals(Object obj)
+	public boolean equals(Object o)
 	{
-		if (obj instanceof FilteredHeaderItem)
-		{
-			return ((FilteredHeaderItem)obj).getWrapped().equals(getWrapped());
-		}
-		return false;
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		FilteredHeaderItem that = (FilteredHeaderItem) o;
+		return Objects.equals(wrapped, that.wrapped) &&
+				Objects.equals(filterName, that.filterName);
 	}
 
 	@Override

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-experimental/wicket-http2/wicket-http2-core/src/main/java/org/apache/wicket/http2/markup/head/PushHeaderItem.java
----------------------------------------------------------------------
diff --git a/wicket-experimental/wicket-http2/wicket-http2-core/src/main/java/org/apache/wicket/http2/markup/head/PushHeaderItem.java b/wicket-experimental/wicket-http2/wicket-http2-core/src/main/java/org/apache/wicket/http2/markup/head/PushHeaderItem.java
index bb4c985..1660ef7 100644
--- a/wicket-experimental/wicket-http2/wicket-http2-core/src/main/java/org/apache/wicket/http2/markup/head/PushHeaderItem.java
+++ b/wicket-experimental/wicket-http2/wicket-http2-core/src/main/java/org/apache/wicket/http2/markup/head/PushHeaderItem.java
@@ -24,6 +24,7 @@ import java.time.format.DateTimeFormatter;
 import java.time.format.DateTimeParseException;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeSet;
 
@@ -414,4 +415,22 @@ public class PushHeaderItem extends HeaderItem
 		}
 		return (HttpServletRequest)assumedHttpServletRequest;
 	}
+
+	@Override
+	public boolean equals(Object o)
+	{
+		if (this == o) return true;
+		if (o == null || getClass() != o.getClass()) return false;
+		PushHeaderItem that = (PushHeaderItem) o;
+		return Objects.equals(urls, that.urls) &&
+				Objects.equals(pageWebResponse, that.pageWebResponse) &&
+				Objects.equals(pageWebRequest, that.pageWebRequest) &&
+				Objects.equals(page, that.page);
+	}
+
+	@Override
+	public int hashCode()
+	{
+		return Objects.hash(urls, pageWebResponse, pageWebRequest, page);
+	}
 }

http://git-wip-us.apache.org/repos/asf/wicket/blob/47aa1461/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
----------------------------------------------------------------------
diff --git a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
index 82ed509..7164ee4 100644
--- a/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
+++ b/wicket-extensions/src/main/java/org/apache/wicket/extensions/ajax/markup/html/autocomplete/AbstractAutoCompleteBehavior.java
@@ -19,6 +19,7 @@ package org.apache.wicket.extensions.ajax.markup.html.autocomplete;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
@@ -92,6 +93,21 @@ public abstract class AbstractAutoCompleteBehavior extends AbstractDefaultAjaxBe
 					getJavaScriptLibrarySettings().getWicketAjaxReference();
 			return Arrays.<HeaderItem>asList(JavaScriptHeaderItem.forReference(wicketAjaxReference));
 		}
+
+		@Override
+		public boolean equals(Object o)
+		{
+			if (this == o) return true;
+			if (o == null || getClass() != o.getClass()) return false;
+			WrappedHeaderItem that = (WrappedHeaderItem) o;
+			return Objects.equals(item, that.item);
+		}
+
+		@Override
+		public int hashCode()
+		{
+			return Objects.hash(item);
+		}
 	}
 
 	public static final ResourceReference AUTOCOMPLETE_JS = new JavaScriptResourceReference(