You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by kr...@apache.org on 2022/09/22 19:42:46 UTC

[solr] branch main updated: SOLR-16427: Evaluate and fix errorprone rules (#1037)

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

krisden pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 83de120de95 SOLR-16427: Evaluate and fix errorprone rules (#1037)
83de120de95 is described below

commit 83de120de950fee3876a9e3a6b344b403630ae06
Author: Kevin Risden <ri...@users.noreply.github.com>
AuthorDate: Thu Sep 22 15:42:40 2022 -0400

    SOLR-16427: Evaluate and fix errorprone rules (#1037)
    
    Enables the following errorprone rules:
    * `ArrayEquals`
    * `ArrayHashCode`
    * `ArrayToString`
    * `CollectionUndefinedEquality`
    * `EqualsIncompatibleType`
    * `FormatString`
    * `UndefinedEquals`
    
    Most of the fixes are straight forward - use `.equals` and `Objects.equals` where appropriate. Used `contentEquals` for char sequences. Make sure to compare `Instant` instead of just `Date`. Ensure proper string format number of arguments. Make sure to use proper Array methods for `hashCode` and `toString`
---
 .../apache/lucene/missingdoclet/MissingDoclet.java |   2 -
 gradle/validation/error-prone.gradle               |   9 +-
 .../solr/cloud/overseer/CollectionMutator.java     |   2 +-
 .../org/apache/solr/handler/ClassifyStream.java    |  14 +-
 .../apache/solr/handler/admin/MetricsHandler.java  |   4 +-
 .../solr/handler/component/DebugComponent.java     |   3 +-
 .../solr/handler/component/QueryComponent.java     |   4 +-
 .../solr/handler/component/ResponseBuilder.java    |   3 +-
 .../component/ShardFieldSortedHitQueue.java        |   3 +-
 .../org/apache/solr/highlight/RegexFragmenter.java |   4 +-
 .../java/org/apache/solr/request/SimpleFacets.java |   3 +-
 .../apache/solr/request/macro/MacroExpander.java   |   9 +-
 .../response/transform/ChildDocTransformer.java    |   2 +-
 .../org/apache/solr/search/facet/LegacyFacet.java  |   3 +-
 .../solr/search/facet/StrAggValueSource.java       |   5 +-
 .../function/distance/StringDistanceFunction.java  |   3 +-
 .../processor/AtomicUpdateDocumentMerger.java      |   4 +-
 .../update/processor/URLClassifyProcessor.java     |   3 +-
 .../test/org/apache/solr/TestGroupingSearch.java   |   7 +-
 .../OverseerCollectionConfigSetProcessorTest.java  |   3 +-
 .../apache/solr/cloud/TestRandomFlRTGCloud.java    |   4 +-
 .../solr/cloud/TestStressInPlaceUpdates.java       |   2 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |   3 +-
 .../component/DistributedFacetPivotSmallTest.java  |   5 +-
 .../PhrasesIdentificationComponentTest.java        |  36 ++--
 .../org/apache/solr/request/SimpleFacetsTest.java  |   2 +-
 .../org/apache/solr/request/TestWriterPerf.java    |   4 +-
 .../org/apache/solr/response/JSONWriterTest.java   |  11 +-
 .../solr/response/TestSolrQueryResponse.java       |   9 +-
 .../test/org/apache/solr/search/DocSetPerf.java    |  10 +-
 .../org/apache/solr/search/LargeFieldTest.java     |   5 +-
 .../org/apache/solr/search/ReturnFieldsTest.java   |  11 +-
 .../org/apache/solr/search/TestIndexSearcher.java  |   4 +-
 .../org/apache/solr/search/TestQueryTypes.java     |   4 +-
 .../org/apache/solr/search/TestSolrCoreParser.java |   7 +-
 .../search/facet/TestCloudJSONFacetJoinDomain.java |  18 +-
 .../org/apache/solr/search/join/BJQParserTest.java |   6 +-
 .../CloneFieldUpdateProcessorFactoryTest.java      |  75 ++++----
 .../processor/DefaultValueUpdateProcessorTest.java |   8 +-
 .../DocExpirationUpdateProcessorFactoryTest.java   |  44 +++--
 .../FieldMutatingUpdateProcessorTest.java          | 113 ++++++------
 .../ParsingFieldUpdateProcessorsTest.java          | 198 ++++++++++-----------
 .../src/test/org/apache/solr/util/BitSetPerf.java  |  14 +-
 .../test/org/apache/solr/util/ModuleUtilsTest.java |   7 +-
 .../solr/util/tracing/TestHttpServletCarrier.java  |   8 +-
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |  56 +++---
 .../apache/solr/analytics/ExpressionFactory.java   |   2 +-
 .../function/mapping/BottomFunctionTest.java       |  12 +-
 .../function/mapping/DateMathFunctionTest.java     |  23 ++-
 .../function/mapping/DateParseFunctionTest.java    |  56 +++---
 .../analytics/function/mapping/IfFunctionTest.java |  68 +++----
 .../function/mapping/ReplaceFunctionTest.java      |   4 +-
 .../function/mapping/TopFunctionTest.java          |  12 +-
 .../legacy/expression/LegacyExpressionTest.java    |   8 +-
 .../facet/LegacyFieldFacetExtrasCloudTest.java     |  24 ++-
 .../legacy/facet/LegacyFieldFacetExtrasTest.java   |  22 ++-
 .../value/CastingDateValueStreamTest.java          |   8 +-
 .../solr/analytics/value/CastingDateValueTest.java |  17 +-
 .../solr/analytics/value/ConstantValueTest.java    |  12 +-
 .../handler/extraction/SolrContentHandler.java     |   3 +-
 .../ltr/interleaving/LTRInterleavingQuery.java     |   5 +-
 .../client/solrj/io/graph/ShortestPathStream.java  |   4 +-
 .../client/solrj/io/sql/ResultSetMetaDataImpl.java |   2 +-
 .../client/solrj/io/stream/CloudSolrStream.java    |   5 +-
 .../client/solrj/io/stream/DeepRandomStream.java   |   6 +-
 .../solr/client/solrj/io/stream/Facet2DStream.java |   9 +-
 .../solr/client/solrj/io/stream/FacetStream.java   |  13 +-
 .../client/solrj/io/stream/HashJoinStream.java     |   2 +-
 .../solr/client/solrj/io/stream/JDBCStream.java    |   2 +-
 .../solr/client/solrj/io/stream/PlotStream.java    |   2 +-
 .../solr/client/solrj/io/stream/ShuffleStream.java |   6 +-
 .../solr/client/solrj/io/stream/SqlStream.java     |   6 +-
 .../client/solrj/io/stream/TextLogitStream.java    |   2 +-
 .../solr/client/solrj/io/stream/TopicStream.java   |   8 +-
 .../solr/client/solrj/io/stream/TupStream.java     |   2 +-
 .../org/apache/solr/common/util/JavaBinCodec.java  |   2 +-
 .../apache/solr/common/util/JsonTextWriter.java    |  11 +-
 .../java/org/apache/solr/common/util/Utils.java    |   2 +-
 .../apache/solr/client/solrj/SolrQueryTest.java    |   4 +-
 .../solrj/impl/CloudHttp2SolrClientTest.java       |   5 +-
 .../client/solrj/impl/CloudSolrClientTest.java     |   5 +-
 .../solr/client/solrj/io/stream/StreamingTest.java |  98 +++++-----
 .../io/stream/eval/TemporalEvaluatorsTest.java     |   4 +-
 .../client/solrj/response/QueryResponseTest.java   |  10 +-
 .../org/apache/solr/common/SolrDocumentTest.java   |   9 +-
 .../solr/common/util/TestFastJavabinDecoder.java   |  32 ++--
 .../apache/solr/BaseDistributedSearchTestCase.java |   7 +-
 87 files changed, 676 insertions(+), 612 deletions(-)

diff --git a/dev-tools/solr-missing-doclet/src/main/java/org/apache/lucene/missingdoclet/MissingDoclet.java b/dev-tools/solr-missing-doclet/src/main/java/org/apache/lucene/missingdoclet/MissingDoclet.java
index 53dc033f5f0..36c0e4fe4c8 100644
--- a/dev-tools/solr-missing-doclet/src/main/java/org/apache/lucene/missingdoclet/MissingDoclet.java
+++ b/dev-tools/solr-missing-doclet/src/main/java/org/apache/lucene/missingdoclet/MissingDoclet.java
@@ -21,12 +21,10 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
-import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import javax.lang.model.element.AnnotationMirror;
 import javax.lang.model.element.Element;
 import javax.lang.model.element.ElementKind;
 import javax.lang.model.element.ExecutableElement;
diff --git a/gradle/validation/error-prone.gradle b/gradle/validation/error-prone.gradle
index 9915d892398..1f9bebed27b 100644
--- a/gradle/validation/error-prone.gradle
+++ b/gradle/validation/error-prone.gradle
@@ -78,32 +78,26 @@ allprojects { prj ->
             '-Xep:AlreadyChecked:OFF',
             '-Xep:AmbiguousMethodReference:OFF',
             '-Xep:ArgumentSelectionDefectChecker:OFF',
-            '-Xep:ArrayEquals:OFF',
-            '-Xep:ArrayHashCode:OFF',
-            '-Xep:ArrayToString:OFF',
             '-Xep:BadImport:OFF', // style preference that we don't want to enforce
             '-Xep:BadInstanceof:OFF',
             '-Xep:BadShiftAmount:OFF',
             '-Xep:CanIgnoreReturnValueSuggester:OFF',
             '-Xep:ClassCanBeStatic:OFF',
-            '-Xep:CollectionUndefinedEquality:OFF',
             '-Xep:ComplexBooleanConstant:OFF',
             '-Xep:DoubleBraceInitialization:OFF',
             '-Xep:DoubleCheckedLocking:OFF',
             '-Xep:EmptyCatch:OFF',
             '-Xep:EqualsGetClass:OFF',
-            '-Xep:EqualsIncompatibleType:OFF',
             '-Xep:EqualsUnsafeCast:OFF',
             '-Xep:EscapedEntity:OFF',
             '-Xep:Finally:OFF',
-            '-Xep:FormatString:OFF',
             '-Xep:FutureReturnValueIgnored:OFF',
             '-Xep:HidingField:OFF',
             '-Xep:IdentityBinaryExpression:OFF',
             '-Xep:IdentityHashMapUsage:OFF',
             '-Xep:ImmutableEnumChecker:OFF',
             '-Xep:InconsistentCapitalization:OFF',
-            '-Xep:InlineFormatString:OFF',
+            '-Xep:InlineFormatString:OFF', // this introduces redundancy in format strings
             '-Xep:InputStreamSlowMultibyteRead:OFF',
             '-Xep:IntLongMath:OFF',
             '-Xep:InvalidBlockTag:OFF',
@@ -139,7 +133,6 @@ allprojects { prj ->
             '-Xep:ThreadPriorityCheck:OFF',
             '-Xep:TypeParameterShadowing:OFF',
             '-Xep:TypeParameterUnusedInFormals:OFF',
-            '-Xep:UndefinedEquals:OFF',
             '-Xep:UnescapedEntity:OFF',
             '-Xep:UnicodeEscape:OFF',
             '-Xep:UnnecessaryParentheses:OFF',
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
index 2eb666661b4..6269e7ba329 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/CollectionMutator.java
@@ -149,7 +149,7 @@ public class CollectionMutator {
           }
         }
         // SOLR-11676 : keep NRT_REPLICAS and REPLICATION_FACTOR in sync
-        if (prop == REPLICATION_FACTOR) {
+        if (prop.equals(REPLICATION_FACTOR)) {
           props.put(NRT_REPLICAS, message.get(REPLICATION_FACTOR));
         }
       }
diff --git a/solr/core/src/java/org/apache/solr/handler/ClassifyStream.java b/solr/core/src/java/org/apache/solr/handler/ClassifyStream.java
index c929180baeb..25d6c240a06 100644
--- a/solr/core/src/java/org/apache/solr/handler/ClassifyStream.java
+++ b/solr/core/src/java/org/apache/solr/handler/ClassifyStream.java
@@ -46,15 +46,15 @@ import org.apache.solr.core.SolrCore;
  * @since 6.3.0
  */
 public class ClassifyStream extends TupleStream implements Expressible {
-  private TupleStream docStream;
-  private TupleStream modelStream;
+  private final TupleStream docStream;
+  private final TupleStream modelStream;
 
-  private String field;
+  private final String field;
   private String analyzerField;
   private Tuple modelTuple;
 
   Analyzer analyzer;
-  private Map<CharSequence, Integer> termToIndex;
+  private Map<String, Integer> termToIndex;
   private List<Double> idfs;
   private List<Double> modelWeights;
 
@@ -79,7 +79,7 @@ public class ClassifyStream extends TupleStream implements Expressible {
       throw new IOException(
           String.format(
               Locale.ROOT,
-              "Invalid expression %s - field parameter must be specified",
+              "Invalid expression %s - field parameter must be specified - %s",
               expression,
               streamExpressions.size()));
     }
@@ -95,7 +95,7 @@ public class ClassifyStream extends TupleStream implements Expressible {
   @Override
   public void setStreamContext(StreamContext context) {
     Object solrCoreObj = context.get("solr-core");
-    if (solrCoreObj == null || !(solrCoreObj instanceof SolrCore)) {
+    if (!(solrCoreObj instanceof SolrCore)) {
       throw new SolrException(
           SolrException.ErrorCode.INVALID_STATE,
           "StreamContext must have SolrCore in solr-core key");
@@ -153,7 +153,7 @@ public class ClassifyStream extends TupleStream implements Expressible {
 
     String text = docTuple.getString(field);
 
-    double tfs[] = new double[termToIndex.size()];
+    double[] tfs = new double[termToIndex.size()];
 
     TokenStream tokenStream = analyzer.tokenStream(analyzerField, text);
     CharTermAttribute termAtt = tokenStream.getAttribute(CharTermAttribute.class);
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHandler.java
index 9ba7bdf4878..7490278ffc8 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHandler.java
@@ -285,7 +285,7 @@ public class MetricsHandler extends RequestHandlerBase implements PermissionName
       }
       Predicate<CharSequence> propertyFilter = MetricUtils.ALL_PROPERTIES;
       if (propertyName != null) {
-        propertyFilter = (name) -> name.equals(propertyName);
+        propertyFilter = propertyName::contentEquals;
         // use escaped versions
         key = parts[0] + ":" + parts[1];
       }
@@ -384,7 +384,7 @@ public class MetricsHandler extends RequestHandlerBase implements PermissionName
     if (filter.isEmpty()) {
       return MetricUtils.ALL_PROPERTIES;
     } else {
-      return (name) -> filter.contains(name);
+      return (name) -> filter.contains(name.toString());
     }
   }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java b/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
index 7212fc309d3..0565290cf06 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/DebugComponent.java
@@ -27,6 +27,7 @@ import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.TreeMap;
 import org.apache.lucene.search.Query;
@@ -338,7 +339,7 @@ public class DebugComponent extends SearchComponent {
         // optimize case where elements are in same position
         if (i < dl.size()) {
           String dkey = dl.getName(i);
-          if (skey == dkey || (skey != null && skey.equals(dkey))) {
+          if (Objects.equals(skey, dkey)) {
             didx = i;
           }
         }
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
index 12c3d3f2812..d04a1c3c279 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryComponent.java
@@ -298,9 +298,7 @@ public class QueryComponent extends SearchComponent {
               && (schemaField.getType() instanceof SortableTextField) == false) {
             throw new SolrException(
                 SolrException.ErrorCode.BAD_REQUEST,
-                String.format(
-                    Locale.ROOT,
-                    "Sorting on a tokenized field that is not a SortableTextField is not supported in cloud mode."));
+                "Sorting on a tokenized field that is not a SortableTextField is not supported in cloud mode.");
           }
         }
       }
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java b/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
index 43d37af46ae..bb06eac78e1 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ResponseBuilder.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TotalHits;
@@ -149,7 +150,7 @@ public class ResponseBuilder {
 
   public int getShardNum(String shard) {
     for (int i = 0; i < shards.length; i++) {
-      if (shards[i] == shard || shards[i].equals(shard)) return i;
+      if (Objects.equals(shards[i], shard)) return i;
     }
     return -1;
   }
diff --git a/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java b/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java
index 5fec954620c..1a8991a91ee 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/ShardFieldSortedHitQueue.java
@@ -23,6 +23,7 @@ import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Objects;
 import org.apache.lucene.search.FieldComparator;
 import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.SortField;
@@ -80,7 +81,7 @@ public class ShardFieldSortedHitQueue extends PriorityQueue<ShardDoc> {
   protected boolean lessThan(ShardDoc docA, ShardDoc docB) {
     // If these docs are from the same shard, then the relative order
     // is how they appeared in the response from that shard.
-    if (docA.shard == docB.shard) {
+    if (Objects.equals(docA.shard, docB.shard)) {
       // if docA has a smaller position, it should be "larger" so it
       // comes before docB.
       // This will handle sorting by docid within the same shard
diff --git a/solr/core/src/java/org/apache/solr/highlight/RegexFragmenter.java b/solr/core/src/java/org/apache/solr/highlight/RegexFragmenter.java
index 05a04ea955a..e55923ddb0c 100644
--- a/solr/core/src/java/org/apache/solr/highlight/RegexFragmenter.java
+++ b/solr/core/src/java/org/apache/solr/highlight/RegexFragmenter.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.highlight;
 
+import java.util.Objects;
 import java.util.regex.Pattern;
 import org.apache.lucene.search.highlight.Fragmenter;
 import org.apache.lucene.search.highlight.NullFragmenter;
@@ -75,7 +76,8 @@ public class RegexFragmenter extends HighlightingPluginBase implements SolrFragm
         params.getFieldParam(
             fieldName, HighlightParams.PATTERN, LuceneRegexFragmenter.DEFAULT_PATTERN_RAW);
 
-    Pattern p = rawpat == defaultPatternRaw ? defaultPattern : Pattern.compile(rawpat);
+    Pattern p =
+        Objects.equals(rawpat, defaultPatternRaw) ? defaultPattern : Pattern.compile(rawpat);
 
     if (fragsize <= 0) {
       return new NullFragmenter();
diff --git a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
index 90499b66368..7a1ce68a872 100644
--- a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
@@ -29,6 +29,7 @@ import java.util.HashSet;
 import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutionException;
@@ -188,7 +189,7 @@ public class SimpleFacets {
     SolrParams required = new RequiredSolrParams(params);
 
     // remove local params unless it's a query
-    if (type != FacetParams.FACET_QUERY) { // TODO Cut over to an Enum here
+    if (!Objects.equals(type, FacetParams.FACET_QUERY)) { // TODO Cut over to an Enum here
       facetValue = localParams.get(CommonParams.VALUE);
     }
 
diff --git a/solr/core/src/java/org/apache/solr/request/macro/MacroExpander.java b/solr/core/src/java/org/apache/solr/request/macro/MacroExpander.java
index d781f6aac9e..f334c234e3f 100644
--- a/solr/core/src/java/org/apache/solr/request/macro/MacroExpander.java
+++ b/solr/core/src/java/org/apache/solr/request/macro/MacroExpander.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.search.StrParser;
 import org.apache.solr.search.SyntaxError;
@@ -65,11 +66,11 @@ public class MacroExpander {
       List<String> newValues = null;
       for (String v : values) {
         String newV = expand(v);
-        if (newV != v) {
+        if (!Objects.equals(newV, v)) {
           if (newValues == null) {
             newValues = new ArrayList<>(values.length);
             for (String vv : values) {
-              if (vv == v) break;
+              if (Objects.equals(vv, v)) break;
               newValues.add(vv);
             }
           }
@@ -80,11 +81,11 @@ public class MacroExpander {
       }
 
       if (newValues != null) {
-        values = newValues.toArray(new String[newValues.size()]);
+        values = newValues.toArray(new String[0]);
         changed = true;
       }
 
-      if (k != newK) {
+      if (!Objects.equals(k, newK)) {
         changed = true;
       }
 
diff --git a/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformer.java b/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformer.java
index e46811169a5..55d58cce1fc 100644
--- a/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformer.java
+++ b/solr/core/src/java/org/apache/solr/response/transform/ChildDocTransformer.java
@@ -276,7 +276,7 @@ class ChildDocTransformer extends DocTransformer {
     String trimmedPath = trimLastPound(cDocsPath);
     // if the child doc's path does not end with #, it is an array(same string is returned by
     // ChildDocTransformer#trimLastPound)
-    if (!parent.containsKey(trimmedPath) && (trimmedPath == cDocsPath)) {
+    if (!parent.containsKey(trimmedPath) && (trimmedPath.equals(cDocsPath))) {
       List<SolrDocument> list = new ArrayList<>(children);
       parent.setField(trimmedPath, list);
       return;
diff --git a/solr/core/src/java/org/apache/solr/search/facet/LegacyFacet.java b/solr/core/src/java/org/apache/solr/search/facet/LegacyFacet.java
index 7ba90fc36d7..dad1e04c3a3 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/LegacyFacet.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/LegacyFacet.java
@@ -25,6 +25,7 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.CommonParams;
 import org.apache.solr.common.params.FacetParams;
@@ -296,7 +297,7 @@ public class LegacyFacet {
       required = new RequiredSolrParams(params);
 
       // remove local params unless it's a query
-      if (type != FacetParams.FACET_QUERY) {
+      if (!Objects.equals(type, FacetParams.FACET_QUERY)) {
         facetValue = localParams.get(CommonParams.VALUE);
       }
 
diff --git a/solr/core/src/java/org/apache/solr/search/facet/StrAggValueSource.java b/solr/core/src/java/org/apache/solr/search/facet/StrAggValueSource.java
index c721f87add5..223cfed5473 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/StrAggValueSource.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/StrAggValueSource.java
@@ -16,6 +16,8 @@
  */
 package org.apache.solr.search.facet;
 
+import java.util.Objects;
+
 public abstract class StrAggValueSource extends AggValueSource {
   protected String arg;
 
@@ -32,8 +34,7 @@ public abstract class StrAggValueSource extends AggValueSource {
   public boolean equals(Object o) {
     if (!super.equals(o)) return false;
     String otherArg = ((StrAggValueSource) o).arg;
-    if (arg == otherArg) return true;
-    return (arg != null && arg.equals(otherArg));
+    return Objects.equals(arg, otherArg);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java b/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java
index 940f7020711..9b47d261c2b 100644
--- a/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java
+++ b/solr/core/src/java/org/apache/solr/search/function/distance/StringDistanceFunction.java
@@ -18,6 +18,7 @@ package org.apache.solr.search.function.distance;
 
 import java.io.IOException;
 import java.util.Map;
+import java.util.Objects;
 import org.apache.lucene.index.LeafReaderContext;
 import org.apache.lucene.queries.function.FunctionValues;
 import org.apache.lucene.queries.function.ValueSource;
@@ -48,7 +49,7 @@ public class StringDistanceFunction extends ValueSource {
         String s2 = str2DV.strVal(doc);
         if (null == s1 || null == s2) {
           // the only thing a missing value scores 1.0 with is another missing value
-          return (s1 == s2) ? 1.0F : 0.0F;
+          return (Objects.equals(s1, s2)) ? 1.0F : 0.0F;
         }
         return dist.getDistance(s1, s2);
       }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java b/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java
index 23a105fb477..c29d271bd85 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/AtomicUpdateDocumentMerger.java
@@ -801,7 +801,9 @@ public class AtomicUpdateDocumentMerger {
                   val.equals(rawValue)
                       || val.equals(nativeValue)
                       || (val instanceof String
-                          && DateMathParser.parseMath(null, (String) val).equals(nativeValue)))
+                          && DateMathParser.parseMath(null, (String) val)
+                              .toInstant()
+                              .equals(((Date) nativeValue).toInstant())))
           .findFirst();
     } else if (original.contains(nativeValue)) {
       return Optional.of(nativeValue);
diff --git a/solr/core/src/java/org/apache/solr/update/processor/URLClassifyProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/URLClassifyProcessor.java
index a46d11efa31..f26450442e4 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/URLClassifyProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/URLClassifyProcessor.java
@@ -23,6 +23,7 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Locale;
+import java.util.Objects;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.request.SolrQueryRequest;
@@ -250,7 +251,7 @@ public class URLClassifyProcessor extends UpdateRequestProcessor {
     if (url.getQuery() != null) {
       return false;
     } else {
-      return landingPageSuffix(url) != "";
+      return !Objects.equals(landingPageSuffix(url), "");
     }
   }
 
diff --git a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
index a6c1f5151a6..9c54fbca86d 100644
--- a/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
+++ b/solr/core/src/test/org/apache/solr/TestGroupingSearch.java
@@ -28,6 +28,7 @@ import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.TreeMap;
 import org.apache.solr.client.solrj.impl.BinaryResponseParser;
 import org.apache.solr.common.SolrException;
@@ -1681,7 +1682,7 @@ public class TestGroupingSearch extends SolrTestCaseJ4 {
 
         // since groupSortStr defaults to sortStr, we need to normalize null to "score desc" if
         // sortStr != null.
-        if (groupSortStr == null && groupSortStr != sortStr) {
+        if (groupSortStr == null && !Objects.equals(groupSortStr, sortStr)) {
           groupSortStr = "score desc";
         }
 
@@ -1786,7 +1787,9 @@ public class TestGroupingSearch extends SolrTestCaseJ4 {
                 "fl",
                 // only docValued fields are not returned by default
                 "*,score_ff,foo_ii,foo_bdv," + FOO_STRING_DOCVAL_FIELD,
-                (groupSortStr == null || groupSortStr == sortStr) ? "noGroupsort" : "group.sort",
+                (groupSortStr == null || groupSortStr.equals(sortStr))
+                    ? "noGroupsort"
+                    : "group.sort",
                 groupSortStr == null ? "" : groupSortStr,
                 "rows",
                 "" + rows,
diff --git a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
index cf10c16406f..f90e3805405 100644
--- a/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/OverseerCollectionConfigSetProcessorTest.java
@@ -639,7 +639,8 @@ public class OverseerCollectionConfigSetProcessorTest extends SolrTestCaseJ4 {
     Mockito.doAnswer(
             new Answer<Void>() {
               public Void answer(InvocationOnMock invocation) {
-                System.out.println("set data: " + invocation.getArgument(0) + " " + new byte[0]);
+                System.out.println(
+                    "set data: " + invocation.getArgument(0) + " " + Arrays.toString(new byte[0]));
                 zkClientData.put(invocation.getArgument(0), new byte[0]);
                 return null;
               }
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
index b763a353828..de240a55f32 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestRandomFlRTGCloud.java
@@ -350,7 +350,9 @@ public class TestRandomFlRTGCloud extends SolrCloudTestCase {
       knownDocs[docId] = null;
     }
     assertEquals(
-        "Failed delete: " + docIds, 0, getRandClient(random()).deleteById(ids).getStatus());
+        "Failed delete: " + Arrays.toString(docIds),
+        0,
+        getRandClient(random()).deleteById(ids).getStatus());
   }
 
   /**
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java b/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
index bf862c84fcf..760f3e58097 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestStressInPlaceUpdates.java
@@ -485,7 +485,7 @@ public class TestStressInPlaceUpdates extends AbstractFullDistribZkTestBase {
                   } else {
                     fail(
                         String.format(
-                            Locale.ENGLISH, "There were more than one result: {}", response));
+                            Locale.ENGLISH, "There were more than one result: %s", response));
                   }
                 }
               } catch (Throwable e) {
diff --git a/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java b/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
index 1ab59e931c8..ca4067c6ebe 100644
--- a/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
@@ -16,7 +16,6 @@
  */
 package org.apache.solr.handler;
 
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.function.UnaryOperator;
@@ -453,7 +452,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
   }
 
   private static void assertOnlyValue(String expected, SolrInputDocument doc, String field) {
-    assertEquals(Collections.singletonList(expected), doc.getFieldValues(field));
+    assertEquals(List.of(expected), List.copyOf(doc.getFieldValues(field)));
   }
 
   public void testAtomicUpdateFieldValue() throws Exception {
diff --git a/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java b/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java
index 1a384959187..ed9faa912fd 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/DistributedFacetPivotSmallTest.java
@@ -23,6 +23,7 @@ import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import junit.framework.AssertionFailedError;
 import org.apache.solr.BaseDistributedSearchTestCase;
 import org.apache.solr.client.solrj.response.FieldStatsInfo;
@@ -2402,7 +2403,7 @@ public class DistributedFacetPivotSmallTest extends BaseDistributedSearchTestCas
 
   private void assertNullFacetTypeInsidePivot(String facetType, List<PivotField> pivots) {
     for (PivotField pivot : pivots) {
-      if (facetType == FacetParams.FACET_QUERY) {
+      if (Objects.equals(facetType, FacetParams.FACET_QUERY)) {
         assertNull(
             "pivot="
                 + pivot
@@ -2411,7 +2412,7 @@ public class DistributedFacetPivotSmallTest extends BaseDistributedSearchTestCas
                 + " should've been null. Found: "
                 + pivot.getFacetQuery(),
             pivot.getFacetQuery());
-      } else if (facetType == FacetParams.FACET_RANGE) {
+      } else if (Objects.equals(facetType, FacetParams.FACET_RANGE)) {
         assertNull(
             "pivot="
                 + pivot
diff --git a/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java
index 36ddadf34d5..0f259ca5383 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java
@@ -98,7 +98,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       final Phrase lazy = phrases.get(phrases.size() - 1 - 2);
       final String debug = lazy.toString();
 
-      assertEquals(debug, "lAZy", lazy.getSubSequence());
+      assertEquals(debug, "lAZy", lazy.getSubSequence().toString());
       assertEquals(debug, 10, lazy.getPositionStart());
       assertEquals(debug, 11, lazy.getPositionEnd());
       assertEquals(debug, 1, lazy.getPositionLength());
@@ -116,7 +116,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       final Phrase brown_fox = phrases.get((7 * 3) + 1);
       final String debug = brown_fox.toString();
 
-      assertEquals(debug, "brown FOX", brown_fox.getSubSequence());
+      assertEquals(debug, "brown FOX", brown_fox.getSubSequence().toString());
       assertEquals(debug, 4, brown_fox.getPositionStart());
       assertEquals(debug, 6, brown_fox.getPositionEnd());
       assertEquals(debug, 2, brown_fox.getPositionLength());
@@ -133,7 +133,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       final Phrase daq = phrases.get(2);
       final String debug = daq.toString();
 
-      assertEquals(debug, "did  a Quick", daq.getSubSequence());
+      assertEquals(debug, "did  a Quick", daq.getSubSequence().toString());
       assertEquals(debug, 1, daq.getPositionStart());
       assertEquals(debug, 4, daq.getPositionEnd());
       assertEquals(debug, 3, daq.getPositionLength());
@@ -150,7 +150,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       final Phrase qbfp = phrases.get((7 * 2) + 3);
       final String debug = qbfp.toString();
 
-      assertEquals(debug, "Quick    brown FOX perniciously", qbfp.getSubSequence());
+      assertEquals(debug, "Quick    brown FOX perniciously", qbfp.getSubSequence().toString());
       assertEquals(debug, 3, qbfp.getPositionStart());
       assertEquals(debug, 7, qbfp.getPositionEnd());
       assertEquals(debug, 4, qbfp.getPositionLength());
@@ -191,7 +191,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
           final Phrase brown_fox = phrases.get(1);
           final String debug = brown_fox.toString();
 
-          assertEquals(debug, "brown FOX", brown_fox.getSubSequence());
+          assertEquals(debug, "brown FOX", brown_fox.getSubSequence().toString());
           assertEquals(debug, 1, brown_fox.getPositionStart());
           assertEquals(debug, 3, brown_fox.getPositionEnd());
           assertEquals(debug, 2, brown_fox.getPositionLength());
@@ -208,7 +208,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
           final Phrase fox = phrases.get(2);
           final String debug = fox.toString();
 
-          assertEquals(debug, "FOX", fox.getSubSequence());
+          assertEquals(debug, "FOX", fox.getSubSequence().toString());
           assertEquals(debug, 2, fox.getPositionStart());
           assertEquals(debug, 3, fox.getPositionEnd());
           assertEquals(debug, 1, fox.getPositionLength());
@@ -345,7 +345,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
     BiConsumer<Integer, List<Phrase>> assertions =
         (mult, phrases) -> {
           final Phrase brown_fox = phrases.get(1);
-          assertEquals("BROWN fox", brown_fox.getSubSequence());
+          assertEquals("BROWN fox", brown_fox.getSubSequence().toString());
 
           assertEquals(mult * 1, brown_fox.getTTF("multigrams_title"));
           assertEquals(mult * 1, brown_fox.getDocFreq("multigrams_title"));
@@ -356,7 +356,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
           assertEquals(mult * 2, brown_fox.getConjunctionDocCount("multigrams_body"));
 
           final Phrase fox_lazy = phrases.get(6);
-          assertEquals("fox lAzY", fox_lazy.getSubSequence());
+          assertEquals("fox lAzY", fox_lazy.getSubSequence().toString());
 
           assertEquals(mult * 0, fox_lazy.getTTF("multigrams_title"));
           assertEquals(mult * 0, fox_lazy.getDocFreq("multigrams_title"));
@@ -367,7 +367,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
           assertEquals(mult * 2, fox_lazy.getConjunctionDocCount("multigrams_body"));
 
           final Phrase bfld = phrases.get(3);
-          assertEquals("BROWN fox lAzY  dog", bfld.getSubSequence());
+          assertEquals("BROWN fox lAzY  dog", bfld.getSubSequence().toString());
 
           expectThrows(
               SolrException.class,
@@ -395,7 +395,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
 
           final Phrase xyz = phrases.get(phrases.size() - 1);
 
-          assertEquals("xxxyyyzzz", xyz.getSubSequence());
+          assertEquals("xxxyyyzzz", xyz.getSubSequence().toString());
           assertEquals(mult * 0, xyz.getTTF("multigrams_title"));
           assertEquals(mult * 0, xyz.getDocFreq("multigrams_title"));
           assertEquals(mult * 0, xyz.getConjunctionDocCount("multigrams_title"));
@@ -468,7 +468,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
 
     // "brown fox" should score positively in both fields, and overall...
     final Phrase brown_fox = phrases.get(8);
-    assertEquals("BROWN fox", brown_fox.getSubSequence());
+    assertEquals("BROWN fox", brown_fox.getSubSequence().toString());
     assertThat(
         brown_fox.toString(), brown_fox.getFieldScore("multigrams_title"), greaterThan(0.0D));
     assertThat(brown_fox.toString(), brown_fox.getFieldScore("multigrams_body"), greaterThan(0.0D));
@@ -478,7 +478,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
     // are used in other contexts, and should score -1 against body -- but because of our weights,
     // that shouldn't bring down the total
     final Phrase we_lazy = phrases.get(phrases.size() - 2);
-    assertEquals("we lAzY", we_lazy.getSubSequence());
+    assertEquals("we lAzY", we_lazy.getSubSequence().toString());
     assertEquals(we_lazy.toString(), -1.0D, we_lazy.getFieldScore("multigrams_body"), 0.0D);
 
     assertThat(we_lazy.toString(), we_lazy.getFieldScore("multigrams_title"), lessThan(0.0D));
@@ -493,7 +493,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
     // value it should score -1 against body -- but because of our weights, that shouldn't bring
     // down the total
     final Phrase wawl = phrases.get(phrases.size() - 7);
-    assertEquals("why are we lAzY", wawl.getSubSequence());
+    assertEquals("why are we lAzY", wawl.getSubSequence().toString());
     assertEquals(wawl.toString(), -1.0D, wawl.getFieldScore("multigrams_body"), 0.0D);
     assertThat(wawl.toString(), wawl.getFieldScore("multigrams_title"), greaterThan(0.0D));
     assertThat(wawl.toString(), wawl.getTotalScore(), greaterThan(0.0D));
@@ -503,7 +503,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
     // "brown fox why are we" is longer then the max indexed phrase, and none of it's
     // (longest) sub phrases exists in either field -- so all of its scores should be -1
     final Phrase bfwaw = phrases.get(11);
-    assertEquals("BROWN fox why are we", bfwaw.getSubSequence());
+    assertEquals("BROWN fox why are we", bfwaw.getSubSequence().toString());
     assertEquals(bfwaw.toString(), -1.0D, bfwaw.getFieldScore("multigrams_title"), 0.0D);
     assertEquals(bfwaw.toString(), -1.0D, bfwaw.getFieldScore("multigrams_body"), 0.0D);
     assertEquals(bfwaw.toString(), -1.0D, bfwaw.getTotalScore(), 0.0D);
@@ -529,7 +529,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       // phrases that span the stop word should have valid scores from the field that doesn't care
       // about stop words, but the stopword field should reject them
       final Phrase why_the_lazy = phrases.get(2);
-      assertEquals("why the lazy", why_the_lazy.getSubSequence());
+      assertEquals("why the lazy", why_the_lazy.getSubSequence().toString());
       assertThat(
           why_the_lazy.toString(),
           why_the_lazy.getFieldScore("multigrams_title"),
@@ -541,7 +541,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
           0.0D);
 
       final Phrase the_lazy_dog = phrases.get(8);
-      assertEquals("the lazy dog", the_lazy_dog.getSubSequence());
+      assertEquals("the lazy dog", the_lazy_dog.getSubSequence().toString());
       assertThat(
           the_lazy_dog.toString(),
           the_lazy_dog.getFieldScore("multigrams_title"),
@@ -555,7 +555,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       // sanity check that good scores are still possible with stopwords
       // "brown fox" should score positively in both fields, and overall...
       final Phrase brown_fox = phrases.get(phrases.size() - 2);
-      assertEquals("brown fox", brown_fox.getSubSequence());
+      assertEquals("brown fox", brown_fox.getSubSequence().toString());
       assertThat(
           brown_fox.toString(), brown_fox.getFieldScore("multigrams_title"), greaterThan(0.0D));
       assertThat(
@@ -593,7 +593,7 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
       // sanity check that good scores are still possible with stopwords
       // "brown fox" should score positively in both fields, and overall...
       final Phrase brown_fox = phrases.get(phrases.size() - 2);
-      assertEquals("brown fox", brown_fox.getSubSequence());
+      assertEquals("brown fox", brown_fox.getSubSequence().toString());
       assertThat(
           brown_fox.toString(), brown_fox.getFieldScore("multigrams_title"), greaterThan(0.0D));
       assertThat(
diff --git a/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java b/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
index 2a95766a5c6..505fc793ec9 100644
--- a/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
+++ b/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
@@ -4914,7 +4914,7 @@ public class SimpleFacetsTest extends SolrTestCaseJ4 {
                   (random().nextDouble()
                       * (new Date().getTime())
                       * (random().nextBoolean() ? -1 : 1)));
-    } while (dates[0].equals(dates[1]));
+    } while (dates[0].toInstant().equals(dates[1].toInstant()));
     Arrays.sort(dates);
     long dateDiff = (dates[1].getTime() - dates[0].getTime()) / 1000;
     String gapUnit;
diff --git a/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java b/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java
index c8e7a05ce0b..95ddfb1c459 100644
--- a/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java
+++ b/solr/core/src/test/org/apache/solr/request/TestWriterPerf.java
@@ -202,9 +202,9 @@ public class TestWriterPerf extends SolrTestCaseJ4 {
     writerName = writerName.intern();
     for (int i = 0; i < decIter; i++) {
       ResponseParser rp = null;
-      if (writerName == "xml") {
+      if (writerName.equals("xml")) {
         rp = new XMLResponseParser();
-      } else if (writerName == "javabin") {
+      } else if (writerName.equals("javabin")) {
         rp = new BinaryResponseParser();
       } else {
         break;
diff --git a/solr/core/src/test/org/apache/solr/response/JSONWriterTest.java b/solr/core/src/test/org/apache/solr/response/JSONWriterTest.java
index 289db6721ac..9fcdcea4e5f 100644
--- a/solr/core/src/test/org/apache/solr/response/JSONWriterTest.java
+++ b/solr/core/src/test/org/apache/solr/response/JSONWriterTest.java
@@ -24,6 +24,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 import org.apache.solr.JSONTestUtil;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrDocument;
@@ -111,15 +112,15 @@ public class JSONWriterTest extends SolrTestCaseJ4 {
     w.write(buf, req, rsp);
 
     final String expectedNLjson;
-    if (namedListStyle == JSONWriter.JSON_NL_FLAT) {
+    if (Objects.equals(namedListStyle, JSONWriter.JSON_NL_FLAT)) {
       expectedNLjson = "\"nl\":[\"data1\",\"he\\u2028llo\\u2029!\",null,42,null,null]";
-    } else if (namedListStyle == JSONWriter.JSON_NL_MAP) {
+    } else if (Objects.equals(namedListStyle, JSONWriter.JSON_NL_MAP)) {
       expectedNLjson = "\"nl\":{\"data1\":\"he\\u2028llo\\u2029!\",\"\":42,\"\":null}";
-    } else if (namedListStyle == JSONWriter.JSON_NL_ARROFARR) {
+    } else if (Objects.equals(namedListStyle, JSONWriter.JSON_NL_ARROFARR)) {
       expectedNLjson = "\"nl\":[[\"data1\",\"he\\u2028llo\\u2029!\"],[null,42],[null,null]]";
-    } else if (namedListStyle == JSONWriter.JSON_NL_ARROFMAP) {
+    } else if (Objects.equals(namedListStyle, JSONWriter.JSON_NL_ARROFMAP)) {
       expectedNLjson = "\"nl\":[{\"data1\":\"he\\u2028llo\\u2029!\"},42,null]";
-    } else if (namedListStyle == JSONWriter.JSON_NL_ARROFNTV) {
+    } else if (Objects.equals(namedListStyle, JSONWriter.JSON_NL_ARROFNTV)) {
       expectedNLjson =
           "\"nl\":[{\"name\":\"data1\",\"type\":\"str\",\"value\":\"he\\u2028llo\\u2029!\"},"
               + "{\"name\":null,\"type\":\"int\",\"value\":42},"
diff --git a/solr/core/src/test/org/apache/solr/response/TestSolrQueryResponse.java b/solr/core/src/test/org/apache/solr/response/TestSolrQueryResponse.java
index 9483acfd8f4..060a6f9b320 100644
--- a/solr/core/src/test/org/apache/solr/response/TestSolrQueryResponse.java
+++ b/solr/core/src/test/org/apache/solr/response/TestSolrQueryResponse.java
@@ -17,8 +17,8 @@
 package org.apache.solr.response;
 
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import org.apache.solr.SolrTestCase;
@@ -251,15 +251,14 @@ public class TestSolrQueryResponse extends SolrTestCase {
     assertFalse(it.hasNext());
     response.addHttpHeader("key1", "value1");
     assertTrue(response.httpHeaders().hasNext());
-    assertEquals(Arrays.asList("value1"), response.removeHttpHeaders("key1"));
+    assertEquals(List.of("value1"), List.copyOf(response.removeHttpHeaders("key1")));
     assertFalse(response.httpHeaders().hasNext());
 
     response.addHttpHeader("key1", "value2");
     response.addHttpHeader("key1", "value3");
     response.addHttpHeader("key2", "value4");
     assertTrue(response.httpHeaders().hasNext());
-    assertEquals(
-        Arrays.asList(new String[] {"value2", "value3"}), response.removeHttpHeaders("key1"));
+    assertEquals(List.of("value2", "value3"), List.copyOf(response.removeHttpHeaders("key1")));
     assertNull(response.removeHttpHeaders("key1"));
     assertEquals("key2", response.httpHeaders().next().getKey());
   }
@@ -267,7 +266,7 @@ public class TestSolrQueryResponse extends SolrTestCase {
   @Test
   public void testException() {
     final SolrQueryResponse response = new SolrQueryResponse();
-    assertEquals("exception initial value", null, response.getException());
+    assertNull("exception initial value", response.getException());
     final Exception newValue =
         (random().nextBoolean()
             ? (random().nextBoolean() ? new ArithmeticException() : new IOException())
diff --git a/solr/core/src/test/org/apache/solr/search/DocSetPerf.java b/solr/core/src/test/org/apache/solr/search/DocSetPerf.java
index cf15b171232..22969082bed 100644
--- a/solr/core/src/test/org/apache/solr/search/DocSetPerf.java
+++ b/solr/core/src/test/org/apache/solr/search/DocSetPerf.java
@@ -123,10 +123,10 @@ public class DocSetPerf {
         int idx2 = rand.nextInt(numSets);
         DocSet a = null, b = null;
 
-        if (type == "B") {
+        if (type.equals("B")) {
           a = bset[idx1];
           b = bset[idx2];
-        } else if (type == "M") {
+        } else if (type.equals("M")) {
           if (idx1 < idx2) {
             a = bset[idx1];
           } else {
@@ -134,12 +134,12 @@ public class DocSetPerf {
           }
         }
 
-        if (oper == "intersect") {
+        if (oper.equals("intersect")) {
           DocSet res = a.intersection(b);
           ret += res.ramBytesUsed();
-        } else if (oper == "intersectSize") {
+        } else if (oper.equals("intersectSize")) {
           ret += a.intersectionSize(b);
-        } else if (oper == "intersectAndSize") {
+        } else if (oper.equals("intersectAndSize")) {
           DocSet res = a.intersection(b);
           ret += res.size();
         }
diff --git a/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java b/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
index 59bb554e256..d85be338a50 100644
--- a/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
@@ -19,6 +19,7 @@ package org.apache.solr.search;
 
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Objects;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.misc.document.LazyDocument;
@@ -116,7 +117,7 @@ public class LargeFieldTest extends SolrTestCaseJ4 {
 
   private void assertLazyNotLoaded(Document d, String fieldName) {
     IndexableField field = d.getField(fieldName);
-    if (fieldName == BIG_FIELD) {
+    if (Objects.equals(fieldName, BIG_FIELD)) {
       assertTrue(field instanceof SolrDocumentFetcher.LargeLazyField);
       assertFalse(((SolrDocumentFetcher.LargeLazyField) field).hasBeenLoaded());
     } else {
@@ -127,7 +128,7 @@ public class LargeFieldTest extends SolrTestCaseJ4 {
 
   private void assertLazyLoaded(Document d, String fieldName) {
     IndexableField field = d.getField(fieldName);
-    if (fieldName == BIG_FIELD) {
+    if (Objects.equals(fieldName, BIG_FIELD)) {
       assertTrue(field instanceof SolrDocumentFetcher.LargeLazyField);
       assertTrue(((SolrDocumentFetcher.LargeLazyField) field).hasBeenLoaded());
     } else {
diff --git a/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java b/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
index a68b5b332be..568095d5421 100644
--- a/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
+++ b/solr/core/src/test/org/apache/solr/search/ReturnFieldsTest.java
@@ -21,11 +21,10 @@ import static org.apache.solr.response.DocsStreamer.convertLuceneDocToSolrDoc;
 
 import java.lang.reflect.Method;
 import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Random;
+import java.util.Set;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.StringField;
 import org.apache.lucene.tests.util.TestUtil;
@@ -96,7 +95,7 @@ public class ReturnFieldsTest extends SolrTestCaseJ4 {
   public void testToString() {
     for (Method m : SolrReturnFields.class.getMethods()) {
       if (m.getName().equals("toString")) {
-        assertTrue(m + " is not overridden ! ", m.getDeclaringClass() == SolrReturnFields.class);
+        assertSame(m + " is not overridden ! ", m.getDeclaringClass(), SolrReturnFields.class);
         break;
       }
     }
@@ -424,7 +423,7 @@ public class ReturnFieldsTest extends SolrTestCaseJ4 {
     // output should only have a single field
     docOut = convertLuceneDocToSolrDoc(docIn, schema, new SolrReturnFields(req("fl", "id")));
     assertEquals(docOut.toString(), 1, docOut.size());
-    assertEquals(docOut.toString(), Collections.singleton("id"), docOut.getFieldNames());
+    assertEquals(docOut.toString(), List.of("id"), List.copyOf(docOut.getFieldNames()));
     assertTrue(docOut.toString(), docOut.get("id") instanceof StringField);
 
     // output should only have the few specified fields
@@ -440,8 +439,8 @@ public class ReturnFieldsTest extends SolrTestCaseJ4 {
       assertEquals(debug, 5, docOut.size());
       assertEquals(
           debug,
-          new HashSet<>(Arrays.asList("id", "subword", "uniq", "foo_2_s1", "store")),
-          docOut.getFieldNames());
+          Set.of("id", "subword", "uniq", "foo_2_s1", "store"),
+          Set.copyOf(docOut.getFieldNames()));
       assertTrue(debug, docOut.get("id") instanceof StringField);
       assertTrue(debug, docOut.get("store") instanceof StringField);
       assertTrue(debug, docOut.get("foo_2_s1") instanceof StringField);
diff --git a/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java b/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
index bfc84c71b95..d44daee769f 100644
--- a/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
+++ b/solr/core/src/test/org/apache/solr/search/TestIndexSearcher.java
@@ -148,8 +148,8 @@ public class TestIndexSearcher extends SolrTestCaseJ4 {
         "nothing changed, searcher should be the same", sr3.getSearcher(), sr4.getSearcher());
     assertEquals(
         "nothing changed, searcher should not have been re-registered",
-        sr3SearcherRegAt,
-        g.getValue());
+        sr3SearcherRegAt.toInstant(),
+        g.getValue().toInstant());
     IndexReader r4 = sr4.getSearcher().getRawReader();
 
     // force an index change so the registered searcher won't be the one we are testing (and
diff --git a/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java b/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java
index 4e077bfab5b..5c0511da18e 100644
--- a/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java
+++ b/solr/core/src/test/org/apache/solr/search/TestQueryTypes.java
@@ -108,8 +108,8 @@ public class TestQueryTypes extends SolrTestCaseJ4 {
       // terms qparser
       // wrap in spaces sometimes if space separated
       final String separator =
-          f == "v_s" ? "" : "separator=' '"; // use space separated when field isn't v_s
-      String vMod = separator != "" && random().nextBoolean() ? " " + v + " " : v;
+          f.equals("v_s") ? "" : "separator=' '"; // use space separated when field isn't v_s
+      String vMod = !separator.equals("") && random().nextBoolean() ? " " + v + " " : v;
       assertQ(req("q", "{!terms " + separator + " f=" + f + "}" + vMod), "//result[@numFound='1']");
 
       // lucene range
diff --git a/solr/core/src/test/org/apache/solr/search/TestSolrCoreParser.java b/solr/core/src/test/org/apache/solr/search/TestSolrCoreParser.java
index b2a909fca0c..ac080b5e686 100644
--- a/solr/core/src/test/org/apache/solr/search/TestSolrCoreParser.java
+++ b/solr/core/src/test/org/apache/solr/search/TestSolrCoreParser.java
@@ -19,6 +19,7 @@ package org.apache.solr.search;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
 import org.apache.lucene.analysis.Analyzer;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.queries.spans.SpanNearQuery;
@@ -227,7 +228,11 @@ public class TestSolrCoreParser extends SolrTestCaseJ4 {
     }
     assertEquals(fieldName, term.field());
     assertTrue(
-        "expected term text (" + text + ") not found in (" + expectedTermTexts + ")",
+        "expected term text ("
+            + text
+            + ") not found in ("
+            + Arrays.toString(expectedTermTexts)
+            + ")",
         foundExpected);
   }
 }
diff --git a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java
index 68692e45ed7..ca4a1afb05b 100644
--- a/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java
+++ b/solr/core/src/test/org/apache/solr/search/facet/TestCloudJSONFacetJoinDomain.java
@@ -25,6 +25,7 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Random;
 import java.util.concurrent.atomic.AtomicInteger;
 import org.apache.lucene.tests.util.TestUtil;
@@ -291,15 +292,17 @@ public class TestCloudJSONFacetJoinDomain extends SolrCloudTestCase {
   public void testSanityCheckDomainMethods() {
     {
       final JoinDomain empty = new JoinDomain(null, null, null);
-      assertEquals(null, empty.toJSONFacetParamValue());
+      assertNull(empty.toJSONFacetParamValue());
       final SolrParams out = empty.applyDomainToQuery("safe_key", params("q", "qqq"));
       assertNotNull(out);
-      assertEquals(null, out.get("safe_key"));
+      assertNull(out.get("safe_key"));
       assertEquals("qqq", out.get("q"));
     }
     {
       final JoinDomain join = new JoinDomain("xxx", "yyy", null);
-      assertEquals("domain:{join:{from:xxx,to:yyy}}", join.toJSONFacetParamValue().toString());
+      assertEquals(
+          "domain:{join:{from:xxx,to:yyy}}",
+          Objects.requireNonNull(join.toJSONFacetParamValue()).toString());
       final SolrParams out = join.applyDomainToQuery("safe_key", params("q", "qqq"));
       assertNotNull(out);
       assertEquals("qqq", out.get("safe_key"));
@@ -307,16 +310,19 @@ public class TestCloudJSONFacetJoinDomain extends SolrCloudTestCase {
     }
     {
       final JoinDomain filter = new JoinDomain(null, null, "zzz");
-      assertEquals("domain:{filter:'zzz'}", filter.toJSONFacetParamValue().toString());
+      assertEquals(
+          "domain:{filter:'zzz'}",
+          Objects.requireNonNull(filter.toJSONFacetParamValue()).toString());
       final SolrParams out = filter.applyDomainToQuery("safe_key", params("q", "qqq"));
       assertNotNull(out);
-      assertEquals(null, out.get("safe_key"));
+      assertNull(out.get("safe_key"));
       assertEquals("zzz AND qqq", out.get("q"));
     }
     {
       final JoinDomain both = new JoinDomain("xxx", "yyy", "zzz");
       assertEquals(
-          "domain:{join:{from:xxx,to:yyy},filter:'zzz'}", both.toJSONFacetParamValue().toString());
+          "domain:{join:{from:xxx,to:yyy},filter:'zzz'}",
+          Objects.requireNonNull(both.toJSONFacetParamValue()).toString());
       final SolrParams out = both.applyDomainToQuery("safe_key", params("q", "qqq"));
       assertNotNull(out);
       assertEquals("qqq", out.get("safe_key"));
diff --git a/solr/core/src/test/org/apache/solr/search/join/BJQParserTest.java b/solr/core/src/test/org/apache/solr/search/join/BJQParserTest.java
index 6f08c15dab9..e110c015019 100644
--- a/solr/core/src/test/org/apache/solr/search/join/BJQParserTest.java
+++ b/solr/core/src/test/org/apache/solr/search/join/BJQParserTest.java
@@ -24,6 +24,7 @@ import java.util.List;
 import java.util.ListIterator;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import javax.xml.xpath.XPathConstants;
 import org.apache.lucene.search.Query;
 import org.apache.lucene.search.TopDocs;
@@ -116,7 +117,8 @@ public class BJQParserTest extends SolrTestCaseJ4 {
     // add grandchildren after children
     for (ListIterator<String[]> iter = block.listIterator(); iter.hasNext(); ) {
       String[] child = iter.next();
-      assert child[0] == "child_s" && child[2] == "parentchild_s" : Arrays.toString(child);
+      assert Objects.equals(child[0], "child_s") && Objects.equals(child[2], "parentchild_s")
+          : Arrays.toString(child);
       String child_s = child[1];
       String parentchild_s = child[3];
       int grandChildPos = 0;
@@ -176,7 +178,7 @@ public class BJQParserTest extends SolrTestCaseJ4 {
         "//doc/arr[@name='child_s']/str='" + klm[0] + "'",
         "//doc/arr[@name='child_s']/str='" + klm[1] + "'",
         "//doc/arr[@name='child_s']/str='" + klm[2] + "'");
-    assert klm.length == 3 : "change asserts pls " + klm;
+    assert klm.length == 3 : "change asserts pls " + Arrays.toString(klm);
   }
 
   private static final String beParents[] =
diff --git a/solr/core/src/test/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactoryTest.java
index dcb467e778a..551ae03121f 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/CloneFieldUpdateProcessorFactoryTest.java
@@ -16,9 +16,8 @@
  */
 package org.apache.solr.update.processor;
 
-import java.util.Arrays;
 import java.util.Collection;
-import java.util.Collections;
+import java.util.List;
 import org.apache.solr.common.SolrInputDocument;
 import org.junit.BeforeClass;
 import org.junit.Test;
@@ -100,11 +99,11 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
     assertEquals("category should have a value", "test", doc.getFieldValue("category"));
 
     Collection<Object> auths = doc.getFieldValues("authors");
-    assertTrue(auths.size() == 2);
+    assertEquals(2, auths.size());
     assertTrue(auths.contains("author1"));
     assertTrue(auths.contains("author2"));
     Collection<Object> eds = doc.getFieldValues("editors");
-    assertTrue(eds.size() == 2);
+    assertEquals(2, eds.size());
     assertTrue(eds.contains("ed1"));
     assertTrue(eds.contains("ed2"));
 
@@ -113,7 +112,7 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
     assertEquals("list_price should have a value", 6.0, doc.getFieldValue("list_price"));
 
     Collection<Object> features = doc.getFieldValues("features");
-    assertTrue(features.size() == 3);
+    assertEquals(3, features.size());
     assertTrue(features.contains("hill"));
     assertTrue(features.contains("valley"));
     assertTrue(features.contains("dune"));
@@ -122,14 +121,14 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
     assertEquals("category_s should have a value", "test", doc.getFieldValue("category_s"));
 
     Collection<Object> contribs = doc.getFieldValues("contributors");
-    assertTrue(contribs.size() == 4);
+    assertEquals(4, contribs.size());
     assertTrue(contribs.contains("author1"));
     assertTrue(contribs.contains("author2"));
     assertTrue(contribs.contains("ed1"));
     assertTrue(contribs.contains("ed2"));
 
     Collection<Object> prices = doc.getFieldValues("all_prices");
-    assertTrue(prices.size() == 2);
+    assertEquals(2, prices.size());
     assertTrue(prices.contains(5.0));
     assertTrue(prices.contains(4.0));
     assertFalse(prices.contains(6.0));
@@ -139,13 +138,13 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
     // itself
 
     Collection<Object> keyf = doc.getFieldValues("key_feature");
-    assertTrue(keyf.size() == 3);
+    assertEquals(3, keyf.size());
     assertTrue(keyf.contains("hill"));
     assertTrue(keyf.contains("valley"));
     assertTrue(keyf.contains("dune"));
 
     Collection<Object> bestf = doc.getFieldValues("best_feature");
-    assertTrue(bestf.size() == 3);
+    assertEquals(3, bestf.size());
     assertTrue(bestf.contains("hill"));
     assertTrue(bestf.contains("valley"));
     assertTrue(bestf.contains("dune"));
@@ -157,7 +156,7 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
 
     // regardless of chain, all of these checks should be equivalent
     for (String chain :
-        Arrays.asList(
+        List.of(
             "clone-single", "clone-single-regex",
             "clone-multi", "clone-multi-regex",
             "clone-array", "clone-array-regex",
@@ -173,8 +172,9 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
                   f("source1_s", "123456789", "", 42, "abcd")));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("source1_s"));
-      assertEquals(chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("dest_s"));
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("source1_s")));
+      assertEquals(
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("dest_s")));
 
       // append to existing values, preserve boost
       d =
@@ -187,16 +187,16 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
                   f("source1_s", "123456789", "", 42, "abcd")));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("source1_s"));
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("source1_s")));
       assertEquals(
           chain,
-          Arrays.asList("orig1", "orig2", "123456789", "", 42, "abcd"),
-          d.getFieldValues("dest_s"));
+          List.of("orig1", "orig2", "123456789", "", 42, "abcd"),
+          List.copyOf(d.getFieldValues("dest_s")));
     }
 
     // should be equivalent for any chain matching source1_s and source2_s (but not source0_s)
     for (String chain :
-        Arrays.asList(
+        List.of(
             "clone-multi", "clone-multi-regex",
             "clone-array", "clone-array-regex",
             "clone-selector", "clone-selector-regex")) {
@@ -212,12 +212,12 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
                   f("source2_s", "xxx", 999)));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("source1_s"));
-      assertEquals(chain, Arrays.asList("xxx", 999), d.getFieldValues("source2_s"));
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("source1_s")));
+      assertEquals(chain, List.of("xxx", 999), List.copyOf(d.getFieldValues("source2_s")));
       assertEquals(
           chain,
-          Arrays.asList("123456789", "", 42, "abcd", "xxx", 999),
-          d.getFieldValues("dest_s"));
+          List.of("123456789", "", 42, "abcd", "xxx", 999),
+          List.copyOf(d.getFieldValues("dest_s")));
 
       // append to existing values
       d =
@@ -231,17 +231,17 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
                   f("source2_s", "xxx", 999)));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("source1_s"));
-      assertEquals(chain, Arrays.asList("xxx", 999), d.getFieldValues("source2_s"));
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("source1_s")));
+      assertEquals(chain, List.of("xxx", 999), List.copyOf(d.getFieldValues("source2_s")));
       assertEquals(
           chain,
-          Arrays.asList("orig1", "orig2", "123456789", "", 42, "abcd", "xxx", 999),
-          d.getFieldValues("dest_s"));
+          List.of("orig1", "orig2", "123456789", "", 42, "abcd", "xxx", 999),
+          List.copyOf(d.getFieldValues("dest_s")));
     }
 
     // any chain that copies source1_s to dest_s should be equivalent for these assertions
     for (String chain :
-        Arrays.asList(
+        List.of(
             "clone-simple-regex-syntax",
             "clone-single",
             "clone-single-regex",
@@ -256,8 +256,9 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
       d = processAdd(chain, doc(f("id", "1111"), f("source1_s", "123456789", "", 42, "abcd")));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("source1_s"));
-      assertEquals(chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("dest_s"));
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("source1_s")));
+      assertEquals(
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("dest_s")));
 
       // append to existing values, preserve boost
       d =
@@ -269,11 +270,11 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
                   f("source1_s", "123456789", "", 42, "abcd")));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("source1_s"));
+          chain, List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("source1_s")));
       assertEquals(
           chain,
-          Arrays.asList("orig1", "orig2", "123456789", "", 42, "abcd"),
-          d.getFieldValues("dest_s"));
+          List.of("orig1", "orig2", "123456789", "", 42, "abcd"),
+          List.copyOf(d.getFieldValues("dest_s")));
     }
   }
 
@@ -287,7 +288,7 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
                 f("foo_x3_x7_s", "xyz")));
 
     assertNotNull(d);
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("foo_y2_s"));
+    assertEquals(List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("foo_y2_s")));
     assertEquals("xyz", d.getFieldValue("foo_y3_y7_s"));
   }
 
@@ -314,17 +315,17 @@ public class CloneFieldUpdateProcessorFactoryTest extends UpdateProcessorTestBas
     assertNotNull(d);
     assertEquals("misc", d.getFieldValue("category"));
     assertEquals("misc", d.getFieldValue("category_s"));
-    assertEquals(Arrays.asList("Isaac Asimov", "John Brunner"), d.getFieldValues("authors"));
-    assertEquals(Collections.singletonList("John W. Campbell"), d.getFieldValues("editors"));
+    assertEquals(List.of("Isaac Asimov", "John Brunner"), List.copyOf(d.getFieldValues("authors")));
+    assertEquals(List.of("John W. Campbell"), List.copyOf(d.getFieldValues("editors")));
     assertEquals(
-        Arrays.asList("Isaac Asimov", "John Brunner", "John W. Campbell"),
-        d.getFieldValues("contributors"));
+        List.of("Isaac Asimov", "John Brunner", "John W. Campbell"),
+        List.copyOf(d.getFieldValues("contributors")));
     assertEquals(87, d.getFieldValue("store1_price"));
     assertEquals(78, d.getFieldValue("store2_price"));
     assertEquals(1000, d.getFieldValue("list_price"));
-    assertEquals(Arrays.asList(87, 78), d.getFieldValues("all_prices"));
+    assertEquals(List.of(87, 78), List.copyOf(d.getFieldValues("all_prices")));
 
-    assertEquals(Arrays.asList("Pages!", "Binding!"), d.getFieldValues("key_feature"));
+    assertEquals(List.of("Pages!", "Binding!"), List.copyOf(d.getFieldValues("key_feature")));
     assertEquals("Pullups", d.getFieldValue("key_feat_of_strength"));
   }
 
diff --git a/solr/core/src/test/org/apache/solr/update/processor/DefaultValueUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/DefaultValueUpdateProcessorTest.java
index 045448717bb..58be0854dac 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/DefaultValueUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/DefaultValueUpdateProcessorTest.java
@@ -17,8 +17,8 @@
 package org.apache.solr.update.processor;
 
 import java.io.IOException;
-import java.util.Arrays;
 import java.util.Date;
+import java.util.List;
 import java.util.UUID;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrInputDocument;
@@ -57,7 +57,7 @@ public class DefaultValueUpdateProcessorTest extends SolrTestCaseJ4 {
     assertTrue(
         "timestamp not a date: " + d.getFieldValue("timestamp").getClass(),
         d.getFieldValue("timestamp") instanceof Date);
-    assertEquals(Arrays.asList("Existing", "Values"), d.getFieldValues("name"));
+    assertEquals(List.of("Existing", "Values"), List.copyOf(d.getFieldValues("name")));
 
     // defaults already specified
     d =
@@ -76,8 +76,8 @@ public class DefaultValueUpdateProcessorTest extends SolrTestCaseJ4 {
     assertEquals("I HAVE A VALUE", d.getFieldValue("processor_default_s"));
     assertEquals(12345, d.getFieldValue("processor_default_i"));
     assertEquals("550e8400-e29b-41d4-a716-446655440000", d.getFieldValue("uuid"));
-    assertEquals(now, d.getFieldValue("timestamp"));
-    assertEquals(Arrays.asList("Existing", "Values"), d.getFieldValues("name"));
+    assertEquals(now.toInstant(), ((Date) d.getFieldValue("timestamp")).toInstant());
+    assertEquals(List.of("Existing", "Values"), List.copyOf(d.getFieldValues("name")));
   }
 
   /** Convenience method for building up SolrInputDocuments */
diff --git a/solr/core/src/test/org/apache/solr/update/processor/DocExpirationUpdateProcessorFactoryTest.java b/solr/core/src/test/org/apache/solr/update/processor/DocExpirationUpdateProcessorFactoryTest.java
index f26dbcb5ddd..a4d7ef63f9c 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/DocExpirationUpdateProcessorFactoryTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/DocExpirationUpdateProcessorFactoryTest.java
@@ -45,7 +45,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             params("NOW", "1394059630042"),
             doc(f("id", "1111"), f("_ttl_", "+5MINUTES")));
     assertNotNull(d);
-    assertEquals(new Date(1394059930042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394059930042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     d =
         processAdd(
@@ -56,7 +58,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             doc(f("id", "1111")));
 
     assertNotNull(d);
-    assertEquals(new Date(1394059930042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394059930042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
   }
 
   public void testTTLFieldConversion() throws Exception {
@@ -68,7 +72,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             params("NOW", "1394059630042"),
             doc(f("id", "1111"), f("_ttl_field_", "+5MINUTES")));
     assertNotNull(d);
-    assertEquals(new Date(1394059930042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394059930042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     d =
         processAdd(
@@ -76,7 +82,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             params("NOW", "1394059630042"),
             doc(f("id", "2222"), f("_ttl_field_", "+27MINUTES")));
     assertNotNull(d);
-    assertEquals(new Date(1394061250042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394061250042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     d =
         processAdd(
@@ -84,7 +92,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             params("NOW", "1394059630042"),
             doc(f("id", "3333"), f("_ttl_field_", "+1YEAR")));
     assertNotNull(d);
-    assertEquals(new Date(1425595630042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1425595630042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     d =
         processAdd(
@@ -92,7 +102,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             params("NOW", "1394059630042"),
             doc(f("id", "1111"), f("_ttl_field_", "/DAY+1YEAR")));
     assertNotNull(d);
-    assertEquals(new Date(1425513600000L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1425513600000L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     // default ttlParamName is disabled, this should not convert...
     d =
@@ -118,7 +130,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
             doc(f("id", "1111")));
 
     assertNotNull(d);
-    assertEquals(new Date(1394059930042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394059930042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     d =
         processAdd(
@@ -128,7 +142,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
                 "_ttl_param_", "+27MINUTES"),
             doc(f("id", "2222")));
     assertNotNull(d);
-    assertEquals(new Date(1394061250042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394061250042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     // default ttlFieldName is disabled, param should be used...
     d =
@@ -139,7 +155,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
                 "_ttl_param_", "+5MINUTES"),
             doc(f("id", "1111"), f("_ttl_field_", "+999MINUTES")));
     assertNotNull(d);
-    assertEquals(new Date(1394059930042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394059930042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     // default ttlFieldName is disabled, this should not convert...
     d =
@@ -160,7 +178,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
                 "_ttl_param_", "+999MINUTES"),
             doc(f("id", "1111"), f("_ttl_field_", "+5MINUTES")));
     assertNotNull(d);
-    assertEquals(new Date(1394059930042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394059930042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
 
     d =
         processAdd(
@@ -170,7 +190,9 @@ public class DocExpirationUpdateProcessorFactoryTest extends UpdateProcessorTest
                 "_ttl_param_", "+27MINUTES"),
             doc(f("id", "2222")));
     assertNotNull(d);
-    assertEquals(new Date(1394061250042L), d.getFieldValue("_expire_at_tdt"));
+    assertEquals(
+        new Date(1394061250042L).toInstant(),
+        ((Date) d.getFieldValue("_expire_at_tdt")).toInstant());
   }
 
   public void testAutomaticDeletes() throws Exception {
diff --git a/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java b/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
index b8c5bc30644..25f66221f73 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/FieldMutatingUpdateProcessorTest.java
@@ -16,8 +16,8 @@
  */
 package org.apache.solr.update.processor;
 
-import java.util.Arrays;
 import java.util.LinkedHashSet;
+import java.util.List;
 import java.util.TreeSet;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
@@ -82,8 +82,8 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     // simple stuff
     assertEquals("string", d.getFieldValue("foo_s"));
-    assertEquals(Arrays.asList("some text", "other Text"), d.getFieldValues("foo_t"));
-    assertEquals(Arrays.asList("Hoss", "Man"), d.getFieldValues("name"));
+    assertEquals(List.of("some text", "other Text"), List.copyOf(d.getFieldValues("foo_t")));
+    assertEquals(List.of("Hoss", "Man"), List.copyOf(d.getFieldValues("name")));
 
     // slightly more interesting
     assertEquals("processor borked non string value", 42, d.getFieldValue("foo_d"));
@@ -104,14 +104,14 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("Hoss", "Man", "Hoss"), d.getFieldValues("name"));
-    assertEquals(Arrays.asList("Hoss", "Man"), d.getFieldValues("uniq_1_s"));
-    assertEquals(Arrays.asList("Foo", "Hoss", "Man", "Bar"), d.getFieldValues("uniq_2_s"));
-    assertEquals(Arrays.asList(5.0F, 23, "string"), d.getFieldValues("uniq_3_s"));
+    assertEquals(List.of("Hoss", "Man", "Hoss"), List.copyOf(d.getFieldValues("name")));
+    assertEquals(List.of("Hoss", "Man"), List.copyOf(d.getFieldValues("uniq_1_s")));
+    assertEquals(List.of("Foo", "Hoss", "Man", "Bar"), List.copyOf(d.getFieldValues("uniq_2_s")));
+    assertEquals(List.of(5.0F, 23, "string"), List.copyOf(d.getFieldValues("uniq_3_s")));
   }
 
   public void testTrimFields() throws Exception {
-    for (String chain : Arrays.asList("trim-fields", "trim-fields-arr")) {
+    for (String chain : List.of("trim-fields", "trim-fields-arr")) {
       SolrInputDocument d = null;
       d =
           processAdd(
@@ -125,8 +125,8 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
       assertNotNull(d);
 
       assertEquals(" string ", d.getFieldValue("foo_s"));
-      assertEquals(Arrays.asList("some text", "other Text"), d.getFieldValues("foo_t"));
-      assertEquals(Arrays.asList("Hoss", "Man"), d.getFieldValues("name"));
+      assertEquals(List.of("some text", "other Text"), List.copyOf(d.getFieldValues("foo_t")));
+      assertEquals(List.of("Hoss", "Man"), List.copyOf(d.getFieldValues("name")));
     }
   }
 
@@ -144,8 +144,8 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     assertNotNull(d);
 
     assertEquals(" string ", d.getFieldValue("foo_s"));
-    assertEquals(Arrays.asList("some text", "other Text"), d.getFieldValues("foo_t"));
-    assertEquals(Arrays.asList(" Hoss ", " Man"), d.getFieldValues("name"));
+    assertEquals(List.of("some text", "other Text"), List.copyOf(d.getFieldValues("foo_t")));
+    assertEquals(List.of(" Hoss ", " Man"), List.copyOf(d.getFieldValues("name")));
   }
 
   public void testTrimRegex() throws Exception {
@@ -309,8 +309,8 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("string1"), d.getFieldValues("foo_s"));
-    assertEquals(Arrays.asList("string2", "string3"), d.getFieldValues("bar_dt"));
+    assertEquals(List.of("string1"), List.copyOf(d.getFieldValues("foo_s")));
+    assertEquals(List.of("string2", "string3"), List.copyOf(d.getFieldValues("bar_dt")));
     assertFalse("shouldn't be any values for yak_t", d.containsKey("yak_t"));
     assertEquals("processor borked non string value", 42, d.getFieldValue("foo_d"));
   }
@@ -329,7 +329,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("string1", "string222"), d.getFieldValues("foo_s"));
+    assertEquals(List.of("string1", "string222"), List.copyOf(d.getFieldValues("foo_s")));
     assertEquals("string3", d.getFieldValue("bar_dt"));
     assertEquals("", d.getFieldValue("yak_t"));
     assertEquals("processor borked non string value", 42, d.getFieldValue("foo_d"));
@@ -346,7 +346,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList(7, 9), d.getFieldValues("foo_s"));
+    assertEquals(List.of(7, 9), List.copyOf(d.getFieldValues("foo_s")));
     assertEquals("string3", d.getFieldValue("bar_dt"));
     assertEquals(0, d.getFieldValue("yak_t"));
     assertEquals("processor borked non string value", 42, d.getFieldValue("foo_d"));
@@ -438,9 +438,9 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("string1"), d.getFieldValues("foo_s"));
-    assertEquals(Arrays.asList("string3"), d.getFieldValues("bar_s"));
-    assertEquals(Arrays.asList("string4", "string5"), d.getFieldValues("yak_t"));
+    assertEquals(List.of("string1"), List.copyOf(d.getFieldValues("foo_s")));
+    assertEquals(List.of("string3"), List.copyOf(d.getFieldValues("bar_s")));
+    assertEquals(List.of("string4", "string5"), List.copyOf(d.getFieldValues("yak_t")));
   }
 
   public void testLastValue() throws Exception {
@@ -459,9 +459,9 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("string222"), d.getFieldValues("foo_s"));
-    assertEquals(Arrays.asList("string3"), d.getFieldValues("bar_s"));
-    assertEquals(Arrays.asList("string4", "string5"), d.getFieldValues("yak_t"));
+    assertEquals(List.of("string222"), List.copyOf(d.getFieldValues("foo_s")));
+    assertEquals(List.of("string3"), List.copyOf(d.getFieldValues("bar_s")));
+    assertEquals(List.of("string4", "string5"), List.copyOf(d.getFieldValues("yak_t")));
 
     // test optimizations (and force test of defaults)
 
@@ -470,7 +470,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     // test something that's definitely a SortedSet
 
     special = new SolrInputField("foo_s");
-    special.setValue(new TreeSet<>(Arrays.asList("ggg", "first", "last", "hhh")));
+    special.setValue(new TreeSet<>(List.of("ggg", "first", "last", "hhh")));
 
     d = processAdd("last-value", doc(f("id", "1111"), special));
 
@@ -481,7 +481,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     // test something that's definitely a List
 
     special = new SolrInputField("foo_s");
-    special.setValue(Arrays.asList("first", "ggg", "hhh", "last"));
+    special.setValue(List.of("first", "ggg", "hhh", "last"));
 
     d = processAdd("last-value", doc(f("id", "1111"), special));
 
@@ -493,7 +493,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     // (ie: get default behavior of Collection using iterator)
 
     special = new SolrInputField("foo_s");
-    special.setValue(new LinkedHashSet<>(Arrays.asList("first", "ggg", "hhh", "last")));
+    special.setValue(new LinkedHashSet<>(List.of("first", "ggg", "hhh", "last")));
 
     d = processAdd("last-value", doc(f("id", "1111"), special));
 
@@ -517,10 +517,10 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("aaa"), d.getFieldValues("foo_s"));
-    assertEquals(Arrays.asList(-3), d.getFieldValues("foo_i"));
-    assertEquals(Arrays.asList("aaa"), d.getFieldValues("bar_s"));
-    assertEquals(Arrays.asList("aaa", "bbb"), d.getFieldValues("yak_t"));
+    assertEquals(List.of("aaa"), List.copyOf(d.getFieldValues("foo_s")));
+    assertEquals(List.of(-3), List.copyOf(d.getFieldValues("foo_i")));
+    assertEquals(List.of("aaa"), List.copyOf(d.getFieldValues("bar_s")));
+    assertEquals(List.of("aaa", "bbb"), List.copyOf(d.getFieldValues("yak_t")));
 
     // failure when un-comparable
 
@@ -541,7 +541,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
       resetExceptionIgnores();
     }
     assertNotNull("no error on un-comparable values", error);
-    assertTrue("error doesn't mention field name", 0 <= error.getMessage().indexOf("foo_s"));
+    assertTrue("error doesn't mention field name", error.getMessage().contains("foo_s"));
   }
 
   public void testMaxValue() throws Exception {
@@ -559,10 +559,10 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("zzz"), d.getFieldValues("foo_s"));
-    assertEquals(Arrays.asList(128), d.getFieldValues("foo_i"));
-    assertEquals(Arrays.asList("aaa"), d.getFieldValues("bar_s"));
-    assertEquals(Arrays.asList("aaa", "bbb"), d.getFieldValues("yak_t"));
+    assertEquals(List.of("zzz"), List.copyOf(d.getFieldValues("foo_s")));
+    assertEquals(List.of(128), List.copyOf(d.getFieldValues("foo_i")));
+    assertEquals(List.of("aaa"), List.copyOf(d.getFieldValues("bar_s")));
+    assertEquals(List.of("aaa", "bbb"), List.copyOf(d.getFieldValues("yak_t")));
 
     // failure when un-comparable
 
@@ -583,7 +583,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
       resetExceptionIgnores();
     }
     assertNotNull("no error on un-comparable values", error);
-    assertTrue("error doesn't mention field name", 0 <= error.getMessage().indexOf("foo_s"));
+    assertTrue("error doesn't mention field name", error.getMessage().contains("foo_s"));
   }
 
   public void testHtmlStrip() throws Exception {
@@ -599,7 +599,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("hi & bye", "aaa", "bbb"), d.getFieldValues("html_s"));
+    assertEquals(List.of("hi & bye", "aaa", "bbb"), List.copyOf(d.getFieldValues("html_s")));
     assertEquals("<body>hi &amp; bye", d.getFieldValue("bar_s"));
   }
 
@@ -610,7 +610,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("12345", "", 42, "abcd"), d.getFieldValues("trunc"));
+    assertEquals(List.of("12345", "", 42, "abcd"), List.copyOf(d.getFieldValues("trunc")));
   }
 
   public void testIgnore() throws Exception {
@@ -644,7 +644,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     assertFalse(d.containsKey("bar_giberish"));
     assertFalse(d.containsKey("foo_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("t_raw"));
+    assertEquals(List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("t_raw")));
     assertEquals("hoss", d.getFieldValue("foo_s"));
 
     d =
@@ -658,8 +658,10 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
                 f("foo_s", "hoss")));
 
     assertNotNull(d);
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("foo_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("bar_giberish"));
+    assertEquals(
+        List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("foo_giberish")));
+    assertEquals(
+        List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("bar_giberish")));
     assertFalse(d.containsKey("t_raw"));
     assertEquals("hoss", d.getFieldValue("foo_s"));
 
@@ -675,7 +677,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     assertFalse(d.containsKey("foo_giberish"));
     assertFalse(d.containsKey("bar_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("t_raw"));
+    assertEquals(List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("t_raw")));
     assertEquals("hoss", d.getFieldValue("foo_s"));
 
     d =
@@ -689,8 +691,9 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
                 f("foo_s", "hoss")));
     assertNotNull(d);
     assertFalse(d.containsKey("foo_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("bar_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("t_raw"));
+    assertEquals(
+        List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("bar_giberish")));
+    assertEquals(List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("t_raw")));
     assertEquals("hoss", d.getFieldValue("foo_s"));
 
     d =
@@ -703,9 +706,11 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
                 f("t_raw", "123456789", "", 42, "abcd"),
                 f("foo_s", "hoss")));
     assertNotNull(d);
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("foo_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("bar_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("t_raw"));
+    assertEquals(
+        List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("foo_giberish")));
+    assertEquals(
+        List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("bar_giberish")));
+    assertEquals(List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("t_raw")));
     assertFalse(d.containsKey("foo_s"));
 
     d =
@@ -736,7 +741,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     assertFalse(d.containsKey("foo_giberish"));
     assertFalse(d.containsKey("bar_giberish"));
-    assertEquals(Arrays.asList("123456789", "", 42, "abcd"), d.getFieldValues("t_raw"));
+    assertEquals(List.of("123456789", "", 42, "abcd"), List.copyOf(d.getFieldValues("t_raw")));
     assertEquals("hoss", d.getFieldValue("foo_s"));
 
     d =
@@ -783,9 +788,9 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
                 f("editors", "John W. Campbell"),
                 f("list_price", 1000)));
     assertNotNull(d);
-    assertEquals(Arrays.asList("scifi", "war", "space"), d.getFieldValues("category"));
+    assertEquals(List.of("scifi", "war", "space"), List.copyOf(d.getFieldValues("category")));
     assertEquals(3, d.getFieldValue("category_count"));
-    assertEquals(Arrays.asList("John W. Campbell"), d.getFieldValues("editors"));
+    assertEquals(List.of("John W. Campbell"), List.copyOf(d.getFieldValues("editors")));
     assertEquals(1000, d.getFieldValue("list_price"));
 
     // typical use case: clone and count demonstrating default
@@ -795,7 +800,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
             doc(f("id", "1111"), f("editors", "Anonymous"), f("list_price", 1000)));
     assertNotNull(d);
     assertEquals(0, d.getFieldValue("category_count"));
-    assertEquals(Arrays.asList("Anonymous"), d.getFieldValues("editors"));
+    assertEquals(List.of("Anonymous"), List.copyOf(d.getFieldValues("editors")));
     assertEquals(1000, d.getFieldValue("list_price"));
   }
 
@@ -815,10 +820,10 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
     assertNotNull(d);
 
     assertEquals("1111, 222", d.getFieldValue("id"));
-    assertEquals(Arrays.asList("string1", "string2"), d.getFieldValues("attr_foo"));
+    assertEquals(List.of("string1", "string2"), List.copyOf(d.getFieldValues("attr_foo")));
     assertEquals("string3, string4", d.getFieldValue("foo_s1"));
-    assertEquals(Arrays.asList("string5", "string6"), d.getFieldValues("bar_dt"));
-    assertEquals(Arrays.asList("string7", "string8"), d.getFieldValues("bar_HOSS_s"));
+    assertEquals(List.of("string5", "string6"), List.copyOf(d.getFieldValues("bar_dt")));
+    assertEquals(List.of("string7", "string8"), List.copyOf(d.getFieldValues("bar_HOSS_s")));
     assertEquals("processor borked non string value", 42, d.getFieldValue("foo_d"));
   }
 
@@ -844,7 +849,7 @@ public class FieldMutatingUpdateProcessorTest extends UpdateProcessorTestBase {
 
     assertNotNull(d);
 
-    assertEquals(Arrays.asList("string1", "string2"), d.getFieldValues("foo_t"));
+    assertEquals(List.of("string1", "string2"), List.copyOf(d.getFieldValues("foo_t")));
     assertEquals("string3" + delim + "string4", d.getFieldValue("foo_s"));
 
     // slightly more interesting
diff --git a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
index 599c3c2ccef..bbce37c1678 100644
--- a/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
+++ b/solr/core/src/test/org/apache/solr/update/processor/ParsingFieldUpdateProcessorsTest.java
@@ -36,7 +36,6 @@ import java.util.Map;
 import java.util.Set;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.schema.IndexSchema;
-import org.hamcrest.core.IsInstanceOf;
 import org.junit.BeforeClass;
 
 /**
@@ -48,14 +47,6 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
       DateTimeFormatter.ofPattern("yyyy-MM-dd['T'HH:mm[:ss[.SSS]]][z", Locale.ROOT)
           .withZone(ZoneOffset.UTC);
 
-  private static final IsInstanceOf IS_BOOLEAN = new IsInstanceOf(Boolean.class);
-  private static final IsInstanceOf IS_STRING = new IsInstanceOf(String.class);
-  private static final IsInstanceOf IS_DATE = new IsInstanceOf(Date.class);
-  private static final IsInstanceOf IS_FLOAT = new IsInstanceOf(Float.class);
-  private static final IsInstanceOf IS_DOUBLE = new IsInstanceOf(Double.class);
-  private static final IsInstanceOf IS_INTEGER = new IsInstanceOf(Integer.class);
-  private static final IsInstanceOf IS_LONG = new IsInstanceOf(Long.class);
-
   @BeforeClass
   public static void beforeClass() throws Exception {
     initCore("solrconfig-parsing-update-processor-chains.xml", "schema12.xml");
@@ -67,7 +58,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     String dateString = "2010-11-12T13:14:15.168Z";
     SolrInputDocument d = processAdd("parse-date", doc(f("id", "9"), f("date_dt", dateString)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("date_dt"), IS_DATE);
+    assertTrue(d.getFieldValue("date_dt") instanceof Date);
     assertEquals(Instant.parse(dateString), ((Date) d.getFieldValue("date_dt")).toInstant());
     assertU(commit());
     assertQ(req("id:9"), "//date[@name='date_dt'][.='" + dateString + "']");
@@ -79,7 +70,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     String dateString = "2010-11-12T13:14:15.168Z";
     SolrInputDocument d = processAdd("parse-date", doc(f("id", "39"), f("date_tdt", dateString)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("date_tdt"), IS_DATE);
+    assertTrue(d.getFieldValue("date_tdt") instanceof Date);
     assertEquals(Instant.parse(dateString), ((Date) d.getFieldValue("date_tdt")).toInstant());
     assertU(commit());
     assertQ(req("id:39"), "//date[@name='date_tdt'][.='" + dateString + "']");
@@ -94,7 +85,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
         processAdd(
             "parse-date-no-run-processor", doc(f("id", "18"), f("not_in_schema", dateString)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("not_in_schema"), IS_DATE);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
     assertEquals(Instant.parse(dateString), ((Date) d.getFieldValue("not_in_schema")).toInstant());
 
     d =
@@ -104,7 +95,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     for (Object val : d.getFieldValues("not_in_schema")) {
       // check that nothing was mutated, since not all field values are parseable as dates
-      assertThat(val, IS_STRING);
+      assertTrue(val instanceof String);
     }
 
     d =
@@ -114,7 +105,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     for (Object val : d.getFieldValues("not_in_schema")) {
       // check again that nothing was mutated, but with a valid date first this time
-      assertThat(val, IS_STRING);
+      assertTrue(val instanceof String);
     }
   }
 
@@ -135,8 +126,8 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
                 f("dateUTC_dt", dateStringUTC),
                 f("dateNoTimeZone_dt", dateStringNoTimeZone)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("dateUTC_dt"), IS_DATE);
-    assertThat(d.getFieldValue("dateNoTimeZone_dt"), IS_DATE);
+    assertTrue(d.getFieldValue("dateUTC_dt") instanceof Date);
+    assertTrue(d.getFieldValue("dateNoTimeZone_dt") instanceof Date);
     assertU(commit());
     assertQ(
         req("id:99"),
@@ -154,7 +145,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-date-explicit-not-in-schema-selector-no-run-processor",
             doc(f("id", "88"), f("not_in_schema", dateString)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("not_in_schema"), IS_DATE);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
     assertEquals(Instant.parse(dateString), ((Date) d.getFieldValue("not_in_schema")).toInstant());
   }
 
@@ -176,7 +167,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     }
 
     assertNotNull(d);
-    assertThat(d.getFieldValue("date_dt"), IS_DATE);
+    assertTrue(d.getFieldValue("date_dt") instanceof Date);
     assertEquals(Instant.parse(dateString), ((Date) d.getFieldValue("date_dt")).toInstant());
   }
 
@@ -189,7 +180,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "US-Pacific-parse-date-no-run-processor",
             doc(f("id", "288"), f("not_in_schema", dateString)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("not_in_schema"), IS_DATE);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
     assertEquals(
         Instant.parse("2010-08-09T07:00:00.000Z"),
         ((Date) d.getFieldValue("not_in_schema")).toInstant());
@@ -239,10 +230,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
               "parse-date-many-formats-no-run-processor",
               doc(f("id", id), f("dateUTC_dt", dateString)));
       assertNotNull(d);
-      assertThat(
+      assertTrue(
           "index: " + i + " date '" + dateString + "' is not mutated to a Date",
-          d.getFieldValue("dateUTC_dt"),
-          IS_DATE);
+          d.getFieldValue("dateUTC_dt") instanceof Date);
       assertEquals(
           "date '" + dateString + "' mismatched milliseconds",
           expectedInstant,
@@ -260,7 +250,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-french-date-UTC-defaultTimeZone-no-run-processor",
             doc(f("id", "88"), f("not_in_schema", frenchDateString)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("not_in_schema"), IS_DATE);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Date);
     assertEquals(Instant.parse(dateString), ((Date) d.getFieldValue("not_in_schema")).toInstant());
   }
 
@@ -272,7 +262,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     for (String dateString : dateStrings) {
       mixed.put(parse(isoDateOptionalTimeFormatter, dateString), dateString);
     }
-    Double extraDouble = 29.554d;
+    double extraDouble = 29.554d;
     mixed.put(extraDouble, extraDouble); // Double-typed field value
     SolrInputDocument d =
         processAdd(
@@ -281,10 +271,10 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     boolean foundDouble = false;
     for (Object o : d.getFieldValues("not_in_schema")) {
-      if (extraDouble == o) {
+      if (o.equals(extraDouble)) {
         foundDouble = true;
       } else {
-        assertThat(o, IS_STRING);
+        assertTrue(o instanceof String);
       }
       mixed.values().remove(o);
     }
@@ -303,9 +293,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
         processAdd(
             "parse-int", doc(f("id", "113"), f("int1_i", intString1), f("int2_i", intString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("int1_i"), IS_INTEGER);
+    assertTrue(d.getFieldValue("int1_i") instanceof Integer);
     assertEquals(value, ((Integer) d.getFieldValue("int1_i")).intValue());
-    assertThat(d.getFieldValue("int2_i"), IS_INTEGER);
+    assertTrue(d.getFieldValue("int2_i") instanceof Integer);
     assertEquals(value, ((Integer) d.getFieldValue("int2_i")).intValue());
 
     assertU(commit());
@@ -331,9 +321,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-int-russian-no-run-processor",
             doc(f("id", "113"), f("int_i", intString1), f("not_in_schema", intString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("int_i"), IS_INTEGER);
+    assertTrue(d.getFieldValue("int_i") instanceof Integer);
     assertEquals(value, ((Integer) d.getFieldValue("int_i")).intValue());
-    assertThat(d.getFieldValue("not_in_schema"), IS_INTEGER);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Integer);
     assertEquals(value, ((Integer) d.getFieldValue("not_in_schema")).intValue());
   }
 
@@ -348,9 +338,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
         processAdd(
             "parse-int", doc(f("id", "113"), f("int1_ti", intString1), f("int2_ti", intString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("int1_ti"), IS_INTEGER);
+    assertTrue(d.getFieldValue("int1_ti") instanceof Integer);
     assertEquals(value, ((Integer) d.getFieldValue("int1_ti")).intValue());
-    assertThat(d.getFieldValue("int2_ti"), IS_INTEGER);
+    assertTrue(d.getFieldValue("int2_ti") instanceof Integer);
     assertEquals(value, ((Integer) d.getFieldValue("int2_ti")).intValue());
 
     assertU(commit());
@@ -376,15 +366,15 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
                 f("not_in_schema1", longString1),
                 f("not_in_schema2", longString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("not_in_schema1"), IS_STRING);
-    assertThat(d.getFieldValue("not_in_schema2"), IS_STRING);
+    assertTrue(d.getFieldValue("not_in_schema1") instanceof String);
+    assertTrue(d.getFieldValue("not_in_schema2") instanceof String);
   }
 
   public void testFailedParseMixedInt() throws Exception {
     IndexSchema schema = h.getCore().getLatestSchema();
     assertNull(schema.getFieldOrNull("not_in_schema"));
     Map<Object, Object> mixed = new HashMap<>();
-    Float floatVal = 294423.0f;
+    float floatVal = 294423.0f;
     mixed.put(85, "85");
     mixed.put(floatVal, floatVal); // Float-typed field value
     mixed.put(-2894518, "-2,894,518");
@@ -395,10 +385,10 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     boolean foundFloat = false;
     for (Object o : d.getFieldValues("not_in_schema")) {
-      if (floatVal == o) {
+      if (o.equals(floatVal)) {
         foundFloat = true;
       } else {
-        assertThat(o, IS_STRING);
+        assertTrue(o instanceof String);
       }
       mixed.values().remove(o);
     }
@@ -418,9 +408,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-long",
             doc(f("id", "113"), f("long1_l", longString1), f("long2_l", longString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("long1_l"), IS_LONG);
+    assertTrue(d.getFieldValue("long1_l") instanceof Long);
     assertEquals(value, ((Long) d.getFieldValue("long1_l")).longValue());
-    assertThat(d.getFieldValue("long2_l"), IS_LONG);
+    assertTrue(d.getFieldValue("long2_l") instanceof Long);
     assertEquals(value, ((Long) d.getFieldValue("long2_l")).longValue());
 
     assertU(commit());
@@ -446,9 +436,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-long-russian-no-run-processor",
             doc(f("id", "113"), f("long_l", longString1), f("not_in_schema", longString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("long_l"), IS_LONG);
+    assertTrue(d.getFieldValue("long_l") instanceof Long);
     assertEquals(value, ((Long) d.getFieldValue("long_l")).longValue());
-    assertThat(d.getFieldValue("not_in_schema"), IS_LONG);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Long);
     assertEquals(value, ((Long) d.getFieldValue("not_in_schema")).longValue());
   }
 
@@ -464,9 +454,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-long",
             doc(f("id", "113"), f("long1_tl", longString1), f("long2_tl", longString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("long1_tl"), IS_LONG);
+    assertTrue(d.getFieldValue("long1_tl") instanceof Long);
     assertEquals(value, ((Long) d.getFieldValue("long1_tl")).longValue());
-    assertThat(d.getFieldValue("long2_tl"), IS_LONG);
+    assertTrue(d.getFieldValue("long2_tl") instanceof Long);
     assertEquals(value, ((Long) d.getFieldValue("long2_tl")).longValue());
 
     assertU(commit());
@@ -480,7 +470,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     IndexSchema schema = h.getCore().getLatestSchema();
     assertNull(schema.getFieldOrNull("not_in_schema"));
     Map<Object, Object> mixed = new HashMap<>();
-    Float floatVal = 294423.0f;
+    float floatVal = 294423.0f;
     mixed.put(85L, "85");
     mixed.put(floatVal, floatVal); // Float-typed field value
     mixed.put(-2894518L, "-2,894,518");
@@ -492,10 +482,10 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     boolean foundFloat = false;
     for (Object o : d.getFieldValues("not_in_schema")) {
-      if (floatVal == o) {
+      if (o.equals(floatVal)) {
         foundFloat = true;
       } else {
-        assertThat(o, IS_STRING);
+        assertTrue(o instanceof String);
       }
       mixed.values().remove(o);
     }
@@ -515,9 +505,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-float",
             doc(f("id", "128"), f("float1_f", floatString1), f("float2_f", floatString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("float1_f"), IS_FLOAT);
+    assertTrue(d.getFieldValue("float1_f") instanceof Float);
     assertEquals(value, (Float) d.getFieldValue("float1_f"), EPSILON);
-    assertThat(d.getFieldValue("float2_f"), IS_FLOAT);
+    assertTrue(d.getFieldValue("float2_f") instanceof Float);
     assertEquals(value, (Float) d.getFieldValue("float2_f"), EPSILON);
 
     assertU(commit());
@@ -544,9 +534,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-float-french-no-run-processor",
             doc(f("id", "140"), f("float_f", floatString1), f("not_in_schema", floatString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("float_f"), IS_FLOAT);
+    assertTrue(d.getFieldValue("float_f") instanceof Float);
     assertEquals(value, (Float) d.getFieldValue("float_f"), EPSILON);
-    assertThat(d.getFieldValue("not_in_schema"), IS_FLOAT);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Float);
     assertEquals(value, (Float) d.getFieldValue("not_in_schema"), EPSILON);
   }
 
@@ -562,9 +552,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-float",
             doc(f("id", "728"), f("float1_tf", floatString1), f("float2_tf", floatString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("float1_tf"), IS_FLOAT);
+    assertTrue(d.getFieldValue("float1_tf") instanceof Float);
     assertEquals(value, (Float) d.getFieldValue("float1_tf"), EPSILON);
-    assertThat(d.getFieldValue("float2_tf"), IS_FLOAT);
+    assertTrue(d.getFieldValue("float2_tf") instanceof Float);
     assertEquals(value, (Float) d.getFieldValue("float2_tf"), EPSILON);
 
     assertU(commit());
@@ -588,7 +578,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             doc(f("id", "342"), f("float_tf", mixedFloats.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues("float_tf")) {
-      assertThat(o, IS_FLOAT);
+      assertTrue(o instanceof Float);
       mixedFloats.remove(o);
     }
     assertTrue(mixedFloats.isEmpty());
@@ -598,7 +588,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     IndexSchema schema = h.getCore().getLatestSchema();
     assertNull(schema.getFieldOrNull("not_in_schema"));
     Map<Object, Object> mixed = new HashMap<>();
-    Long longVal = 294423L;
+    long longVal = 294423L;
     mixed.put(85L, "85");
     mixed.put(longVal, longVal); // Float-typed field value
     mixed.put(-2894518L, "-2,894,518");
@@ -610,10 +600,10 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     boolean foundLong = false;
     for (Object o : d.getFieldValues("not_in_schema")) {
-      if (longVal == o) {
+      if (o.equals(longVal)) {
         foundLong = true;
       } else {
-        assertThat(o, IS_STRING);
+        assertTrue(o instanceof String);
       }
       mixed.values().remove(o);
     }
@@ -633,9 +623,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-double",
             doc(f("id", "128"), f("double1_d", doubleString1), f("double2_d", doubleString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("double1_d"), IS_DOUBLE);
+    assertTrue(d.getFieldValue("double1_d") instanceof Double);
     assertEquals(value, (Double) d.getFieldValue("double1_d"), EPSILON);
-    assertThat(d.getFieldValue("double2_d"), IS_DOUBLE);
+    assertTrue(d.getFieldValue("double2_d") instanceof Double);
     assertEquals(value, (Double) d.getFieldValue("double2_d"), EPSILON);
 
     assertU(commit());
@@ -662,9 +652,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-double-french-no-run-processor",
             doc(f("id", "140"), f("double_d", doubleString1), f("not_in_schema", doubleString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("double_d"), IS_DOUBLE);
+    assertTrue(d.getFieldValue("double_d") instanceof Double);
     assertEquals(value, (Double) d.getFieldValue("double_d"), EPSILON);
-    assertThat(d.getFieldValue("not_in_schema"), IS_DOUBLE);
+    assertTrue(d.getFieldValue("not_in_schema") instanceof Double);
     assertEquals(value, (Double) d.getFieldValue("not_in_schema"), EPSILON);
   }
 
@@ -680,9 +670,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
             "parse-double",
             doc(f("id", "728"), f("double1_td", doubleString1), f("double2_td", doubleString2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("double1_td"), IS_DOUBLE);
+    assertTrue(d.getFieldValue("double1_td") instanceof Double);
     assertEquals(value, (Double) d.getFieldValue("double1_td"), EPSILON);
-    assertThat(d.getFieldValue("double2_td"), IS_DOUBLE);
+    assertTrue(d.getFieldValue("double2_td") instanceof Double);
     assertEquals(value, (Double) d.getFieldValue("double2_td"), EPSILON);
 
     assertU(commit());
@@ -696,7 +686,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     IndexSchema schema = h.getCore().getLatestSchema();
     assertNull(schema.getFieldOrNull("not_in_schema"));
     Map<Object, Object> mixed = new HashMap<>();
-    Long longVal = 294423L;
+    long longVal = 294423L;
     mixed.put(85, "85.0");
     mixed.put(longVal, longVal); // Float-typed field value
     mixed.put(-2894.518, "-2,894.518");
@@ -708,10 +698,10 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     boolean foundLong = false;
     for (Object o : d.getFieldValues("not_in_schema")) {
-      if (longVal == o) {
+      if (o.equals(longVal)) {
         foundLong = true;
       } else {
-        assertThat(o, IS_STRING);
+        assertTrue(o instanceof String);
       }
       mixed.values().remove(o);
     }
@@ -729,9 +719,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
         processAdd(
             "parse-boolean", doc(f("id", "141"), f("boolean1_b", value1), f("boolean2_b", value2)));
     assertNotNull(d);
-    assertThat(d.getFieldValue("boolean1_b"), IS_BOOLEAN);
+    assertTrue(d.getFieldValue("boolean1_b") instanceof Boolean);
     assertEquals(value1, d.getFieldValue("boolean1_b"));
-    assertThat(d.getFieldValue("boolean2_b"), IS_BOOLEAN);
+    assertTrue(d.getFieldValue("boolean2_b") instanceof Boolean);
     assertEquals(value2, d.getFieldValue("boolean2_b"));
 
     assertU(commit());
@@ -762,7 +752,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
 
     for (int i = 0; i < values.length; ++i) {
-      assertThat(d.getFieldValue(fieldNames[i]), IS_BOOLEAN);
+      assertTrue(d.getFieldValue(fieldNames[i]) instanceof Boolean);
       assertEquals(values[i], d.getFieldValue(fieldNames[i]));
     }
   }
@@ -782,7 +772,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
 
     for (int i = 0; i < values.length; ++i) {
-      assertThat(d.getFieldValue(fieldNames[i]), IS_BOOLEAN);
+      assertTrue(d.getFieldValue(fieldNames[i]) instanceof Boolean);
       assertEquals(values[i], d.getFieldValue(fieldNames[i]));
     }
 
@@ -796,7 +786,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
 
     for (int i = 0; i < values.length; ++i) {
-      assertThat(d.getFieldValue(fieldNames[i]), IS_STRING);
+      assertTrue(d.getFieldValue(fieldNames[i]) instanceof String);
     }
   }
 
@@ -804,7 +794,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     IndexSchema schema = h.getCore().getLatestSchema();
     assertNull(schema.getFieldOrNull("not_in_schema"));
     Map<Object, Object> mixed = new HashMap<>();
-    Long longVal = 294423L;
+    long longVal = 294423L;
     mixed.put(true, "true");
     mixed.put(longVal, longVal); // Float-typed field value
     mixed.put(false, "false");
@@ -816,10 +806,10 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     boolean foundLong = false;
     for (Object o : d.getFieldValues("not_in_schema")) {
-      if (longVal == o) {
+      if (o.equals(longVal)) {
         foundLong = true;
       } else {
-        assertThat(o, IS_STRING);
+        assertTrue(o instanceof String);
       }
       mixed.values().remove(o);
     }
@@ -840,7 +830,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "341"), f(fieldName, booleans.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_BOOLEAN);
+      assertTrue(o instanceof Boolean);
       booleans.remove(o);
     }
     assertTrue(booleans.isEmpty());
@@ -852,7 +842,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "333"), f(fieldName, ints.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_INTEGER);
+      assertTrue(o instanceof Integer);
       ints.remove(o);
     }
     assertTrue(ints.isEmpty());
@@ -864,7 +854,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "342"), f(fieldName, longs.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_LONG);
+      assertTrue(o instanceof Long);
       longs.remove(o);
     }
     assertTrue(longs.isEmpty());
@@ -880,8 +870,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
       assertTrue(o instanceof float);
-      longs.remove(o);
+      floats.remove(o);
     }
+    assertTrue(floats.isEmpty());
     */
 
     Map<Double, String> doubles = new HashMap<>();
@@ -891,20 +882,21 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "342"), f(fieldName, doubles.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_DOUBLE);
-      longs.remove(o);
+      assertTrue(o instanceof Double);
+      doubles.remove(o);
     }
+    assertTrue(doubles.isEmpty());
 
-    Map<Date, String> dates = new HashMap<>();
+    Map<Instant, String> dates = new HashMap<>();
     String[] dateStrings = {"2020-05-13T18:47", "1989-12-14", "1682-07-22T18:33:00.000Z"};
     for (String dateString : dateStrings) {
-      dates.put(parse(isoDateOptionalTimeFormatter, dateString), dateString);
+      dates.put(parse(isoDateOptionalTimeFormatter, dateString).toInstant(), dateString);
     }
     d = processAdd(chain, doc(f("id", "343"), f(fieldName, dates.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_DATE);
-      dates.remove(o);
+      assertTrue(o instanceof Date);
+      dates.remove(((Date) o).toInstant());
     }
     assertTrue(dates.isEmpty());
 
@@ -916,7 +908,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "344"), f(fieldName, mixedLongsAndDoubles.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_DOUBLE);
+      assertTrue(o instanceof Double);
       mixedLongsAndDoubles.remove(o);
     }
     assertTrue(mixedLongsAndDoubles.isEmpty());
@@ -930,7 +922,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "345"), f(fieldName, mixed)));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_STRING);
+      assertTrue(o instanceof String);
     }
 
     Map<Double, Object> mixedDoubles = new LinkedHashMap<>(); // preserve order
@@ -941,7 +933,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "3391"), f(fieldName, mixedDoubles.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_DOUBLE);
+      assertTrue(o instanceof Double);
       mixedDoubles.remove(o);
     }
     assertTrue(mixedDoubles.isEmpty());
@@ -954,7 +946,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "3392"), f(fieldName, mixedInts.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_INTEGER);
+      assertTrue(o instanceof Integer);
       mixedInts.remove(o);
     }
     assertTrue(mixedInts.isEmpty());
@@ -967,7 +959,7 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "3393"), f(fieldName, mixedLongs.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_LONG);
+      assertTrue(o instanceof Long);
       mixedLongs.remove(o);
     }
     assertTrue(mixedLongs.isEmpty());
