You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by er...@apache.org on 2020/06/25 20:40:44 UTC

[lucene-solr] branch branch_8x updated: SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings

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

erick pushed a commit to branch branch_8x
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/branch_8x by this push:
     new 931b76e  SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings
931b76e is described below

commit 931b76ee0b7716acc9aabcc4845ad6174836d490
Author: Erick Erickson <Er...@gmail.com>
AuthorDate: Thu Jun 25 16:40:34 2020 -0400

    SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings
---
 solr/CHANGES.txt                                   |  3 ++
 .../src/java/org/apache/solr/cloud/rule/Rule.java  |  2 +-
 .../org/apache/solr/filestore/PackageStoreAPI.java |  1 -
 .../solr/packagemanager/SolrPackageInstance.java   |  3 +-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |  2 +-
 .../solrj/cloud/autoscaling/AutoScalingConfig.java | 32 ++++++----------------
 .../client/solrj/cloud/autoscaling/Policy.java     |  7 ++---
 .../client/solrj/cloud/autoscaling/Preference.java |  9 ++----
 .../solrj/cloud/autoscaling/ReplicaCount.java      |  9 ++----
 .../solrj/cloud/autoscaling/ReplicaInfo.java       | 10 +++----
 .../solrj/cloud/autoscaling/VersionedData.java     | 10 +++----
 .../client/solrj/io/stream/CloudSolrStream.java    |  6 +++-
 .../client/solrj/io/stream/DeepRandomStream.java   |  6 +++-
 .../solrj/io/stream/expr/StreamExpression.java     |  7 ++++-
 .../expr/StreamExpressionNamedParameter.java       |  8 +++++-
 .../io/stream/expr/StreamExpressionValue.java      | 10 +++++--
 .../client/solrj/request/beans/PluginMeta.java     |  5 +++-
 .../apache/solr/common/cloud/DocCollection.java    |  9 +++---
 .../java/org/apache/solr/common/cloud/Replica.java | 11 ++++----
 .../org/apache/solr/common/cloud/ZkNodeProps.java  | 15 ++++------
 .../apache/solr/common/util/ValidatingJsonMap.java | 10 +++----
 21 files changed, 85 insertions(+), 90 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 6486b99..20b85ae 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -304,6 +304,9 @@ Other Changes
 
 * SOLR-14589: Remove IntelliJ //noinspection comments (Erick Erickson)
 
+* SOLR-14541: Ensure classes that implement equals implement hashCode or suppress warnings
+  (gezapeti, Ilan Ginsburg, Erick Erickson)
+
 ==================  8.5.2 ==================
 
 Consult the LUCENE_CHANGES.txt file for additional, low level, changes in this release.