@@ -980,23 +972,23 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     d = processAdd(chain, doc(f("id", "3394"), f(fieldName, mixedBooleans.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_BOOLEAN);
+      assertTrue(o instanceof Boolean);
       mixedBooleans.remove(o);
     }
     assertTrue(mixedBooleans.isEmpty());
 
-    Map<Date, Object> mixedDates = new HashMap<>();
+    Map<Instant, Object> mixedDates = new HashMap<>();
     dateStrings = new String[] {"2020-05-13T18:47", "1989-12-14", "1682-07-22T18:33:00.000Z"};
     for (String dateString : dateStrings) {
-      mixedDates.put(parse(isoDateOptionalTimeFormatter, dateString), dateString);
+      mixedDates.put(parse(isoDateOptionalTimeFormatter, dateString).toInstant(), dateString);
     }
     Date extraDate = parse(isoDateOptionalTimeFormatter, "2003-04-24");
-    mixedDates.put(extraDate, extraDate); // Date-typed field value
+    mixedDates.put(extraDate.toInstant(), extraDate); // Date-typed field value
     d = processAdd(chain, doc(f("id", "3395"), f(fieldName, mixedDates.values())));
     assertNotNull(d);
     for (Object o : d.getFieldValues(fieldName)) {
-      assertThat(o, IS_DATE);
-      mixedDates.remove(o);
+      assertTrue(o instanceof Date);
+      mixedDates.remove(((Date) o).toInstant());
     }
     assertTrue(mixedDates.isEmpty());
   }
@@ -1023,10 +1015,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
               "parse-date-patterns-default-config",
               doc(f("id", id), f("date_dt", notInFormatDateString)));
       assertNotNull(d);
-      assertThat(
+      assertTrue(
           "Date string: " + notInFormatDateString + " was not parsed as a date",
-          d.getFieldValue("date_dt"),
-          IS_DATE);
+          d.getFieldValue("date_dt") instanceof Date);
       assertEquals(
           notInFormatDateString,
           ((Date) d.getField("date_dt").getFirstValue()).toInstant().toString());
@@ -1054,10 +1045,9 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
               "parse-date-patterns-default-config",
               doc(f("id", id), f("date_dt", lenientDateString)));
       assertNotNull(d);
-      assertThat(
+      assertTrue(
           "Date string: " + lenientDateString + " was not parsed as a date",
-          d.getFieldValue("date_dt"),
-          IS_DATE);
+          d.getFieldValue("date_dt") instanceof Date);
       assertEquals(
           expectedString, ((Date) d.getField("date_dt").getFirstValue()).toInstant().toString());
       ++id;
@@ -1186,11 +1176,11 @@ public class ParsingFieldUpdateProcessorsTest extends UpdateProcessorTestBase {
     assertNotNull(schema.getFieldOrNull("date_dt")); // should match "*_dt" dynamic field
     SolrInputDocument d = processAdd(chain, doc(f("id", "1"), f("date_dt", inputDateString)));
     assertNotNull(d);
-    assertThat(
+    assertTrue(
         "Date string: " + inputDateString + " was not parsed as a date",
-        d.getFieldValue("date_dt"),
-        IS_DATE);
-    assertEquals(expectedDate, d.getField("date_dt").getFirstValue());
+        d.getFieldValue("date_dt") instanceof Date);
+    assertEquals(
+        expectedDate.toInstant(), ((Date) d.getField("date_dt").getFirstValue()).toInstant());
   }
 
   private static Date parse(DateTimeFormatter dateTimeFormatter, String dateString) {
diff --git a/solr/core/src/test/org/apache/solr/util/BitSetPerf.java b/solr/core/src/test/org/apache/solr/util/BitSetPerf.java
index f546ff14804..86a815bf428 100644
--- a/solr/core/src/test/org/apache/solr/util/BitSetPerf.java
+++ b/solr/core/src/test/org/apache/solr/util/BitSetPerf.java
@@ -76,7 +76,7 @@ public class BitSetPerf {
     if ("union".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             FixedBitSet other = osets[i];
             obs.or(other);
           } else {
@@ -90,7 +90,7 @@ public class BitSetPerf {
     if ("cardinality".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             ret += osets[i].cardinality();
           } else {
             ret += sets[i].cardinality();
@@ -102,7 +102,7 @@ public class BitSetPerf {
     if ("get".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             FixedBitSet oset = osets[i];
             for (int k = 0; k < bitSetSize; k++) if (oset.get(k)) ret++;
           } else {
@@ -116,7 +116,7 @@ public class BitSetPerf {
     if ("icount".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets - 1; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             FixedBitSet a = osets[i];
             FixedBitSet b = osets[i + 1];
             ret += FixedBitSet.intersectionCount(a, b);
@@ -134,7 +134,7 @@ public class BitSetPerf {
     if ("clone".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             osets[i] = osets[i].clone();
           } else {
             sets[i] = (BitSet) sets[i].clone();
@@ -146,7 +146,7 @@ public class BitSetPerf {
     if ("nextSetBit".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             final FixedBitSet set = osets[i];
             for (int next = set.nextSetBit(0);
                 next != DocIdSetIterator.NO_MORE_DOCS;
@@ -166,7 +166,7 @@ public class BitSetPerf {
     if ("iterator".equals(test)) {
       for (int it = 0; it < iter; it++) {
         for (int i = 0; i < numSets; i++) {
-          if (impl == "open") {
+          if (impl.equals("open")) {
             final FixedBitSet set = osets[i];
             final BitSetIterator iterator = new BitSetIterator(set, 0);
             for (int next = iterator.nextDoc(); next >= 0; next = iterator.nextDoc()) {
diff --git a/solr/core/src/test/org/apache/solr/util/ModuleUtilsTest.java b/solr/core/src/test/org/apache/solr/util/ModuleUtilsTest.java
index 45120027c57..957c7268af4 100644
--- a/solr/core/src/test/org/apache/solr/util/ModuleUtilsTest.java
+++ b/solr/core/src/test/org/apache/solr/util/ModuleUtilsTest.java
@@ -64,12 +64,13 @@ public class ModuleUtilsTest extends TestCase {
   public void testResolveModules() {
     assertEquals(
         Set.of("foo", "bar", "baz", "mod1"),
-        ModuleUtils.resolveModulesFromStringOrSyspropOrEnv("foo ,bar, baz,mod1"));
-    assertEquals(Collections.emptySet(), ModuleUtils.resolveModulesFromStringOrSyspropOrEnv(""));
+        Set.copyOf(ModuleUtils.resolveModulesFromStringOrSyspropOrEnv("foo ,bar, baz,mod1")));
+    assertEquals(
+        Collections.emptySet(), Set.copyOf(ModuleUtils.resolveModulesFromStringOrSyspropOrEnv("")));
     System.setProperty("solr.modules", "foo ,bar, baz,mod1");
     assertEquals(
         Set.of("foo", "bar", "baz", "mod1"),
-        ModuleUtils.resolveModulesFromStringOrSyspropOrEnv(null));
+        Set.copyOf(ModuleUtils.resolveModulesFromStringOrSyspropOrEnv(null)));
     System.clearProperty("solr.modules");
   }
 
diff --git a/solr/core/src/test/org/apache/solr/util/tracing/TestHttpServletCarrier.java b/solr/core/src/test/org/apache/solr/util/tracing/TestHttpServletCarrier.java
index dfbb84312f9..bd19112208e 100644
--- a/solr/core/src/test/org/apache/solr/util/tracing/TestHttpServletCarrier.java
+++ b/solr/core/src/test/org/apache/solr/util/tracing/TestHttpServletCarrier.java
@@ -21,13 +21,13 @@ import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
 import java.util.Enumeration;
 import java.util.Iterator;
 import java.util.Map;
 import javax.servlet.http.HttpServletRequest;
 import org.apache.commons.collections4.IteratorUtils;
+import org.apache.commons.collections4.MultiValuedMap;
+import org.apache.commons.collections4.multimap.HashSetValuedHashMap;
 import org.apache.solr.SolrTestCaseJ4;
 import org.junit.Test;
 import org.mockito.stubbing.Answer;
@@ -38,7 +38,7 @@ public class TestHttpServletCarrier extends SolrTestCaseJ4 {
   public void test() {
     SolrTestCaseJ4.assumeWorkingMockito();
     HttpServletRequest req = mock(HttpServletRequest.class);
-    Multimap<String, String> headers = HashMultimap.create();
+    MultiValuedMap<String, String> headers = new HashSetValuedHashMap<>();
     headers.put("a", "a");
     headers.put("a", "b");
     headers.put("a", "c");
@@ -57,7 +57,7 @@ public class TestHttpServletCarrier extends SolrTestCaseJ4 {
 
     HttpServletCarrier servletCarrier = new HttpServletCarrier(req);
     Iterator<Map.Entry<String, String>> it = servletCarrier.iterator();
-    Multimap<String, String> resultBack = HashMultimap.create();
+    MultiValuedMap<String, String> resultBack = new HashSetValuedHashMap<>();
     while (it.hasNext()) {
       Map.Entry<String, String> entry = it.next();
       resultBack.put(entry.getKey(), entry.getValue());
diff --git a/solr/modules/analysis-extras/src/test/org/apache/solr/update/processor/TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory.java b/solr/modules/analysis-extras/src/test/org/apache/solr/update/processor/TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
index 78c73ab1b29..46b219dedde 100644
--- a/solr/modules/analysis-extras/src/test/org/apache/solr/update/processor/TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
+++ b/solr/modules/analysis-extras/src/test/org/apache/solr/update/processor/TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
@@ -18,7 +18,7 @@
 package org.apache.solr.update.processor;
 
 import java.io.File;
-import java.util.Arrays;
+import java.util.List;
 import org.apache.commons.io.FileUtils;
 import org.apache.solr.common.SolrInputDocument;
 import org.junit.BeforeClass;
@@ -52,7 +52,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                 f("source1_s", "Hello Flashman."),
                 f("source2_s", "Calling Flashman.")));
 
-    assertEquals(Arrays.asList("Flashman", "Flashman"), doc.getFieldValues("dest_s"));
+    assertEquals(List.of("Flashman", "Flashman"), List.copyOf(doc.getFieldValues("dest_s")));
   }
 
   @Test
@@ -65,7 +65,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                 f("source1_s", "Currently we have Flashman. Not much else."),
                 f("source2_s", "Flashman. Is. Not. There.")));
 
-    assertEquals(Arrays.asList("Flashman", "Flashman"), doc.getFieldValues("dest_s"));
+    assertEquals(List.of("Flashman", "Flashman"), List.copyOf(doc.getFieldValues("dest_s")));
   }
 
   @Test
@@ -79,7 +79,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                 f("source1_s", "Serendipitously, he was. I mean, Flashman. And yet."),
                 f("source2_s", "Correct, Flashman.")));
 
-    assertEquals(Arrays.asList("Flashman", "Flashman"), doc.getFieldValues("dest_s"));
+    assertEquals(List.of("Flashman", "Flashman"), List.copyOf(doc.getFieldValues("dest_s")));
   }
 
   public void testMultipleExtracts() throws Exception {
@@ -98,13 +98,15 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                 f("descs", "Courage, Flashman.", "Ain't he Flashman."),
                 f("descriptions", "Flashman. Flashman. Flashman.")));
 
-    assertEquals(Arrays.asList("Flashman", "Flashman"), doc.getFieldValues("people_s"));
+    assertEquals(List.of("Flashman", "Flashman"), List.copyOf(doc.getFieldValues("people_s")));
     assertEquals(
-        Arrays.asList("Flashman", "Flashman", "Flashman"), doc.getFieldValues("titular_people"));
-    assertEquals(Arrays.asList("Flashman", "Flashman"), doc.getFieldValues("key_desc_people"));
+        List.of("Flashman", "Flashman", "Flashman"),
+        List.copyOf(doc.getFieldValues("titular_people")));
     assertEquals(
-        Arrays.asList("Flashman", "Flashman", "Flashman"),
-        doc.getFieldValues("key_description_people"));
+        List.of("Flashman", "Flashman"), List.copyOf(doc.getFieldValues("key_desc_people")));
+    assertEquals(
+        List.of("Flashman", "Flashman", "Flashman"),
+        List.copyOf(doc.getFieldValues("key_description_people")));
     assertEquals(
         "Flashman", doc.getFieldValue("summary_person_s")); // {EntityType} field name interpolation
     assertEquals(
@@ -116,7 +118,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
 
     // regardless of chain, all of these checks should be equivalent
     for (String chain :
-        Arrays.asList(
+        List.of(
             "extract-single",
             "extract-single-regex",
             "extract-multi",
@@ -135,7 +137,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                   f("source0_s", "Totally Flashman."), // not extracted
                   f("source1_s", "One nation under Flashman.", "Good Flashman.")));
       assertNotNull(chain, d);
-      assertEquals(chain, Arrays.asList("Flashman", "Flashman"), d.getFieldValues("dest_s"));
+      assertEquals(chain, List.of("Flashman", "Flashman"), List.copyOf(d.getFieldValues("dest_s")));
 
       // append to existing values
       d =
@@ -149,13 +151,13 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
       assertNotNull(chain, d);
       assertEquals(
           chain,
-          Arrays.asList("orig1", "orig2", "Flashman", "Flashman"),
-          d.getFieldValues("dest_s"));
+          List.of("orig1", "orig2", "Flashman", "Flashman"),
+          List.copyOf(d.getFieldValues("dest_s")));
     }
 
     // should be equivalent for any chain matching source1_s and source2_s (but not source0_s)
     for (String chain :
-        Arrays.asList(
+        List.of(
             "extract-multi",
             "extract-multi-regex",
             "extract-array",
@@ -174,7 +176,9 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                   f("source2_s", "Indubitably Flashman.")));
       assertNotNull(chain, d);
       assertEquals(
-          chain, Arrays.asList("Flashman", "Flashman", "Flashman"), d.getFieldValues("dest_s"));
+          chain,
+          List.of("Flashman", "Flashman", "Flashman"),
+          List.copyOf(d.getFieldValues("dest_s")));
 
       // append to existing values
       d =
@@ -189,13 +193,13 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
       assertNotNull(chain, d);
       assertEquals(
           chain,
-          Arrays.asList("orig1", "orig2", "Flashman", "Flashman", "Flashman"),
-          d.getFieldValues("dest_s"));
+          List.of("orig1", "orig2", "Flashman", "Flashman", "Flashman"),
+          List.copyOf(d.getFieldValues("dest_s")));
     }
 
     // any chain that copies source1_s to dest_s should be equivalent for these assertions
     for (String chain :
-        Arrays.asList(
+        List.of(
             "extract-single",
             "extract-single-regex",
             "extract-multi",
@@ -211,7 +215,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
               chain,
               doc(f("id", "1111"), f("source1_s", "Always Flashman.", "Flashman. Noone else.")));
       assertNotNull(chain, d);
-      assertEquals(chain, Arrays.asList("Flashman", "Flashman"), d.getFieldValues("dest_s"));
+      assertEquals(chain, List.of("Flashman", "Flashman"), List.copyOf(d.getFieldValues("dest_s")));
 
       // append to existing values
       d =
@@ -224,8 +228,8 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
       assertNotNull(chain, d);
       assertEquals(
           chain,
-          Arrays.asList("orig1", "orig2", "Flashman", "Flashman"),
-          d.getFieldValues("dest_s"));
+          List.of("orig1", "orig2", "Flashman", "Flashman"),
+          List.copyOf(d.getFieldValues("dest_s")));
     }
   }
 
@@ -239,7 +243,7 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
                 f("foo_x3_x7_s", "Flashman. Whoa.")));
 
     assertNotNull(d);
-    assertEquals(Arrays.asList("Flashman", "Flashman"), d.getFieldValues("foo_y2_s"));
+    assertEquals(List.of("Flashman", "Flashman"), List.copyOf(d.getFieldValues("foo_y2_s")));
     assertEquals("Flashman", d.getFieldValue("foo_y3_y7_s"));
   }
 
@@ -258,12 +262,12 @@ public class TestOpenNLPExtractNamedEntitiesUpdateProcessorFactory extends Updat
     assertNotNull(d);
     assertEquals(
         d.getFieldNames().toString(),
-        Arrays.asList("Flashman", "Flashman"),
-        d.getFieldValues("foo_person_y2_s"));
+        List.of("Flashman", "Flashman"),
+        List.copyOf(d.getFieldValues("foo_person_y2_s")));
     assertEquals(
         d.getFieldNames().toString(),
-        Arrays.asList("London", "London"),
-        d.getFieldValues("foo_location_y2_s"));
+        List.of("London", "London"),
+        List.copyOf(d.getFieldValues("foo_location_y2_s")));
     assertEquals(
         d.getFieldNames().toString(), "Flashman", d.getFieldValue("foo_person_y3_person_y7_s"));
     assertEquals(
diff --git a/solr/modules/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java b/solr/modules/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
index 88320fe183f..d72126792f6 100644
--- a/solr/modules/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
+++ b/solr/modules/analytics/src/java/org/apache/solr/analytics/ExpressionFactory.java
@@ -900,7 +900,7 @@ public class ExpressionFactory {
       }
       if (c == variableForEachSep && !quoteOn && varLengthParamName != null) {
         int varStart = param.length() - varLengthParamName.length();
-        if (param.subSequence(varStart, param.length()).equals(varLengthParamName)) {
+        if (varLengthParamName.contentEquals(param.subSequence(varStart, param.length()))) {
           inForEach = true;
           forEachStart = i;
           forEachIter = 0;
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/BottomFunctionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/BottomFunctionTest.java
index 03726faeab6..3454d254462 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/BottomFunctionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/BottomFunctionTest.java
@@ -159,7 +159,8 @@ public class BottomFunctionTest extends SolrTestCaseJ4 {
 
     // One exists
     val.setValues("1950-05-03T10:30:50Z");
-    assertEquals(Date.from(Instant.parse("1950-05-03T10:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("1950-05-03T10:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
 
     // Both exist
@@ -168,7 +169,8 @@ public class BottomFunctionTest extends SolrTestCaseJ4 {
         "2200-01-01T10:00:50Z",
         "1800-12-31T11:30:50Z",
         "1930-05-020T10:45:50Z");
-    assertEquals(Date.from(Instant.parse("1800-12-31T11:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("1800-12-31T11:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
   }
 
@@ -370,7 +372,8 @@ public class BottomFunctionTest extends SolrTestCaseJ4 {
     val2.setValue("1950-05-03T10:30:50Z").setExists(true);
     val3.setValue("0000-05-03T10:30:50Z").setExists(false);
     val4.setValue("1850-05-03T10:30:50Z").setExists(true);
-    assertEquals(Date.from(Instant.parse("1850-05-03T10:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("1850-05-03T10:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
 
     // All exist values, one value
@@ -378,7 +381,8 @@ public class BottomFunctionTest extends SolrTestCaseJ4 {
     val2.setValue("1950-05-03T10:30:50Z").setExists(true);
     val3.setValue("1700-05-03T10:30:50Z").setExists(true);
     val4.setValue("1850-05-03T10:30:50Z").setExists(true);
-    assertEquals(Date.from(Instant.parse("1700-05-03T10:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("1700-05-03T10:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
   }
 
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateMathFunctionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateMathFunctionTest.java
index ec0d6b2e6ab..316bbb902a8 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateMathFunctionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateMathFunctionTest.java
@@ -18,9 +18,9 @@ package org.apache.solr.analytics.function.mapping;
 
 import java.time.Instant;
 import java.time.format.DateTimeParseException;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
 import org.apache.solr.analytics.value.DateValue;
@@ -58,13 +58,13 @@ public class DateMathFunctionTest extends SolrTestCaseJ4 {
 
     // Value exists
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
-    assertEquals(date1, func.getDate());
+    assertEquals(date1.toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
     assertEquals(date1.getTime(), func.getLong());
     assertTrue(func.exists());
 
     val.setValue("1920-04-15T18:15:45Z").setExists(true);
-    assertEquals(date2, func.getDate());
+    assertEquals(date2.toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
     assertEquals(date2.getTime(), func.getLong());
     assertTrue(func.exists());
@@ -92,23 +92,23 @@ public class DateMathFunctionTest extends SolrTestCaseJ4 {
     val.setValues();
     func.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // One value
     val.setValues("1800-01-01T10:30:15Z");
-    Iterator<Date> values1 = Arrays.asList(date1).iterator();
+    Iterator<Date> values1 = List.of(date1).iterator();
     func.streamDates(
         value -> {
           assertTrue(values1.hasNext());
-          assertEquals(values1.next(), value);
+          assertEquals(values1.next().toInstant(), value.toInstant());
         });
     assertFalse(values1.hasNext());
-    Iterator<Long> times1 = Arrays.asList(date1.getTime()).iterator();
+    Iterator<Long> times1 = List.of(date1.getTime()).iterator();
     func.streamLongs(
         value -> {
           assertTrue(times1.hasNext());
@@ -118,15 +118,14 @@ public class DateMathFunctionTest extends SolrTestCaseJ4 {
 
     // Multiple values
     val.setValues("1800-01-01T10:30:15Z", "1920-04-15T18:15:45Z", "2012-11-30T20:30:15Z");
-    Iterator<Date> values2 = Arrays.asList(date1, date2, date3).iterator();
+    Iterator<Date> values2 = List.of(date1, date2, date3).iterator();
     func.streamDates(
         value -> {
           assertTrue(values2.hasNext());
-          assertEquals(values2.next(), value);
+          assertEquals(values2.next().toInstant(), value.toInstant());
         });
     assertFalse(values2.hasNext());
-    Iterator<Long> times2 =
-        Arrays.asList(date1.getTime(), date2.getTime(), date3.getTime()).iterator();
+    Iterator<Long> times2 = List.of(date1.getTime(), date2.getTime(), date3.getTime()).iterator();
     func.streamLongs(
         value -> {
           assertTrue(times2.hasNext());
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateParseFunctionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateParseFunctionTest.java
index 2249bb2dab8..0c9d8b273ca 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateParseFunctionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/DateParseFunctionTest.java
@@ -18,9 +18,9 @@ package org.apache.solr.analytics.function.mapping;
 
 import java.time.Instant;
 import java.time.format.DateTimeParseException;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.value.AnalyticsValueStream;
 import org.apache.solr.analytics.value.DateValue;
@@ -53,13 +53,13 @@ public class DateParseFunctionTest extends SolrTestCaseJ4 {
 
     // Value exists
     val.setValue(date1.getTime()).setExists(true);
-    assertEquals(date1, func.getDate());
+    assertEquals(date1.toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
     assertEquals(date1.getTime(), func.getLong());
     assertTrue(func.exists());
 
     val.setValue(date2.getTime()).setExists(true);
-    assertEquals(date2, func.getDate());
+    assertEquals(date2.toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
     assertEquals(date2.getTime(), func.getLong());
     assertTrue(func.exists());
@@ -104,13 +104,13 @@ public class DateParseFunctionTest extends SolrTestCaseJ4 {
 
     // Value exists
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
-    assertEquals(date1, func.getDate());
+    assertEquals(date1.toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
     assertEquals(date1.getTime(), func.getLong());
     assertTrue(func.exists());
 
     val.setValue("1920-04-15T18:15:45Z").setExists(true);
-    assertEquals(date2, func.getDate());
+    assertEquals(date2.toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
     assertEquals(date2.getTime(), func.getLong());
     assertTrue(func.exists());
@@ -132,23 +132,23 @@ public class DateParseFunctionTest extends SolrTestCaseJ4 {
     val.setValues();
     func.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // One value
     val.setValues(date1.getTime());
-    Iterator<Date> values1 = Arrays.asList(date1).iterator();
+    Iterator<Date> values1 = List.of(date1).iterator();
     func.streamDates(
         value -> {
           assertTrue(values1.hasNext());
-          assertEquals(values1.next(), value);
+          assertEquals(values1.next().toInstant(), value.toInstant());
         });
     assertFalse(values1.hasNext());
-    Iterator<Long> times1 = Arrays.asList(date1.getTime()).iterator();
+    Iterator<Long> times1 = List.of(date1.getTime()).iterator();
     func.streamLongs(
         value -> {
           assertTrue(times1.hasNext());
@@ -158,15 +158,14 @@ public class DateParseFunctionTest extends SolrTestCaseJ4 {
 
     // Multiple values
     val.setValues(date1.getTime(), date2.getTime(), date3.getTime());
-    Iterator<Date> values2 = Arrays.asList(date1, date2, date3).iterator();
+    Iterator<Date> values2 = List.of(date1, date2, date3).iterator();
     func.streamDates(
         value -> {
           assertTrue(values2.hasNext());
-          assertEquals(values2.next(), value);
+          assertEquals(values2.next().toInstant(), value.toInstant());
         });
     assertFalse(values2.hasNext());
-    Iterator<Long> times2 =
-        Arrays.asList(date1.getTime(), date2.getTime(), date3.getTime()).iterator();
+    Iterator<Long> times2 = List.of(date1.getTime(), date2.getTime(), date3.getTime()).iterator();
     func.streamLongs(
         value -> {
           assertTrue(times2.hasNext());
@@ -191,54 +190,54 @@ public class DateParseFunctionTest extends SolrTestCaseJ4 {
     val.setValues();
     func.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Incorrect value
     val.setValues("10:30:15Z");
     func.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     val.setValues("01-33T10:30:15Z");
     func.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     val.setValues("1800-01T30:30:15Z");
     func.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // One value
     val.setValues("1800-01-01T10:30:15Z");
-    Iterator<Date> values1 = Arrays.asList(date1).iterator();
+    Iterator<Date> values1 = List.of(date1).iterator();
     func.streamDates(
         value -> {
           assertTrue(values1.hasNext());
-          assertEquals(values1.next(), value);
+          assertEquals(values1.next().toInstant(), value.toInstant());
         });
     assertFalse(values1.hasNext());
-    Iterator<Long> times1 = Arrays.asList(date1.getTime()).iterator();
+    Iterator<Long> times1 = List.of(date1.getTime()).iterator();
     func.streamLongs(
         value -> {
           assertTrue(times1.hasNext());
@@ -248,15 +247,14 @@ public class DateParseFunctionTest extends SolrTestCaseJ4 {
 
     // Multiple values
     val.setValues("1800-01-01T10:30:15Z", "1920-04-15T18:15:45Z", "2012-11-30T20:30:15Z");
-    Iterator<Date> values2 = Arrays.asList(date1, date2, date3).iterator();
+    Iterator<Date> values2 = List.of(date1, date2, date3).iterator();
     func.streamDates(
         value -> {
           assertTrue(values2.hasNext());
-          assertEquals(values2.next(), value);
+          assertEquals(values2.next().toInstant(), value.toInstant());
         });
     assertFalse(values2.hasNext());
-    Iterator<Long> times2 =
-        Arrays.asList(date1.getTime(), date2.getTime(), date3.getTime()).iterator();
+    Iterator<Long> times2 = List.of(date1.getTime(), date2.getTime(), date3.getTime()).iterator();
     func.streamLongs(
         value -> {
           assertTrue(times2.hasNext());
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/IfFunctionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/IfFunctionTest.java
index 202ed4b4eeb..92a3c08e10d 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/IfFunctionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/IfFunctionTest.java
@@ -276,7 +276,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     assertTrue(func.exists());
 
     cond.setValue(false).setExists(true);
-    then.setValue(234l).setExists(true);
+    then.setValue(234L).setExists(true);
     els.setValue(-23423L).setExists(true);
     assertEquals(-23423L, func.getLong());
     assertTrue(func.exists());
@@ -537,7 +537,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     cond.setValue(false).setExists(true);
     then.setValue("abc123").setExists(true);
     els.setValue(new Date(3214)).setExists(true);
-    assertEquals(new Date(3214), func.getObject());
+    assertEquals(new Date(3214).toInstant(), ((Date) func.getObject()).toInstant());
     assertTrue(func.exists());
   }
 
@@ -558,7 +558,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamBooleans(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -566,7 +566,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(true, true, true, false);
     func.streamBooleans(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -575,7 +575,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(true, true, true, false);
     func.streamBooleans(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -583,7 +583,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamBooleans(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -627,7 +627,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamInts(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -635,7 +635,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(0, 1, -2, 3);
     func.streamInts(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -644,7 +644,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(0, 1, -2, 3);
     func.streamInts(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -652,7 +652,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamInts(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -696,7 +696,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -704,7 +704,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(0L, 1L, -2L, 3L);
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -713,7 +713,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(0L, 1L, -2L, 3L);
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -721,7 +721,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -765,7 +765,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamFloats(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -773,7 +773,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(.1111F, -.22222F, .333F);
     func.streamFloats(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -782,7 +782,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(.1111F, -.22222F, .333F);
     func.streamFloats(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -790,7 +790,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamFloats(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -834,7 +834,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamDoubles(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -842,7 +842,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(.1111, -.22222, .333);
     func.streamDoubles(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -851,7 +851,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(.1111, -.22222, .333);
     func.streamDoubles(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -859,7 +859,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamDoubles(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -907,7 +907,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -915,7 +915,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues("2023-11-01T20:30:15Z", "1931-03-16T18:15:45Z");
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -924,7 +924,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues("2023-11-01T20:30:15Z", "1931-03-16T18:15:45Z");
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -932,7 +932,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamLongs(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -977,7 +977,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamStrings(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -985,7 +985,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues("this", "is", "a", "sentence");
     func.streamStrings(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -994,7 +994,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues("this", "is", "a", "sentence");
     func.streamStrings(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -1002,7 +1002,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamStrings(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
@@ -1044,7 +1044,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamObjects(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setExists(false);
@@ -1052,7 +1052,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(324923.0234F, 123, Boolean.TRUE, "if statement");
     func.streamObjects(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Result doesn't exist
@@ -1061,7 +1061,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues(324923.0234F, 123, Boolean.TRUE, "if statement");
     func.streamObjects(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     cond.setValue(false).setExists(true);
@@ -1069,7 +1069,7 @@ public class IfFunctionTest extends SolrTestCaseJ4 {
     els.setValues();
     func.streamObjects(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Values exist
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/ReplaceFunctionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/ReplaceFunctionTest.java
index 5bb04f09021..4f732bcdbea 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/ReplaceFunctionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/ReplaceFunctionTest.java
@@ -549,11 +549,11 @@ public class ReplaceFunctionTest extends SolrTestCaseJ4 {
     comp.setValue(1234).setExists(true);
 
     fill.setValue("not used").setExists(true);
-    assertEquals(new Date(1234), func.getObject());
+    assertEquals(new Date(1234).toInstant(), ((Date) func.getObject()).toInstant());
     assertTrue(func.exists());
 
     fill.setExists(false);
-    assertEquals(new Date(1234), func.getObject());
+    assertEquals(new Date(1234).toInstant(), ((Date) func.getObject()).toInstant());
     assertTrue(func.exists());
 
     // Comp == Val
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/TopFunctionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/TopFunctionTest.java
index 3f7ef037d8f..68d9a790219 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/TopFunctionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/function/mapping/TopFunctionTest.java
@@ -159,7 +159,8 @@ public class TopFunctionTest extends SolrTestCaseJ4 {
 
     // One exists
     val.setValues("1950-05-03T10:30:50Z");
-    assertEquals(Date.from(Instant.parse("1950-05-03T10:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("1950-05-03T10:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
 
     // Both exist
@@ -168,7 +169,8 @@ public class TopFunctionTest extends SolrTestCaseJ4 {
         "2200-01-01T10:00:50Z",
         "1800-12-31T11:30:50Z",
         "1930-05-020T10:45:50Z");
-    assertEquals(Date.from(Instant.parse("2200-01-01T10:00:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("2200-01-01T10:00:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
   }
 
@@ -370,7 +372,8 @@ public class TopFunctionTest extends SolrTestCaseJ4 {
     val2.setValue("1950-05-03T10:30:50Z").setExists(true);
     val3.setValue("0000-05-03T10:30:50Z").setExists(false);
     val4.setValue("1850-05-03T10:30:50Z").setExists(true);
-    assertEquals(Date.from(Instant.parse("1950-05-03T10:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("1950-05-03T10:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
 
     // All exist values, one value
@@ -378,7 +381,8 @@ public class TopFunctionTest extends SolrTestCaseJ4 {
     val2.setValue("1950-05-03T10:30:50Z").setExists(true);
     val3.setValue("1700-05-03T10:30:50Z").setExists(true);
     val4.setValue("1850-05-03T10:30:50Z").setExists(true);
-    assertEquals(Date.from(Instant.parse("2200-05-03T10:30:50Z")), func.getDate());
+    assertEquals(
+        Date.from(Instant.parse("2200-05-03T10:30:50Z")).toInstant(), func.getDate().toInstant());
     assertTrue(func.exists());
   }
 
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyExpressionTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyExpressionTest.java
index 668bfb630fe..3ef90232559 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyExpressionTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/expression/LegacyExpressionTest.java
@@ -168,8 +168,8 @@ public class LegacyExpressionTest extends LegacyAbstractAnalyticsTest {
     String dateMath = (String) getStatResult("dmr", "dmme", VAL_TYPE.DATE);
     assertEquals(
         getRawResponse(),
-        new Date(Instant.parse(dateMath).toEpochMilli()),
-        dateMathParser.parseMath(math));
+        new Date(Instant.parse(dateMath).toEpochMilli()).toInstant(),
+        dateMathParser.parseMath(math).toInstant());
 
     math = (String) getStatResult("dmr", "cma", VAL_TYPE.STRING);
     dateMathParser = new DateMathParser();
@@ -179,8 +179,8 @@ public class LegacyExpressionTest extends LegacyAbstractAnalyticsTest {
     dateMath = (String) getStatResult("dmr", "dmma", VAL_TYPE.DATE);
     assertEquals(
         getRawResponse(),
-        new Date(Instant.parse(dateMath).toEpochMilli()),
-        dateMathParser.parseMath(math));
+        new Date(Instant.parse(dateMath).toEpochMilli()).toInstant(),
+        dateMathParser.parseMath(math).toInstant());
   }
 
   @Test
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasCloudTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasCloudTest.java
index 92b21c21904..d0002ad5ad8 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasCloudTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasCloudTest.java
@@ -236,29 +236,25 @@ public class LegacyFieldFacetExtrasCloudTest extends LegacyAbstractAnalyticsFace
     NamedList<Object> response = queryLegacyCloudAnalytics(params);
     String responseStr = response.toString();
 
-    Collection<Double> lon = getValueList(response, "sr", "fieldFacets", "long_ld", "mean", false);
-    ArrayList<Double> longTest = calculateFacetedNumberStat(intLongTestStart, "mean");
+    List<Double> lon = getValueList(response, "sr", "fieldFacets", "long_ld", "mean", false);
+    List<Double> longTest = calculateFacetedNumberStat(intLongTestStart, "mean");
     Collections.sort(longTest);
     assertEquals(responseStr, longTest, lon);
 
-    Collection<Double> flo =
-        getValueList(response, "sr", "fieldFacets", "float_fd", "median", false);
-    ArrayList<Double> floatTest = calculateFacetedNumberStat(intFloatTestStart, "median");
-    Collections.sort(floatTest, Collections.reverseOrder());
+    List<Double> flo = getValueList(response, "sr", "fieldFacets", "float_fd", "median", false);
+    List<Double> floatTest = calculateFacetedNumberStat(intFloatTestStart, "median");
+    floatTest.sort(Collections.reverseOrder());
     assertEquals(responseStr, floatTest, flo);
 
-    Collection<Long> doub =
-        getValueList(response, "sr", "fieldFacets", "double_dd", "count", false);
-    ArrayList<Long> doubleTest =
-        (ArrayList<Long>) calculateFacetedStat(intDoubleTestStart, "count");
+    List<Long> doub = getValueList(response, "sr", "fieldFacets", "double_dd", "count", false);
+    List<Long> doubleTest = (List<Long>) calculateFacetedStat(intDoubleTestStart, "count");
     Collections.sort(doubleTest);
     assertEquals(responseStr, doubleTest, doub);
 
-    Collection<Integer> string =
+    List<Integer> string =
         getValueList(response, "sr", "fieldFacets", "string_sd", "percentile_20", false);
-    ArrayList<Integer> stringTest =
-        (ArrayList<Integer>) calculateFacetedStat(intStringTestStart, "perc_20");
-    Collections.sort(stringTest, Collections.reverseOrder());
+    List<Integer> stringTest = (List<Integer>) calculateFacetedStat(intStringTestStart, "perc_20");
+    stringTest.sort(Collections.reverseOrder());
     assertEquals(responseStr, stringTest, string);
   }
 }
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasTest.java
index 5b400923dfc..f22921a4c44 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/legacy/facet/LegacyFieldFacetExtrasTest.java
@@ -159,26 +159,24 @@ public class LegacyFieldFacetExtrasTest extends LegacyAbstractAnalyticsFacetTest
   @SuppressWarnings("unchecked")
   @Test
   public void sortTest() throws Exception {
-    Collection<Double> lon = getDoubleList("sr", "fieldFacets", "long_ld", "double", "mean");
-    ArrayList<Double> longTest = calculateNumberStat(intLongTestStart, "mean");
+    List<Double> lon = getDoubleList("sr", "fieldFacets", "long_ld", "double", "mean");
+    List<Double> longTest = calculateNumberStat(intLongTestStart, "mean");
     Collections.sort(longTest);
     assertEquals(getRawResponse(), longTest, lon);
 
-    Collection<Double> flo = getDoubleList("sr", "fieldFacets", "float_fd", "double", "median");
-    ArrayList<Double> floatTest = calculateNumberStat(intFloatTestStart, "median");
-    Collections.sort(floatTest, Collections.reverseOrder());
+    List<Double> flo = getDoubleList("sr", "fieldFacets", "float_fd", "double", "median");
+    List<Double> floatTest = calculateNumberStat(intFloatTestStart, "median");
+    floatTest.sort(Collections.reverseOrder());
     assertEquals(getRawResponse(), floatTest, flo);
 
-    Collection<Long> doub = getLongList("sr", "fieldFacets", "double_dd", "long", "count");
-    ArrayList<Long> doubleTest = (ArrayList<Long>) calculateStat(intDoubleTestStart, "count");
+    List<Long> doub = getLongList("sr", "fieldFacets", "double_dd", "long", "count");
+    List<Long> doubleTest = (List<Long>) calculateStat(intDoubleTestStart, "count");
     Collections.sort(doubleTest);
     assertEquals(getRawResponse(), doubleTest, doub);
 
-    Collection<Integer> string =
-        getIntegerList("sr", "fieldFacets", "string_sd", "int", "percentile_20");
-    ArrayList<Integer> stringTest =
-        (ArrayList<Integer>) calculateStat(intStringTestStart, "perc_20");
-    Collections.sort(stringTest, Collections.reverseOrder());
+    List<Integer> string = getIntegerList("sr", "fieldFacets", "string_sd", "int", "percentile_20");
+    List<Integer> stringTest = (List<Integer>) calculateStat(intStringTestStart, "perc_20");
+    stringTest.sort(Collections.reverseOrder());
     assertEquals(getRawResponse(), stringTest, string);
   }
 }
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueStreamTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueStreamTest.java
index b3db2cb95f9..77da84abc41 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueStreamTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueStreamTest.java
@@ -41,7 +41,7 @@ public class CastingDateValueStreamTest extends SolrTestCaseJ4 {
     val.setValues();
     casted.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Multiple Values
@@ -50,7 +50,7 @@ public class CastingDateValueStreamTest extends SolrTestCaseJ4 {
     casted.streamDates(
         value -> {
           assertTrue(values.hasNext());
-          assertEquals(values.next(), value);
+          assertEquals(values.next().toInstant(), value.toInstant());
         });
     assertFalse(values.hasNext());
   }
@@ -66,7 +66,7 @@ public class CastingDateValueStreamTest extends SolrTestCaseJ4 {
     val.setValues();
     casted.streamStrings(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Multiple Values
@@ -96,7 +96,7 @@ public class CastingDateValueStreamTest extends SolrTestCaseJ4 {
     val.setValues();
     casted.streamObjects(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Multiple Values
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueTest.java
index 99bd9c1dcb3..734f534fab3 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/value/CastingDateValueTest.java
@@ -21,6 +21,7 @@ import java.time.format.DateTimeParseException;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.Iterator;
+import java.util.List;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.analytics.value.AnalyticsValueStream.ExpressionType;
 import org.apache.solr.analytics.value.FillableTestValue.TestDateValue;
@@ -38,7 +39,7 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     DateValue casted = (DateValue) val;
 
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
-    assertEquals(date, casted.getDate());
+    assertEquals(date.toInstant(), casted.getDate().toInstant());
     assertTrue(casted.exists());
   }
 
@@ -63,7 +64,7 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     AnalyticsValue casted = (AnalyticsValue) val;
 
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
-    assertEquals(date, casted.getObject());
+    assertEquals(date.toInstant(), ((Date) casted.getObject()).toInstant());
     assertTrue(casted.exists());
   }
 
@@ -79,7 +80,7 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     val.setExists(false);
     casted.streamDates(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Multiple Values
@@ -88,7 +89,7 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     casted.streamDates(
         value -> {
           assertTrue(values.hasNext());
-          assertEquals(values.next(), value);
+          assertEquals(values.next().toInstant(), value.toInstant());
         });
     assertFalse(values.hasNext());
   }
@@ -104,7 +105,7 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     val.setExists(false);
     casted.streamStrings(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Multiple Values
@@ -130,12 +131,12 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     val.setExists(false);
     casted.streamObjects(
         value -> {
-          assertTrue("There should be no values to stream", false);
+          fail("There should be no values to stream");
         });
 
     // Multiple Values
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
-    Iterator<Object> values = Arrays.<Object>asList(date).iterator();
+    Iterator<Object> values = List.<Object>of(date).iterator();
     casted.streamObjects(
         value -> {
           assertTrue(values.hasNext());
@@ -152,7 +153,7 @@ public class CastingDateValueTest extends SolrTestCaseJ4 {
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
     AnalyticsValueStream conv = val.convertToConstant();
     assertTrue(conv instanceof ConstantDateValue);
-    assertEquals(date, ((ConstantDateValue) conv).getDate());
+    assertEquals(date.toInstant(), ((ConstantDateValue) conv).getDate().toInstant());
 
     val = new TestDateValue(ExpressionType.FIELD);
     val.setValue("1800-01-01T10:30:15Z").setExists(true);
diff --git a/solr/modules/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java b/solr/modules/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java
index 470b7419a3d..007c171be8e 100644
--- a/solr/modules/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java
+++ b/solr/modules/analytics/src/test/org/apache/solr/analytics/value/ConstantValueTest.java
@@ -65,8 +65,8 @@ public class ConstantValueTest extends SolrTestCaseJ4 {
     uncasted = ConstantValue.creatorFunction.apply("1800-01-01T10:30:15.33Z");
     assertTrue(uncasted instanceof ConstantDateValue);
     assertEquals(
-        Date.from(Instant.parse("1800-01-01T10:30:15.33Z")),
-        ((ConstantDateValue) uncasted).getDate());
+        Instant.parse("1800-01-01T10:30:15.33Z"),
+        ((ConstantDateValue) uncasted).getDate().toInstant());
   }
 
   @Test
@@ -334,9 +334,9 @@ public class ConstantValueTest extends SolrTestCaseJ4 {
 
     assertTrue(val.exists());
     assertEquals(date.getTime(), val.getLong());
-    assertEquals(date, val.getDate());
+    assertEquals(date.toInstant(), val.getDate().toInstant());
     assertEquals("1800-01-01T10:30:15Z", val.getString());
-    assertEquals(date, val.getObject());
+    assertEquals(date.toInstant(), ((Date) val.getObject()).toInstant());
 
     TestIntValue counter = new TestIntValue();
     counter.setValue(0);
@@ -349,7 +349,7 @@ public class ConstantValueTest extends SolrTestCaseJ4 {
     counter.setValue(0);
     val.streamDates(
         value -> {
-          assertEquals(date, value);
+          assertEquals(date.toInstant(), value.toInstant());
           assertEquals(0, counter.getInt());
           counter.setValue(1);
         });
@@ -363,7 +363,7 @@ public class ConstantValueTest extends SolrTestCaseJ4 {
     counter.setValue(0);
     val.streamObjects(
         value -> {
-          assertEquals(date, value);
+          assertEquals(date.toInstant(), ((Date) value).toInstant());
           assertEquals(0, counter.getInt());
           counter.setValue(1);
         });
diff --git a/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/SolrContentHandler.java b/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/SolrContentHandler.java
index 43d0de9f7d5..9edba0e925e 100644
--- a/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/SolrContentHandler.java
+++ b/solr/modules/extraction/src/java/org/apache/solr/handler/extraction/SolrContentHandler.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import org.apache.solr.common.SolrInputDocument;
 import org.apache.solr.common.params.SolrParams;
@@ -212,7 +213,7 @@ public class SolrContentHandler extends DefaultHandler implements ExtractingPara
     // you?
     if (sf == null
         && unknownFieldPrefix.length() == 0
-        && name == TikaMetadataKeys.RESOURCE_NAME_KEY) {
+        && Objects.equals(name, TikaMetadataKeys.RESOURCE_NAME_KEY)) {
       return;
     }
 
diff --git a/solr/modules/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingQuery.java b/solr/modules/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingQuery.java
index f34ee1663b7..559d65edc8f 100644
--- a/solr/modules/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingQuery.java
+++ b/solr/modules/ltr/src/java/org/apache/solr/ltr/interleaving/LTRInterleavingQuery.java
@@ -42,7 +42,8 @@ public class LTRInterleavingQuery extends LTRQuery {
 
   @Override
   public int hashCode() {
-    return 31 * classHash() + (mainQuery.hashCode() + rerankingQueries.hashCode() + reRankDocs);
+    return 31 * classHash()
+        + (mainQuery.hashCode() + Arrays.hashCode(rerankingQueries) + reRankDocs);
   }
 
   @Override
@@ -52,7 +53,7 @@ public class LTRInterleavingQuery extends LTRQuery {
 
   private boolean equalsTo(LTRInterleavingQuery other) {
     return (mainQuery.equals(other.mainQuery)
-        && rerankingQueries.equals(other.rerankingQueries)
+        && Arrays.equals(rerankingQueries, other.rerankingQueries)
         && (reRankDocs == other.reRankDocs));
   }
 
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/ShortestPathStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/ShortestPathStream.java
index eebdc218eba..b1bd5632544 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/ShortestPathStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/graph/ShortestPathStream.java
@@ -21,6 +21,7 @@ import static org.apache.solr.common.params.CommonParams.SORT;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -314,7 +315,8 @@ public class ShortestPathStream extends TupleStream implements Expressible {
     ModifiableSolrParams mParams = new ModifiableSolrParams(queryParams);
     child.setExpression(
         mParams.getMap().entrySet().stream()
-            .map(e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), e.getValue()))
+            .map(
+                e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), Arrays.toString(e.getValue())))
             .collect(Collectors.joining(",")));
     explanation.addChild(child);
 
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ResultSetMetaDataImpl.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ResultSetMetaDataImpl.java
index 960c7579b90..319a699edc6 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ResultSetMetaDataImpl.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/sql/ResultSetMetaDataImpl.java
@@ -74,7 +74,7 @@ class ResultSetMetaDataImpl implements ResultSetMetaData {
 
   @Override
   public int isNullable(int column) throws SQLException {
-    return 0;
+    return ResultSetMetaData.columnNoNulls;
   }
 
   @Override
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 c2bcca77539..0c552a77eb6 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
@@ -233,7 +233,10 @@ public class CloudSolrStream extends TupleStream implements Expressible {
       ModifiableSolrParams mParams = new ModifiableSolrParams(params);
       child.setExpression(
           mParams.getMap().entrySet().stream()
-              .map(e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), e.getValue()))
+              .map(
+                  e ->
+                      String.format(
+                          Locale.ROOT, "%s=%s", e.getKey(), Arrays.toString(e.getValue())))
               .collect(Collectors.joining(",")));
     }
     explanation.addChild(child);
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 c17efa9a18a..4b39078dcd8 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
@@ -22,6 +22,7 @@ import static org.apache.solr.common.params.CommonParams.SORT;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
@@ -231,7 +232,10 @@ public class DeepRandomStream extends TupleStream implements Expressible {
       ModifiableSolrParams mParams = new ModifiableSolrParams(params);
       child.setExpression(
           mParams.getMap().entrySet().stream()
-              .map(e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), e.getValue()))
+              .map(
+                  e ->
+                      String.format(
+                          Locale.ROOT, "%s=%s", e.getKey(), Arrays.toString(e.getValue())))
               .collect(Collectors.joining(",")));
     }
     explanation.addChild(child);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/Facet2DStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/Facet2DStream.java
index 344ffcf9f0c..fbba51a9305 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/Facet2DStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/Facet2DStream.java
@@ -83,7 +83,8 @@ public class Facet2DStream extends TupleStream implements Expressible {
       String[] strDimensions = dimensions.split(",");
       if (strDimensions.length != 2) {
         throw new IOException(
-            String.format(Locale.ROOT, "invalid expression %s - two dimension values expected"));
+            String.format(
+                Locale.ROOT, "two dimension values expected. %s found", strDimensions.length));
       }
       this.dimensionX = Integer.parseInt(strDimensions[0]);
       this.dimensionY = Integer.parseInt(strDimensions[1]);
@@ -157,8 +158,7 @@ public class Facet2DStream extends TupleStream implements Expressible {
           String.format(
               Locale.ROOT,
               "invalid expression %s - x and y buckets expected. eg. 'x=\"name\"'",
-              expression,
-              collectionName));
+              expression));
     }
 
     Metric metric = null;
@@ -179,7 +179,8 @@ public class Facet2DStream extends TupleStream implements Expressible {
             ((StreamExpressionValue) dimensionsExpression.getParameter()).getValue().split(",");
         if (strDimensions.length != 2) {
           throw new IOException(
-              String.format(Locale.ROOT, "invalid expression %s - two dimension values expected"));
+              String.format(
+                  Locale.ROOT, "two dimension values expected. Found %s", strDimensions.length));
         }
         dimensionX = Integer.parseInt(strDimensions[0].trim());
         dimensionY = Integer.parseInt(strDimensions[1].trim());
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
index 948f60ac797..9a702894fb8 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
@@ -211,8 +211,7 @@ public class FacetStream extends TupleStream implements Expressible, ParallelMet
           String.format(
               Locale.ROOT,
               "invalid expression %s - at least one bucket expected. eg. 'buckets=\"name\"'",
-              expression,
-              collectionName));
+              expression));
     }
 
     // Construct the metrics
@@ -234,15 +233,14 @@ public class FacetStream extends TupleStream implements Expressible, ParallelMet
       bucketSortString = ((StreamExpressionValue) bucketSortExpression.getParameter()).getValue();
       if (bucketSortString.contains("(")
           && metricExpressions.size() == 0
-          && (!bucketSortExpression.equals("count(*) desc")
-              && !bucketSortExpression.equals("count(*) asc"))) {
+          && (!bucketSortString.equals("count(*) desc")
+              && !bucketSortString.equals("count(*) asc"))) {
         // Attempting bucket sort on a metric that is not going to be calculated.
         throw new IOException(
             String.format(
                 Locale.ROOT,
                 "invalid expression %s - the bucketSort is being performed on a metric that is not being calculated.",
-                expression,
-                collectionName));
+                expression));
       }
     }
 
@@ -253,8 +251,7 @@ public class FacetStream extends TupleStream implements Expressible, ParallelMet
           String.format(
               Locale.ROOT,
               "invalid expression %s - at least one bucket sort expected. eg. 'bucketSorts=\"name asc\"'",
-              expression,
-              collectionName));
+              expression));
     }
 
     boolean refine = false;
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/HashJoinStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/HashJoinStream.java
index e1172f1fbb7..47ff6477e8c 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/HashJoinStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/HashJoinStream.java
@@ -137,7 +137,7 @@ public class HashJoinStream extends TupleStream implements Expressible {
         throw new IOException(
             String.format(
                 Locale.ROOT,
-                "Invalid expression %s - invalid 'on' parameter - expecting 1 or more instances if 'field' or 'field=hashedField' but found '%s'",
+                "Invalid expression - invalid 'on' parameter - expecting 1 or more instances if 'field' or 'field=hashedField' but found '%s'",
                 hasher));
       }
     }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/JDBCStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/JDBCStream.java
index 8bba1047938..90de36458e9 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/JDBCStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/JDBCStream.java
@@ -594,7 +594,7 @@ public class JDBCStream extends TupleStream implements Expressible {
                   throw new SQLException(
                       String.format(
                           Locale.ROOT,
-                          "Encountered a clob of length #%l in column '%s' (col #%d).  Max supported length is #%i.",
+                          "Encountered a clob of length #%d in column '%s' (col #%d).  Max supported length is #%d.",
                           length,
                           columnName,
                           columnNumber,
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/PlotStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/PlotStream.java
index 607c3932939..a0f03c8d019 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/PlotStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/PlotStream.java
@@ -82,7 +82,7 @@ public class PlotStream extends TupleStream implements Expressible {
         throw new IOException(
             String.format(
                 Locale.ROOT,
-                "Invalid expression %s - only string, evaluator, or stream named parameters are supported, but param %d is none of those",
+                "Invalid expression %s - only string, evaluator, or stream named parameters are supported, but param %s is none of those",
                 expression,
                 name));
       }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ShuffleStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ShuffleStream.java
index 77e9e45144a..10dc68a77c0 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ShuffleStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/ShuffleStream.java
@@ -17,6 +17,7 @@
 package org.apache.solr.client.solrj.io.stream;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Locale;
@@ -180,7 +181,10 @@ public class ShuffleStream extends CloudSolrStream implements Expressible {
       ModifiableSolrParams mParams = new ModifiableSolrParams(params);
       child.setExpression(
           mParams.getMap().entrySet().stream()
-              .map(e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), e.getValue()))
+              .map(
+                  e ->
+                      String.format(
+                          Locale.ROOT, "%s=%s", e.getKey(), Arrays.toString(e.getValue())))
               .collect(Collectors.joining(",")));
     }
     explanation.addChild(child);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
index 717f5fd3cbb..c55504c653e 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/SqlStream.java
@@ -17,6 +17,7 @@
 package org.apache.solr.client.solrj.io.stream;
 
 import java.io.IOException;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 import java.util.Locale;
@@ -163,7 +164,10 @@ public class SqlStream extends TupleStream implements Expressible {
       ModifiableSolrParams mParams = new ModifiableSolrParams(params);
       child.setExpression(
           mParams.getMap().entrySet().stream()
-              .map(e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), e.getValue()))
+              .map(
+                  e ->
+                      String.format(
+                          Locale.ROOT, "%s=%s", e.getKey(), Arrays.toString(e.getValue())))
               .collect(Collectors.joining(",")));
     }
     explanation.addChild(child);
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
index bb9a7f22228..ca9a404543f 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TextLogitStream.java
@@ -494,7 +494,7 @@ public class TextLogitStream extends TupleStream implements Expressible {
             throw new IOException(
                 String.format(
                     Locale.ROOT,
-                    "invalid expression %s - the number of weights must be %d, found %d",
+                    "invalid expression - the number of weights must be %d, found %d",
                     terms.size() + 1,
                     weights.size()));
           }
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
index b625d38ec7c..5564e38bd53 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TopicStream.java
@@ -24,6 +24,7 @@ import static org.apache.solr.common.params.CommonParams.VERSION_FIELD;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -274,7 +275,10 @@ public class TopicStream extends CloudSolrStream implements Expressible {
       ModifiableSolrParams mParams = new ModifiableSolrParams(params);
       child.setExpression(
           mParams.getMap().entrySet().stream()
-              .map(e -> String.format(Locale.ROOT, "%s=%s", e.getKey(), e.getValue()))
+              .map(
+                  e ->
+                      String.format(
+                          Locale.ROOT, "%s=%s", e.getKey(), Arrays.toString(e.getValue())))
               .collect(Collectors.joining(",")));
       explanation.addChild(child);
     }
@@ -282,7 +286,7 @@ public class TopicStream extends CloudSolrStream implements Expressible {
     {
       // child 2 is a place where we store and read checkpoint info from
       StreamExplanation child = new StreamExplanation(getStreamNodeId() + "-checkpoint");
-      child.setFunctionName(String.format(Locale.ROOT, "solr (checkpoint store)"));
+      child.setFunctionName("solr (checkpoint store)");
       child.setImplementingClass("Solr/Lucene");
       child.setExpressionType(ExpressionType.DATASTORE);
       child.setExpression(
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
index feecd952c99..a755932bac4 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/io/stream/TupStream.java
@@ -81,7 +81,7 @@ public class TupStream extends TupleStream implements Expressible {
         throw new IOException(
             String.format(
                 Locale.ROOT,
-                "Invalid expression %s - only string, evaluator, or stream named parameters are supported, but param %d is none of those",
+                "Invalid expression %s - only string, evaluator, or stream named parameters are supported, but param %s is none of those",
                 expression,
                 name));
       }
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
index 23210417a5a..697b3d56998 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JavaBinCodec.java
@@ -1195,7 +1195,7 @@ public class JavaBinCodec implements PushWriter {
       writeTag(NULL);
       return;
     }
-    Integer idx = stringsMap == null ? null : stringsMap.get(s);
+    Integer idx = stringsMap == null ? null : stringsMap.get(s.toString());
     if (idx == null) idx = 0;
     writeTag(EXTERN_STRING, idx);
     if (idx == 0) {
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JsonTextWriter.java b/solr/solrj/src/java/org/apache/solr/common/util/JsonTextWriter.java
index 19a424856a8..12fe925ea1c 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JsonTextWriter.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JsonTextWriter.java
@@ -22,6 +22,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import org.apache.solr.common.IteratorWriter;
 import org.apache.solr.common.MapWriter;
 
@@ -293,15 +294,15 @@ public interface JsonTextWriter extends TextWriter {
     String namedListStyle = getNamedListStyle();
     if (val instanceof SimpleOrderedMap) {
       writeNamedListAsMapWithDups(name, val);
-    } else if (namedListStyle == JSON_NL_FLAT) {
+    } else if (Objects.equals(namedListStyle, JSON_NL_FLAT)) {
       writeNamedListAsFlat(name, val);
-    } else if (namedListStyle == JSON_NL_MAP) {
+    } else if (Objects.equals(namedListStyle, JSON_NL_MAP)) {
       writeNamedListAsMapWithDups(name, val);
-    } else if (namedListStyle == JSON_NL_ARROFARR) {
+    } else if (Objects.equals(namedListStyle, JSON_NL_ARROFARR)) {
       writeNamedListAsArrArr(name, val);
-    } else if (namedListStyle == JSON_NL_ARROFMAP) {
+    } else if (Objects.equals(namedListStyle, JSON_NL_ARROFMAP)) {
       writeNamedListAsArrMap(name, val);
-    } else if (namedListStyle == JSON_NL_ARROFNTV) {
+    } else if (Objects.equals(namedListStyle, JSON_NL_ARROFNTV)) {
       throw new UnsupportedOperationException(
           namedListStyle + " namedListStyle must only be used with ArrayOfNameTypeValueJSONWriter");
     }
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
index ca8d1bcb182..576bfbaa771 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/Utils.java
@@ -631,7 +631,7 @@ public class Utils {
                   public MapWriter.EntryWriter put(CharSequence k, Object v) {
                     if (result[0] != null) return this;
                     if (idx < 0) {
-                      if (k.equals(key)) result[0] = v;
+                      if (key.contentEquals(k)) result[0] = v;
                     } else {
                       if (++count == idx) result[0] = new MapWriterEntry<>(k, v);
                     }
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
index 32312a42859..9111169fd5b 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/SolrQueryTest.java
@@ -297,9 +297,9 @@ public class SolrQueryTest extends SolrTestCase {
   public void testFacetDateRange() {
     SolrQuery q = new SolrQuery("dog");
     Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.UK);
-    calendar.set(2010, 1, 1);
+    calendar.set(2010, Calendar.FEBRUARY, 1);
     Date start = calendar.getTime();
-    calendar.set(2011, 1, 1);
+    calendar.set(2011, Calendar.FEBRUARY, 1);
     Date end = calendar.getTime();
     q.addDateRangeFacet("field", start, end, "+1MONTH");
     assertEquals("true", q.get(FacetParams.FACET));
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
index d6161adc132..82810416b8e 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudHttp2SolrClientTest.java
@@ -372,12 +372,13 @@ public class CloudHttp2SolrClientTest extends SolrCloudTestCase {
     }
 
     List<String> sameShardRoutes = Lists.newArrayList();
+    List<Slice> expectedSlicesList = List.copyOf(expectedSlices);
     sameShardRoutes.add("0");
     for (int i = 1; i < n; i++) {
       String shardKey = Integer.toString(i);
-      Collection<Slice> slices = router.getSearchSlicesSingle(shardKey, null, col);
+      List<Slice> slices = List.copyOf(router.getSearchSlicesSingle(shardKey, null, col));
       log.info("Expected Slices {}", slices);
-      if (expectedSlices.equals(slices)) {
+      if (expectedSlicesList.equals(slices)) {
         sameShardRoutes.add(shardKey);
       }
     }
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
index f13a542b9e0..d9107e23afe 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/impl/CloudSolrClientTest.java
@@ -373,13 +373,14 @@ public class CloudSolrClientTest extends SolrCloudTestCase {
       n = random().nextInt(9) + 2;
     }
 
+    List<Slice> expectedSlicesList = List.copyOf(expectedSlices);
     List<String> sameShardRoutes = Lists.newArrayList();
     sameShardRoutes.add("0");
     for (int i = 1; i < n; i++) {
       String shardKey = Integer.toString(i);
-      Collection<Slice> slices = router.getSearchSlicesSingle(shardKey, null, col);
+      List<Slice> slices = List.copyOf(router.getSearchSlicesSingle(shardKey, null, col));
       log.info("Expected Slices {}", slices);
-      if (expectedSlices.equals(slices)) {
+      if (expectedSlicesList.equals(slices)) {
         sameShardRoutes.add(shardKey);
       }
     }
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
index 15f094b595c..e1f80b659bc 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/StreamingTest.java
@@ -1118,16 +1118,16 @@ public class StreamingTest extends SolrCloudTestCase {
       avgf = tuple.getDouble("avg(a_f)");
       count = tuple.getDouble("count(*)");
 
-      assertTrue(bucket.equals("hello3"));
-      assertTrue(sumi.doubleValue() == 38.0D);
-      assertTrue(sumf.doubleValue() == 26.0D);
-      assertTrue(mini.doubleValue() == 3.0D);
-      assertTrue(minf.doubleValue() == 3.0D);
-      assertTrue(maxi.doubleValue() == 13.0D);
-      assertTrue(maxf.doubleValue() == 9.0D);
-      assertTrue(avgi.doubleValue() == 9.5D);
-      assertTrue(avgf.doubleValue() == 6.5D);
-      assertTrue(count.doubleValue() == 4);
+      assertEquals("hello3", bucket);
+      assertEquals(38.0D, sumi.doubleValue(), 0.01);
+      assertEquals(26.0D, sumf.doubleValue(), 0.01);
+      assertEquals(3.0D, mini.doubleValue(), 0.01);
+      assertEquals(3.0D, minf.doubleValue(), 0.01);
+      assertEquals(13.0D, maxi.doubleValue(), 0.01);
+      assertEquals(9.0D, maxf.doubleValue(), 0.01);
+      assertEquals(9.5D, avgi.doubleValue(), 0.01);
+      assertEquals(6.5D, avgf.doubleValue(), 0.01);
+      assertEquals(4, count.doubleValue(), 0.01);
 
       tuple = tuples.get(2);
       bucket = tuple.getString("a_s");
@@ -1819,15 +1819,15 @@ public class StreamingTest extends SolrCloudTestCase {
       assert (tuples.size() == 3);
       tuple = tuples.get(0);
       bucket = tuple.getString("a_s");
-      assertTrue(bucket.equals("hello0"));
+      assertEquals("hello0", bucket);
 
       tuple = tuples.get(1);
       bucket = tuple.getString("a_s");
-      assertTrue(bucket.equals("hello3"));
+      assertEquals("hello3", bucket);
 
       tuple = tuples.get(2);
       bucket = tuple.getString("a_s");
-      assertTrue(bucket.equals("hello4"));
+      assertEquals("hello4", bucket);
 
       // Test will null value in the grouping field
       new UpdateRequest()
@@ -1940,7 +1940,7 @@ public class StreamingTest extends SolrCloudTestCase {
       count = tuples.size();
       if (count > 0) {
         Tuple t = tuples.get(0);
-        assertTrue(t.getLong("id") == 50000000);
+        assertEquals(50000000, (long) t.getLong("id"));
       } else {
         System.out.println("###### Waiting for checkpoint #######:" + count);
       }
@@ -2865,59 +2865,51 @@ public class StreamingTest extends SolrCloudTestCase {
       assertEquals(
           "MV should be returned for l_multi", 16, tuple.getLongs("l_multi").get(1).longValue());
 
+      assertEquals("floats should be returned", 1.7, tuple.getDouble("f_sing"), 0.001);
       assertEquals(
-          "floats should be returned", 1.7, tuple.getDouble("f_sing").doubleValue(), 0.001);
-      assertEquals(
-          "MV should be returned for f_multi",
-          1.8,
-          tuple.getDoubles("f_multi").get(0).doubleValue(),
-          0.001);
+          "MV should be returned for f_multi", 1.8, tuple.getDoubles("f_multi").get(0), 0.001);
       assertEquals(
-          "MV should be returned for f_multi",
-          1.9,
-          tuple.getDoubles("f_multi").get(1).doubleValue(),
-          0.001);
+          "MV should be returned for f_multi", 1.9, tuple.getDoubles("f_multi").get(1), 0.001);
 
+      assertEquals("doubles should be returned", 1.2, tuple.getDouble("d_sing"), 0.001);
       assertEquals(
-          "doubles should be returned", 1.2, tuple.getDouble("d_sing").doubleValue(), 0.001);
+          "MV should be returned for d_multi", 1.21, tuple.getDoubles("d_multi").get(0), 0.001);
       assertEquals(
-          "MV should be returned for d_multi",
-          1.21,
-          tuple.getDoubles("d_multi").get(0).doubleValue(),
-          0.001);
+          "MV should be returned for d_multi", 1.22, tuple.getDoubles("d_multi").get(1), 0.001);
+
+      assertEquals("Strings should be returned", "single", tuple.getString("s_sing"));
+      assertEquals("MV should be returned for s_multi", "sm1", tuple.getStrings("s_multi").get(0));
+      assertEquals("MV should be returned for s_multi", "sm2", tuple.getStrings("s_multi").get(1));
+
       assertEquals(
-          "MV should be returned for d_multi",
-          1.22,
-          tuple.getDoubles("d_multi").get(1).doubleValue(),
-          0.001);
-
-      assertTrue("Strings should be returned", tuple.getString("s_sing").equals("single"));
-      assertTrue(
-          "MV should be returned for s_multi", tuple.getStrings("s_multi").get(0).equals("sm1"));
-      assertTrue(
-          "MV should be returned for s_multi", tuple.getStrings("s_multi").get(1).equals("sm2"));
-
-      assertTrue(
           "Dates should be returned as Strings",
-          tuple.getString("dt_sing").equals("1980-01-02T11:11:33.890Z"));
-      assertTrue(
+          "1980-01-02T11:11:33.890Z",
+          tuple.getString("dt_sing"));
+      assertEquals(
           "MV dates should be returned as Strings for dt_multi",
-          tuple.getStrings("dt_multi").get(0).equals("1981-03-04T01:02:03.780Z"));
-      assertTrue(
+          "1981-03-04T01:02:03.780Z",
+          tuple.getStrings("dt_multi").get(0));
+      assertEquals(
           "MV dates should be returned as Strings for dt_multi",
-          tuple.getStrings("dt_multi").get(1).equals("1981-05-24T04:05:06.990Z"));
+          "1981-05-24T04:05:06.990Z",
+          tuple.getStrings("dt_multi").get(1));
 
       // Also test native type conversion
       Date dt = new Date(Instant.parse("1980-01-02T11:11:33.890Z").toEpochMilli());
-      assertTrue("Dates should be returned as Dates", tuple.getDate("dt_sing").equals(dt));
+      assertEquals(
+          "Dates should be returned as Dates",
+          tuple.getDate("dt_sing").toInstant(),
+          dt.toInstant());
       dt = new Date(Instant.parse("1981-03-04T01:02:03.780Z").toEpochMilli());
-      assertTrue(
+      assertEquals(
           "MV dates should be returned as Dates for dt_multi",
-          tuple.getDates("dt_multi").get(0).equals(dt));
+          tuple.getDates("dt_multi").get(0).toInstant(),
+          dt.toInstant());
       dt = new Date(Instant.parse("1981-05-24T04:05:06.990Z").toEpochMilli());
-      assertTrue(
+      assertEquals(
           "MV dates should be returned as Dates  for dt_multi",
-          tuple.getDates("dt_multi").get(1).equals(dt));
+          tuple.getDates("dt_multi").get(1).toInstant(),
+          dt.toInstant());
 
       assertTrue("Booleans should be returned", tuple.getBool("b_sing"));
       assertFalse("MV boolean should be returned for b_multi", tuple.getBools("b_multi").get(0));
@@ -3051,9 +3043,7 @@ public class StreamingTest extends SolrCloudTestCase {
 
   private ParallelStream parallelStream(TupleStream stream, FieldComparator comparator)
       throws IOException {
-    ParallelStream pstream =
-        new ParallelStream(zkHost, COLLECTIONORALIAS, stream, numWorkers, comparator);
-    return pstream;
+    return new ParallelStream(zkHost, COLLECTIONORALIAS, stream, numWorkers, comparator);
   }
 
   public void testCloudSolrStreamWithoutStreamContext() throws Exception {
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java
index fb49f94df7c..bc1c4eb0996 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/io/stream/eval/TemporalEvaluatorsTest.java
@@ -200,7 +200,7 @@ public class TemporalEvaluatorsTest {
   @Test
   public void testFunctionsOnDate() throws Exception {
     Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.ROOT);
-    calendar.set(2017, 12, 5, 23, 59);
+    calendar.set(2017, Calendar.DECEMBER, 5, 23, 59);
     Date aDate = calendar.getTime();
     testFunction("year(a)", aDate, calendar.get(Calendar.YEAR));
     testFunction("month(a)", aDate, calendar.get(Calendar.MONTH) + 1);
@@ -213,7 +213,7 @@ public class TemporalEvaluatorsTest {
   @Test
   public void testFunctionsOnInstant() throws Exception {
     Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"), Locale.ROOT);
-    calendar.set(2017, 12, 5, 23, 59);
+    calendar.set(2017, Calendar.DECEMBER, 5, 23, 59);
     Date aDate = calendar.getTime();
     Instant instant = aDate.toInstant();
     testFunction("year(a)", instant, calendar.get(Calendar.YEAR));
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
index 80810e1c723..a85a3cccebb 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/response/QueryResponseTest.java
@@ -26,7 +26,6 @@ import java.time.Instant;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
-import junit.framework.Assert;
 import org.apache.lucene.tests.util.TestRuleLimitSysouts.Limit;
 import org.apache.solr.SolrTestCase;
 import org.apache.solr.client.solrj.impl.XMLResponseParser;
@@ -57,7 +56,7 @@ public class QueryResponseTest extends SolrTestCase {
     }
 
     QueryResponse qr = new QueryResponse(response, null);
-    Assert.assertNotNull(qr);
+    assertNotNull(qr);
 
     int counter = 0;
     RangeFacet.Numeric price = null;
@@ -91,10 +90,11 @@ public class QueryResponseTest extends SolrTestCase {
     assertEquals(0, price.getCounts().get(4).getCount());
 
     assertEquals(
-        new Date(Instant.parse("2005-02-13T15:26:37Z").toEpochMilli()),
-        manufacturedateDt.getStart());
+        new Date(Instant.parse("2005-02-13T15:26:37Z").toEpochMilli()).toInstant(),
+        manufacturedateDt.getStart().toInstant());
     assertEquals(
-        new Date(Instant.parse("2008-02-13T15:26:37Z").toEpochMilli()), manufacturedateDt.getEnd());
+        new Date(Instant.parse("2008-02-13T15:26:37Z").toEpochMilli()).toInstant(),
+        manufacturedateDt.getEnd().toInstant());
     assertEquals("+1YEAR", manufacturedateDt.getGap());
     assertEquals("2005-02-13T15:26:37Z", manufacturedateDt.getCounts().get(0).getValue());
     assertEquals(4, manufacturedateDt.getCounts().get(0).getCount());
diff --git a/solr/solrj/src/test/org/apache/solr/common/SolrDocumentTest.java b/solr/solrj/src/test/org/apache/solr/common/SolrDocumentTest.java
index a3dc582dcf2..5c58cd7c548 100644
--- a/solr/solrj/src/test/org/apache/solr/common/SolrDocumentTest.java
+++ b/solr/solrj/src/test/org/apache/solr/common/SolrDocumentTest.java
@@ -72,6 +72,7 @@ public class SolrDocumentTest extends SolrTestCase {
     assertNull(doc.getFieldValues("f"));
   }
 
+  @SuppressWarnings("CollectionUndefinedEquality")
   public void testUnsupportedStuff() {
     SolrDocument doc = new SolrDocument();
 
@@ -219,13 +220,15 @@ public class SolrDocumentTest extends SolrTestCase {
 
     // set field using a collection is documented to be backed by
     // that collection, so changes should affect it.
-    Collection<String> tmp = new ArrayList<>(3);
+    List<String> tmp = new ArrayList<>(3);
     tmp.add("one");
     doc.setField("collection_backed", tmp);
-    assertEquals("collection not the same", tmp, doc.getFieldValues("collection_backed"));
+    assertEquals(
+        "collection not the same", tmp, List.copyOf(doc.getFieldValues("collection_backed")));
     tmp.add("two");
     assertEquals("wrong size", 2, doc.getFieldValues("collection_backed").size());
-    assertEquals("collection not the same", tmp, doc.getFieldValues("collection_backed"));
+    assertEquals(
+        "collection not the same", tmp, List.copyOf(doc.getFieldValues("collection_backed")));
   }
 
   public void testDuplicate() {
diff --git a/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java b/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java
index 37f2c977789..8b569bb4f3b 100644
--- a/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java
+++ b/solr/solrj/src/test/org/apache/solr/common/util/TestFastJavabinDecoder.java
@@ -22,9 +22,11 @@ import java.io.InputStream;
 import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.client.solrj.FastStreamingDocsCallback;
 import org.apache.solr.client.solrj.impl.BinaryRequestWriter;
@@ -59,7 +61,7 @@ public class TestFastJavabinDecoder extends SolrTestCaseJ4 {
       assertEquals(100, scodec.readSmallInt(scodec.dis));
       tag = scodec.getTag();
       assertEquals(Tag._STR, tag);
-      assertEquals("Hello!", scodec.readStr(fis));
+      assertEquals("Hello!", scodec.readStr(fis).toString());
     }
   }
 
@@ -112,7 +114,7 @@ public class TestFastJavabinDecoder extends SolrTestCaseJ4 {
                               rootMap.computeIfAbsent(e_.name(), o -> new LinkedHashMap<>()),
                               e1 -> {
                                 Map<CharSequence, String> m1 = (Map<CharSequence, String>) e1.ctx();
-                                if ("k1".equals(e1.name())) {
+                                if ("k1".contentEquals(e1.name())) {
                                   m1.put(e1.name(), e1.val().toString());
                                 }
                                 // eat up k2
@@ -174,11 +176,13 @@ public class TestFastJavabinDecoder extends SolrTestCaseJ4 {
               @Override
               public void field(DataEntry field, Object docObj) {
                 Pojo pojo = (Pojo) docObj;
-                if ("id".equals(field.name())) {
+                if ("id".contentEquals(field.name())) {
                   pojo.id = ((Utf8CharSequence) field.val()).clone();
-                } else if (field.type() == DataEntry.Type.BOOL && "inStock".equals(field.name())) {
+                } else if (field.type() == DataEntry.Type.BOOL
+                    && "inStock".contentEquals(field.name())) {
                   pojo.inStock = field.boolVal();
-                } else if (field.type() == DataEntry.Type.FLOAT && "price".equals(field.name())) {
+                } else if (field.type() == DataEntry.Type.FLOAT
+                    && "price".contentEquals(field.name())) {
                   pojo.price = field.floatVal();
                 }
               }
@@ -227,10 +231,12 @@ public class TestFastJavabinDecoder extends SolrTestCaseJ4 {
       final List<Pojo> children = new ArrayList<>();
 
       public void compare(SolrDocument d) {
-        assertEquals(id, d.getFieldValue("id"));
-        assertEquals(subject, d.getFieldValue("subject"));
-        assertEquals(cat, d.getFieldValue("cat"));
-        assertEquals(d.getChildDocumentCount(), children.size());
+        assertEquals(String.valueOf(id), String.valueOf(d.getFieldValue("id")));
+        assertEquals(String.valueOf(subject), String.valueOf(d.getFieldValue("subject")));
+        assertEquals(String.valueOf(cat), String.valueOf(d.getFieldValue("cat")));
+        assertEquals(
+            Objects.requireNonNullElse(d.getChildDocuments(), Collections.emptyList()).size(),
+            children.size());
         @SuppressWarnings({"unchecked"})
         List<Long> l = (List<Long>) d.getFieldValue("longs");
         if (l != null) {
@@ -268,14 +274,14 @@ public class TestFastJavabinDecoder extends SolrTestCaseJ4 {
               @Override
               public void field(DataEntry field, Object docObj) {
                 Pojo pojo = (Pojo) docObj;
-                if (field.name().equals("id")) {
+                if ("id".contentEquals(field.name())) {
                   pojo.id = field.strValue();
-                } else if (field.name().equals("subject")) {
+                } else if ("subject".contentEquals(field.name())) {
                   pojo.subject = field.strValue();
-                } else if (field.name().equals("cat")) {
+                } else if ("cat".contentEquals(field.name())) {
                   pojo.cat = field.strValue();
                 } else if (field.type() == DataEntry.Type.ENTRY_ITER
-                    && "longs".equals(field.name())) {
+                    && "longs".contentEquals(field.name())) {
                   if (useListener[0]) {
                     field.listenContainer(pojo.longs = new long[field.length()], READLONGS);
                   } else {
diff --git a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
index 9ea477e8140..956a6a9714b 100644
--- a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
@@ -34,6 +34,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Properties;
 import java.util.Random;
 import java.util.Set;
@@ -791,10 +792,6 @@ public abstract class BaseDistributedSearchTestCase extends SolrTestCaseJ4 {
     return first;
   }
 
-  public static boolean eq(String a, String b) {
-    return a == b || (a != null && a.equals(b));
-  }
-
   public static int flags(Map<String, Integer> handle, Object key) {
     if (key == null) return 0;
     if (handle == null) return 0;
@@ -866,7 +863,7 @@ public abstract class BaseDistributedSearchTestCase extends SolrTestCaseJ4 {
           bSkipped++;
           continue;
         }
-        if (eq(namea, nameb)) {
+        if (Objects.equals(namea, nameb)) {
           break;
         }
         return "." + namea + "!=" + nameb + " (unordered or missing)";