diff --git a/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java b/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
index e9397e5..95e197a 100644
--- a/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
+++ b/solr/core/src/java/org/apache/solr/cloud/rule/Rule.java
@@ -365,7 +365,7 @@ public class Rule {
 
     @Override
     public int hashCode() {
-      throw new UnsupportedOperationException("TODO unimplemented");
+      return Objects.hash(name, operand);
     }
 
     @Override
diff --git a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java b/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
index b5566d0..e71114e 100644
--- a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
+++ b/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
@@ -32,7 +32,6 @@ import java.util.function.Consumer;
 import java.util.function.Supplier;
 
 import org.apache.commons.codec.digest.DigestUtils;
-import org.apache.solr.api.Command;
 import org.apache.solr.api.EndPoint;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.common.MapWriter;
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageInstance.java b/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageInstance.java
index 25c21f7..48f8af5 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageInstance.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/SolrPackageInstance.java
@@ -19,6 +19,7 @@ package org.apache.solr.packagemanager;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import org.apache.solr.common.annotation.JsonProperty;
 import org.apache.solr.common.util.ReflectMapWriter;
@@ -61,7 +62,7 @@ public class SolrPackageInstance implements ReflectMapWriter {
 
   @Override
   public int hashCode() {
-    throw new UnsupportedOperationException("TODO unimplemented");
+    return Objects.hash(name, version);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
index 93260be..61dda45 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
@@ -210,7 +210,7 @@ public class PackageAPI {
 
     @Override
     public int hashCode() {
-      throw new UnsupportedOperationException("TODO unimplemented");
+      return Objects.hash(version);
     }
 
     @Override
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
index e94344e..0c19da6 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/AutoScalingConfig.java
@@ -28,6 +28,7 @@ import java.util.List;
 import java.util.Locale;
 import java.util.Map;
 import java.util.Set;
+import java.util.Objects;
 
 import org.apache.solr.common.MapWriter;
 import org.apache.solr.common.params.AutoScalingParams;
@@ -42,7 +43,6 @@ import static java.util.stream.Collectors.toList;
  * Bean representation of <code>autoscaling.json</code>, which parses data
  * lazily.
  */
-@SuppressWarnings({"overrides"})
 public class AutoScalingConfig implements MapWriter {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -59,7 +59,6 @@ public class AutoScalingConfig implements MapWriter {
   /**
    * Bean representation of trigger listener config.
    */
-  @SuppressWarnings({"overrides"})
   public static class TriggerListenerConfig implements MapWriter {
     public final String name;
     public final String trigger;
@@ -142,14 +141,9 @@ public class AutoScalingConfig implements MapWriter {
 
     @Override
     public int hashCode() {
-      throw new UnsupportedOperationException("TODO unimplemented");
+      return Objects.hash(name, trigger, listenerClass);
     }
 
-//    @Override
-//    public int hashCode() {
-//      throw new UnsupportedOperationException("TODO unimplemented");
-//    }
-//
     @Override
     public String toString() {
       return Utils.toJSONString(this);
@@ -159,7 +153,6 @@ public class AutoScalingConfig implements MapWriter {
   /**
    * Bean representation of trigger config.
    */
-  @SuppressWarnings({"overrides"})
   public static class TriggerConfig implements MapWriter {
     /** Trigger name. */
     public final String name;
@@ -239,14 +232,11 @@ public class AutoScalingConfig implements MapWriter {
       if (event != that.event) return false;
       return properties.equals(that.properties);
     }
+
     @Override
     public int hashCode() {
-      throw new UnsupportedOperationException("TODO unimplemented");
+      return Objects.hash(name);
     }
-//    @Override
-//    public int hashCode() {
-//      throw new UnsupportedOperationException("TODO unimplemented");
-//    }
 
     @Override
     public void writeMap(EntryWriter ew) throws IOException {
@@ -271,11 +261,10 @@ public class AutoScalingConfig implements MapWriter {
   /**
    * Bean representation of trigger action configuration.
    */
-  @SuppressWarnings({"overrides"})
   public static class ActionConfig implements MapWriter {
     /** Action name. */
     public final String name;
-    /** Class name of action implementtion. */
+    /** Class name of action implementation. */
     public final String actionClass;
     /** Additional action properties. */
     public final Map<String, Object> properties;
@@ -316,14 +305,9 @@ public class AutoScalingConfig implements MapWriter {
 
     @Override
     public int hashCode() {
-      throw new UnsupportedOperationException("TODO unimplemented");
+      return Objects.hash(properties);
     }
 
-//    @Override
-//    public int hashCode() {
-//      throw new UnsupportedOperationException("TODO unimplemented");
-//    }
-
     @Override
     public String toString() {
       return Utils.toJSONString(this);
@@ -606,12 +590,12 @@ public class AutoScalingConfig implements MapWriter {
     if (!getTriggerListenerConfigs().equals(that.getTriggerListenerConfigs())) return false;
     return getProperties().equals(that.getProperties());
   }
+
   @Override
   public int hashCode() {
-    throw new UnsupportedOperationException("TODO unimplemented");
+    return Objects.hash(getPolicy());
   }
 
-
   private static List<Object> getList(String key, Map<String, Object> properties) {
     return getList(key, properties, null);
   }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java
index 5636362..cf326e2 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Policy.java
@@ -70,7 +70,6 @@ import static org.apache.solr.client.solrj.cloud.autoscaling.Variable.Type.WITH_
  * Create a fresh new session for each use
  *
  */
-@SuppressWarnings({"overrides"})
 public class Policy implements MapWriter {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -288,10 +287,8 @@ public class Policy implements MapWriter {
     return getClusterPreferences().equals(policy.getClusterPreferences());
   }
 
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented");
-//  }
+  @Override
+  public int hashCode() { return Objects.hash(getPolicies()); }
 
   public static Map<String, List<Clause>> clausesFromMap(Map<String, List<Map<String, Object>>> map, List<String> newParams) {
     Map<String, List<Clause>> newPolicies = new HashMap<>();
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Preference.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Preference.java
index e1865af..18f39a1 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Preference.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/Preference.java
@@ -22,6 +22,7 @@ import java.lang.invoke.MethodHandles;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 import org.apache.solr.common.MapWriter;
 import org.apache.solr.common.util.StrUtils;
@@ -29,7 +30,6 @@ import org.apache.solr.common.util.Utils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-@SuppressWarnings({"overrides"})
 public class Preference implements MapWriter {
   private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());
 
@@ -135,14 +135,9 @@ public class Preference implements MapWriter {
 
   @Override
   public int hashCode() {
-    throw new UnsupportedOperationException("TODO unimplemented");
+    return Objects.hash(getName(), precision, sort, idx);
   }
 
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented");
-//  }
-
   public Policy.SortParam getName() {
     return name;
   }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java
index a5363b4..642b565 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaCount.java
@@ -19,12 +19,12 @@ package org.apache.solr.client.solrj.cloud.autoscaling;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Objects;
 
 import org.apache.solr.common.MapWriter;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.util.Utils;
 
-@SuppressWarnings({"overrides"})
 class ReplicaCount  implements MapWriter {
   long nrt, tlog, pull;
 
@@ -109,14 +109,9 @@ class ReplicaCount  implements MapWriter {
 
   @Override
   public int hashCode() {
-    throw new UnsupportedOperationException("TODO unimplemented");
+    return Objects.hash(nrt, tlog, pull);
   }
 
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented");
-//  }
-
   @Override
   public String toString() {
     return Utils.toJSONString(this);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaInfo.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaInfo.java
index 0c6ba2c..9b1f78c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaInfo.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/ReplicaInfo.java
@@ -35,7 +35,6 @@ import static org.apache.solr.common.ConditionalMapWriter.NON_NULL_VAL;
 import static org.apache.solr.common.ConditionalMapWriter.dedupeKeyPredicate;
 import static org.apache.solr.common.cloud.ZkStateReader.LEADER_PROP;
 
-@SuppressWarnings({"overrides"})
 public class ReplicaInfo implements MapWriter {
   private final String name;
   private final String core, collection, shard;
@@ -209,11 +208,10 @@ public class ReplicaInfo implements MapWriter {
     }
   }
 
-
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented");
-//  }
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, core, collection, shard, type);
+  }
 
   @Override
   public String toString() {
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VersionedData.java b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VersionedData.java
index 8fad7cb..010beb7 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VersionedData.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/cloud/autoscaling/VersionedData.java
@@ -28,7 +28,6 @@ import org.apache.zookeeper.CreateMode;
 /**
  * Immutable representation of binary data with version.
  */
-@SuppressWarnings({"overrides"})
 public class VersionedData implements MapWriter {
   private final int version;
   private final byte[] data;
@@ -93,9 +92,8 @@ public class VersionedData implements MapWriter {
         mode == that.mode;
   }
 
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented");
-//  }
-
+  @Override
+  public int hashCode() {
+    return Objects.hash(version, owner);
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
index 0721077..b4d3076 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/CloudSolrStream.java
@@ -460,7 +460,6 @@ public class CloudSolrStream extends TupleStream implements Expressible {
     }
   }
 
-  @SuppressWarnings({"overrides"})
   protected class TupleWrapper implements Comparable<TupleWrapper> {
     private Tuple tuple;
     private SolrStream stream;
@@ -488,6 +487,11 @@ public class CloudSolrStream extends TupleStream implements Expressible {
       return this == o;
     }
 
+    @Override
+    public int hashCode() {
+      return Objects.hash(tuple);
+    }
+
     public Tuple getTuple() {
       return tuple;
     }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
index 00b3d3c..2ac8228 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/DeepRandomStream.java
@@ -411,7 +411,6 @@ public class DeepRandomStream extends TupleStream implements Expressible {
     }
   }
 
-  @SuppressWarnings({"overrides"})
   protected class TupleWrapper implements Comparable<TupleWrapper> {
     private Tuple tuple;
     private SolrStream stream;
@@ -435,10 +434,15 @@ public class DeepRandomStream extends TupleStream implements Expressible {
       }
     }
 
+    @Override
     public boolean equals(Object o) {
       return this == o;
     }
 
+    @Override
+    public int hashCode() {
+      return Objects.hash(tuple);
+    }
     public Tuple getTuple() {
       return tuple;
     }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpression.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpression.java
index 4d80a4d..06a924c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpression.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpression.java
@@ -18,11 +18,11 @@ package org.apache.solr.client.solrj.io.stream.expr;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * Expression containing a function and set of parameters
  */
-@SuppressWarnings({"overrides"})
 public class StreamExpression implements StreamExpressionParameter {
   private String functionName;
   private List<StreamExpressionParameter> parameters;
@@ -124,4 +124,9 @@ public class StreamExpression implements StreamExpressionParameter {
 
     return true;
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(functionName);
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionNamedParameter.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionNamedParameter.java
index ccfc243..53fac24 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionNamedParameter.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionNamedParameter.java
@@ -17,10 +17,11 @@
 package org.apache.solr.client.solrj.io.stream.expr;
 
 
+import java.util.Objects;
+
 /**
  * Provides a named parameter
  */
-@SuppressWarnings({"overrides"})
 public class StreamExpressionNamedParameter implements StreamExpressionParameter {
   private String name;
   private StreamExpressionParameter parameter;
@@ -106,4 +107,9 @@ public class StreamExpressionNamedParameter implements StreamExpressionParameter
     
     return this.parameter.equals(check.parameter);
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name);
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionValue.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionValue.java
index 433559b..52a6e96 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionValue.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/expr/StreamExpressionValue.java
@@ -16,10 +16,11 @@
  */
 package org.apache.solr.client.solrj.io.stream.expr;
 
-/** 
+import java.util.Objects;
+
+/**
  * Basic string stream expression
  */
-@SuppressWarnings({"overrides"})
 public class StreamExpressionValue implements StreamExpressionParameter {
   
   private String value;
@@ -63,4 +64,9 @@ public class StreamExpressionValue implements StreamExpressionParameter {
     
     return this.value.equals(((StreamExpressionValue)other).value);
   }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(value);
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java
index cb4f0aa..f06c849 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/beans/PluginMeta.java
@@ -25,7 +25,6 @@ import org.apache.solr.common.util.ReflectMapWriter;
 /**
  * POJO for a plugin metadata used in container plugins
  */
-@SuppressWarnings({"overrides"})
 public class PluginMeta implements ReflectMapWriter {
   @JsonProperty(required = true)
   public String name;
@@ -55,4 +54,8 @@ public class PluginMeta implements ReflectMapWriter {
     }
     return false;
   }
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, version, klass);
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
index 7a8ddcd..4c5d802 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
@@ -46,7 +46,6 @@ import static org.apache.solr.common.util.Utils.toJSONString;
 /**
  * Models a Collection in zookeeper (but that Java name is obviously taken, hence "DocCollection")
  */
-@SuppressWarnings({"overrides"})
 public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
 
   public static final String DOC_ROUTER = "router";
@@ -393,10 +392,10 @@ public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
     return super.equals(that) && Objects.equals(this.znode, other.znode) && this.znodeVersion == other.znodeVersion;
   }
 
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented DocCollection.hashCode");
-//  }
+  @Override
+  public int hashCode() {
+    return Objects.hash(name, znodeVersion);
+  }
 
   /**
    * @return the number of replicas of type {@link org.apache.solr.common.cloud.Replica.Type#NRT} this collection was created with
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/Replica.java b/solr/solrj/src/java/org/apache/solr/common/cloud/Replica.java
index 9affb68..a022ed2 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/Replica.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/Replica.java
@@ -22,7 +22,6 @@ import java.util.Objects;
 import java.util.Set;
 
 import org.apache.solr.common.util.Utils;
-@SuppressWarnings({"overrides"})
 public class Replica extends ZkNodeProps {
   
   /**
@@ -153,10 +152,12 @@ public class Replica extends ZkNodeProps {
 
     return name.equals(replica.name);
   }
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented Replica.hashCode()");
-//  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hash(name);
+  }
+
   /** Also known as coreNodeName. */
   public String getName() {
     return name;
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
index 75641f5..de3bea6 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ZkNodeProps.java
@@ -17,10 +17,7 @@
 package org.apache.solr.common.cloud;
 
 import java.io.IOException;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 
 import org.apache.solr.common.util.JavaBinCodec;
 import org.apache.solr.common.util.Utils;
@@ -31,7 +28,6 @@ import static org.apache.solr.common.util.Utils.toJSONString;
 /**
  * ZkNodeProps contains generic immutable properties.
  */
-@SuppressWarnings({"overrides"})
 public class ZkNodeProps implements JSONWriter.Writable {
 
   protected final Map<String,Object> propMap;
@@ -171,8 +167,9 @@ public class ZkNodeProps implements JSONWriter.Writable {
   public boolean equals(Object that) {
     return that instanceof ZkNodeProps && ((ZkNodeProps)that).propMap.equals(this.propMap);
   }
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented ZkNodeProps.hashCode");
-//  }
+
+  @Override
+  public int hashCode() {
+    return Objects.hashCode(propMap);
+  }
 }
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
index a64456f..dfa3173 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
@@ -30,6 +30,7 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Objects;
 
 import org.apache.solr.common.NavigableObject;
 import org.apache.solr.common.SolrException;
@@ -40,7 +41,6 @@ import static java.nio.charset.StandardCharsets.UTF_8;
 import static java.util.Collections.unmodifiableList;
 import static java.util.Collections.unmodifiableSet;
 
-@SuppressWarnings({"overrides"})
 public class ValidatingJsonMap implements Map<String, Object>, NavigableObject {
 
   private static final String INCLUDE = "#include";
@@ -348,10 +348,10 @@ public class ValidatingJsonMap implements Map<String, Object>, NavigableObject {
     return that instanceof Map && this.delegate.equals(that);
   }
 
-//  @Override
-//  public int hashCode() {
-//    throw new UnsupportedOperationException("TODO unimplemented ValidatingJsonMap.hashCode");
-//  }
+  @Override
+  public int hashCode() {
+    return Objects.hash(delegate);
+  }
 
   @SuppressWarnings({"unchecked"})
   public static final ValidatingJsonMap EMPTY = new ValidatingJsonMap(Collections.EMPTY_MAP);