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 2023/03/23 21:37:25 UTC
[solr] branch main updated: SOLR-16715: Replace new HashMap(int) and new HashSet(int) with CollectionUtil.newHashMap / CollectionUtil.newHashSet (#1482)
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 2375aa61679 SOLR-16715: Replace new HashMap(int) and new HashSet(int) with CollectionUtil.newHashMap / CollectionUtil.newHashSet (#1482)
2375aa61679 is described below
commit 2375aa61679ee4c8e3b715e4168e8fb473ebb733
Author: Kevin Risden <ri...@users.noreply.github.com>
AuthorDate: Thu Mar 23 17:37:18 2023 -0400
SOLR-16715: Replace new HashMap(int) and new HashSet(int) with CollectionUtil.newHashMap / CollectionUtil.newHashSet (#1482)
---
gradle/validation/forbidden-apis/java.solr.txt | 9 +++++
solr/CHANGES.txt | 2 ++
.../src/java/org/apache/solr/bench/Docs.java | 5 +--
.../apache/solr/api/ContainerPluginsRegistry.java | 5 +--
.../cloud/api/collections/OverseerRoleCmd.java | 4 +--
.../solr/cloud/api/collections/RestoreCmd.java | 4 +--
.../solr/cloud/overseer/ClusterStateMutator.java | 3 +-
.../apache/solr/cloud/overseer/ReplicaMutator.java | 3 +-
.../placement/plugins/RandomPlacementFactory.java | 4 +--
.../placement/plugins/SimplePlacementFactory.java | 4 +--
.../solr/core/TransientSolrCoreCacheDefault.java | 4 +--
.../org/apache/solr/handler/ExportHandler.java | 4 +--
.../apache/solr/handler/MoreLikeThisHandler.java | 4 +--
.../apache/solr/handler/RequestHandlerUtils.java | 4 +--
.../apache/solr/handler/UpdateRequestHandler.java | 3 +-
.../solr/handler/admin/ZookeeperInfoHandler.java | 5 +--
.../solr/handler/component/FacetComponent.java | 3 +-
.../solr/handler/component/PivotFacetValue.java | 3 +-
.../handler/component/QueryElevationComponent.java | 6 ++--
.../handler/component/RealTimeGetComponent.java | 3 +-
.../solr/handler/component/TermsComponent.java | 5 +--
.../org/apache/solr/handler/loader/XMLLoader.java | 8 ++---
.../org/apache/solr/handler/tagger/Tagger.java | 4 +--
.../solr/handler/tagger/TaggerRequestHandler.java | 4 +--
.../solr/highlight/DefaultSolrHighlighter.java | 6 ++--
.../packagemanager/DefaultPackageRepository.java | 4 +--
.../java/org/apache/solr/request/SimpleFacets.java | 4 +--
.../apache/solr/request/macro/MacroExpander.java | 4 +--
.../java/org/apache/solr/schema/CurrencyField.java | 3 +-
.../org/apache/solr/schema/ManagedIndexSchema.java | 3 +-
.../java/org/apache/solr/search/CacheConfig.java | 5 +--
.../apache/solr/search/ExtendedDismaxQParser.java | 6 ++--
.../org/apache/solr/search/SolrIndexSearcher.java | 4 +--
.../org/apache/solr/search/facet/FacetBucket.java | 7 ++--
.../apache/solr/search/facet/FacetFieldMerger.java | 4 +--
.../org/apache/solr/search/facet/FacetModule.java | 4 +--
.../apache/solr/search/facet/FacetRangeMerger.java | 4 +--
.../search/facet/FacetRequestSortedMerger.java | 4 +--
.../org/apache/solr/search/facet/LegacyFacet.java | 11 +++---
.../org/apache/solr/search/facet/UniqueAgg.java | 5 ++-
.../SearchGroupsResultTransformer.java | 5 +--
.../apache/solr/search/join/ScoreModeParser.java | 4 +--
.../solr/search/mlt/MLTContentQParserPlugin.java | 4 +--
.../apache/solr/uninverting/FieldCacheImpl.java | 13 ++++----
.../org/apache/solr/update/TransactionLog.java | 3 +-
.../src/java/org/apache/solr/update/UpdateLog.java | 26 +++++++++++----
.../processor/DistributedZkUpdateProcessor.java | 5 +--
.../java/org/apache/solr/util/DateMathParser.java | 39 ++++++++++------------
.../src/java/org/apache/solr/util/ExportTool.java | 4 +--
.../src/java/org/apache/solr/util/MapListener.java | 4 +--
.../java/org/apache/solr/util/SolrPluginUtils.java | 5 +--
.../stats/InstrumentedHttpListenerFactory.java | 5 +--
.../stats/InstrumentedHttpRequestExecutor.java | 4 +--
.../solr/hdfs/update/HdfsTransactionLog.java | 4 +--
.../org/apache/solr/client/solrj/io/Tuple.java | 3 +-
.../solr/client/solrj/io/stream/FacetStream.java | 4 +--
.../solr/client/solrj/io/stream/StatsStream.java | 4 +--
.../solr/client/solrj/impl/CloudSolrClient.java | 4 ++-
.../solrj/request/JavaBinUpdateRequestCodec.java | 4 +--
.../solr/client/solrj/request/UpdateRequest.java | 6 ++--
.../apache/solr/common/LinkedHashMapWriter.java | 2 ++
.../org/apache/solr/common/cloud/ClusterState.java | 10 +++---
.../apache/solr/common/cloud/DocCollection.java | 3 +-
.../java/org/apache/solr/common/cloud/Slice.java | 9 ++---
.../common/util/ByteArrayUtf8CharSequence.java | 3 +-
.../apache/solr/common/util/CollectionUtil.java | 15 +++++++--
.../apache/solr/common/util/CommandOperation.java | 2 +-
.../solr/common/util/FastJavaBinDecoder.java | 3 +-
.../org/apache/solr/common/util/JavaBinCodec.java | 6 ++--
.../solr/common/util/JsonSchemaValidator.java | 2 +-
.../apache/solr/common/util/JsonTextWriter.java | 3 +-
.../java/org/apache/solr/common/util/Utils.java | 4 +--
.../apache/solr/common/util/ValidatingJsonMap.java | 2 +-
.../apache/solr/BaseDistributedSearchTestCase.java | 8 ++---
74 files changed, 222 insertions(+), 181 deletions(-)
diff --git a/gradle/validation/forbidden-apis/java.solr.txt b/gradle/validation/forbidden-apis/java.solr.txt
index 2ea1125fdbe..de195d51d93 100644
--- a/gradle/validation/forbidden-apis/java.solr.txt
+++ b/gradle/validation/forbidden-apis/java.solr.txt
@@ -18,3 +18,12 @@ java.lang.Thread#<init>()
java.lang.Thread#<init>(java.lang.Runnable)
java.lang.Thread#<init>(java.lang.ThreadGroup,java.lang.Runnable)
+@defaultMessage Use CollectionUtil.newHashMap(int)
+java.util.HashMap#<init>(int)
+
+@defaultMessage Use CollectionUtil.newLinkedHashMap(int)
+java.util.LinkedHashMap#<init>(int)
+
+@defaultMessage Use CollectionUtil.newHashSet(int)
+java.util.HashSet#<init>(int)
+
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index c5b4edf224e..9ae2a93a339 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -91,6 +91,8 @@ Other Changes
* SOLR-16716: Replace commons-io usages with pure Java (Kevin Risden)
+* SOLR-16715: Replace new HashMap(int) and new HashSet(int) with CollectionUtil.newHashMap / CollectionUtil.newHashSet (Kevin Risden)
+
================== 9.2.0 ==================
New Features
diff --git a/solr/benchmark/src/java/org/apache/solr/bench/Docs.java b/solr/benchmark/src/java/org/apache/solr/bench/Docs.java
index 39efea9ec2f..cfaca270571 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/Docs.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/Docs.java
@@ -21,7 +21,6 @@ import static org.apache.solr.bench.BaseBenchState.log;
import java.lang.invoke.MethodHandles;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Queue;
@@ -34,6 +33,7 @@ import org.apache.solr.bench.generators.MultiString;
import org.apache.solr.bench.generators.SolrGen;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.SolrNamedThreadFactory;
import org.apache.solr.common.util.SuppressForbidden;
import org.quicktheories.core.Gen;
@@ -55,7 +55,8 @@ public class Docs {
private final ThreadLocal<SolrRandomnessSource> random;
private final Queue<SolrInputDocument> docs = new ConcurrentLinkedQueue<>();
- private final Map<String, Gen<?>> fields = Collections.synchronizedMap(new HashMap<>(16));
+ private final Map<String, Gen<?>> fields =
+ Collections.synchronizedMap(CollectionUtil.newHashMap(16));
private ExecutorService executorService;
private int stringFields;
diff --git a/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java b/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
index 2dd56ecc702..3bb7b97f73b 100644
--- a/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
+++ b/solr/core/src/java/org/apache/solr/api/ContainerPluginsRegistry.java
@@ -47,6 +47,7 @@ import org.apache.solr.common.MapWriter;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.annotation.JsonProperty;
import org.apache.solr.common.cloud.ClusterPropertiesListener;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.PathTrie;
import org.apache.solr.common.util.ReflectMapWriter;
@@ -175,7 +176,7 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
log.error("Could not read plugins data", e);
return;
}
- Map<String, PluginMetaHolder> newState = new HashMap<>(pluginInfos.size());
+ Map<String, PluginMetaHolder> newState = CollectionUtil.newHashMap(pluginInfos.size());
for (Map.Entry<String, Object> e : pluginInfos.entrySet()) {
try {
newState.put(e.getKey(), new PluginMetaHolder((Map<String, Object>) e.getValue()));
@@ -482,7 +483,7 @@ public class ContainerPluginsRegistry implements ClusterPropertiesListener, MapW
public static Map<String, Diff> compareMaps(Map<String, ?> a, Map<String, ?> b) {
if (a.isEmpty() && b.isEmpty()) return null;
- Map<String, Diff> result = new HashMap<>(Math.max(a.size(), b.size()));
+ Map<String, Diff> result = CollectionUtil.newHashMap(Math.max(a.size(), b.size()));
a.forEach(
(k, v) -> {
Object newVal = b.get(k);
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerRoleCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerRoleCmd.java
index 0d8d1be61e6..d8e7a3dea64 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerRoleCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerRoleCmd.java
@@ -22,7 +22,6 @@ import static org.apache.solr.common.params.CollectionParams.CollectionAction.RE
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.cloud.OverseerNodePrioritizer;
@@ -31,6 +30,7 @@ import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionParams.CollectionAction;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.Utils;
import org.apache.zookeeper.CreateMode;
@@ -83,7 +83,7 @@ public class OverseerRoleCmd implements CollApiCmds.CollectionApiCommand {
Utils.fromJSON(zkClient.getData(ZkStateReader.ROLES, null, new Stat(), true));
roles = tmp;
} else {
- roles = new LinkedHashMap<>(1);
+ roles = CollectionUtil.newLinkedHashMap(1);
}
List<String> nodeList = roles.computeIfAbsent(roleName, k -> new ArrayList<>());
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
index 584a260e00d..11bff6e23d5 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/RestoreCmd.java
@@ -38,7 +38,6 @@ import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -69,6 +68,7 @@ import org.apache.solr.common.params.CollectionAdminParams;
import org.apache.solr.common.params.CollectionParams;
import org.apache.solr.common.params.CoreAdminParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -380,7 +380,7 @@ public class RestoreCmd implements CollApiCmds.CollectionApiCommand {
// instead of a list of names, and if so uses this instead of building it. We clear the
// replica list.
Collection<Slice> backupSlices = backupCollectionState.getActiveSlices();
- Map<String, Slice> newSlices = new LinkedHashMap<>(backupSlices.size());
+ Map<String, Slice> newSlices = CollectionUtil.newLinkedHashMap(backupSlices.size());
for (Slice backupSlice : backupSlices) {
newSlices.put(
backupSlice.getName(),
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ClusterStateMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ClusterStateMutator.java
index f95959e33e5..a8faa27fbf8 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/ClusterStateMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ClusterStateMutator.java
@@ -40,6 +40,7 @@ import org.apache.solr.common.cloud.Slice.SliceStateProps;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionAdminParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -94,7 +95,7 @@ public class ClusterStateMutator {
for (int i = 0; i < shardNames.size(); i++) {
String sliceName = shardNames.get(i);
- Map<String, Object> sliceProps = new LinkedHashMap<>(1);
+ Map<String, Object> sliceProps = CollectionUtil.newLinkedHashMap(1);
sliceProps.put(SliceStateProps.RANGE, ranges == null ? null : ranges.get(i));
slices.put(sliceName, new Slice(sliceName, null, sliceProps, cName));
diff --git a/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java b/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
index 5254c9671f1..177bd81c81b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
+++ b/solr/core/src/java/org/apache/solr/cloud/overseer/ReplicaMutator.java
@@ -51,6 +51,7 @@ import org.apache.solr.common.cloud.SolrZkClient;
import org.apache.solr.common.cloud.ZkNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.CollectionAdminParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.Utils;
import org.apache.solr.util.TestInjection;
import org.slf4j.Logger;
@@ -427,7 +428,7 @@ public class ReplicaMutator {
sliceProps = slice.getProperties();
replicas = slice.getReplicasCopy();
} else {
- replicas = new HashMap<>(1);
+ replicas = CollectionUtil.newHashMap(1);
sliceProps = new HashMap<>();
sliceProps.put(SliceStateProps.RANGE, shardRange);
sliceProps.put(ZkStateReader.STATE_PROP, shardState);
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/plugins/RandomPlacementFactory.java b/solr/core/src/java/org/apache/solr/cluster/placement/plugins/RandomPlacementFactory.java
index 3c040f58e33..47f76a03a65 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/plugins/RandomPlacementFactory.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/plugins/RandomPlacementFactory.java
@@ -20,7 +20,6 @@ package org.apache.solr.cluster.placement.plugins;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;
@@ -35,6 +34,7 @@ import org.apache.solr.cluster.placement.PlacementPlugin;
import org.apache.solr.cluster.placement.PlacementPluginFactory;
import org.apache.solr.cluster.placement.PlacementRequest;
import org.apache.solr.cluster.placement.ReplicaPlacement;
+import org.apache.solr.common.util.CollectionUtil;
/**
* Factory for creating {@link RandomPlacementPlugin}, a placement plugin implementing random
@@ -79,7 +79,7 @@ public class RandomPlacementFactory
}
Set<ReplicaPlacement> replicaPlacements =
- new HashSet<>(totalReplicasPerShard * request.getShardNames().size());
+ CollectionUtil.newHashSet(totalReplicasPerShard * request.getShardNames().size());
// Now place randomly all replicas of all shards on available nodes
for (String shardName : request.getShardNames()) {
diff --git a/solr/core/src/java/org/apache/solr/cluster/placement/plugins/SimplePlacementFactory.java b/solr/core/src/java/org/apache/solr/cluster/placement/plugins/SimplePlacementFactory.java
index 9bb301795af..3242d25aa6c 100644
--- a/solr/core/src/java/org/apache/solr/cluster/placement/plugins/SimplePlacementFactory.java
+++ b/solr/core/src/java/org/apache/solr/cluster/placement/plugins/SimplePlacementFactory.java
@@ -21,7 +21,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -37,6 +36,7 @@ import org.apache.solr.cluster.placement.PlacementPlugin;
import org.apache.solr.cluster.placement.PlacementPluginFactory;
import org.apache.solr.cluster.placement.PlacementRequest;
import org.apache.solr.cluster.placement.ReplicaPlacement;
+import org.apache.solr.common.util.CollectionUtil;
/**
* Factory for creating {@link SimplePlacementPlugin}, a placement plugin implementing the logic
@@ -67,7 +67,7 @@ public class SimplePlacementFactory
}
Set<ReplicaPlacement> replicaPlacements =
- new HashSet<>(totalReplicasPerShard * request.getShardNames().size());
+ CollectionUtil.newHashSet(totalReplicasPerShard * request.getShardNames().size());
Collection<ReplicaCount> replicaCounts = nodeVsShardCount.values();
diff --git a/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java b/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java
index 2c5ee34e9e7..c3c1ac0b620 100644
--- a/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java
+++ b/solr/core/src/java/org/apache/solr/core/TransientSolrCoreCacheDefault.java
@@ -22,9 +22,9 @@ import com.github.benmanes.caffeine.cache.Caffeine;
import java.lang.invoke.MethodHandles;
import java.util.Collection;
import java.util.Collections;
-import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
+import org.apache.solr.common.util.CollectionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -82,7 +82,7 @@ public class TransientSolrCoreCacheDefault extends TransientSolrCoreCache {
}
transientCores = transientCoresCacheBuilder.build();
- transientDescriptors = new LinkedHashMap<>(initialCapacity);
+ transientDescriptors = CollectionUtil.newLinkedHashMap(initialCapacity);
}
private void onEvict(SolrCore core) {
diff --git a/solr/core/src/java/org/apache/solr/handler/ExportHandler.java b/solr/core/src/java/org/apache/solr/handler/ExportHandler.java
index b00ff31498a..85a99dfaea9 100644
--- a/solr/core/src/java/org/apache/solr/handler/ExportHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/ExportHandler.java
@@ -20,7 +20,6 @@ package org.apache.solr.handler;
import static org.apache.solr.common.params.CommonParams.JSON;
import java.lang.invoke.MethodHandles;
-import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
@@ -126,8 +125,7 @@ public class ExportHandler extends SearchHandler {
}
String wt = req.getParams().get(CommonParams.WT, JSON);
if ("xsort".equals(wt)) wt = JSON;
- Map<String, String> map = new HashMap<>(1);
- map.put(CommonParams.WT, ReplicationHandler.FILE_STREAM);
+ Map<String, String> map = Map.of(CommonParams.WT, ReplicationHandler.FILE_STREAM);
req.setParams(SolrParams.wrapDefaults(new MapSolrParams(map), req.getParams()));
rsp.add(
ReplicationHandler.FILE_STREAM,
diff --git a/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java b/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
index 6df99e40c8d..18980da5e99 100644
--- a/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
@@ -22,7 +22,6 @@ import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -47,6 +46,7 @@ import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.MoreLikeThisParams;
import org.apache.solr.common.params.MoreLikeThisParams.TermStyle;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.handler.admin.api.MoreLikeThisAPI;
@@ -444,7 +444,7 @@ public class MoreLikeThisHandler extends RequestHandlerBase {
}
Collection<Object> streamValue = Collections.singleton(buffered.get().toString());
- Map<String, Collection<Object>> multifieldDoc = new HashMap<>(fields.length);
+ Map<String, Collection<Object>> multifieldDoc = CollectionUtil.newHashMap(fields.length);
for (String field : fields) {
multifieldDoc.put(field, streamValue);
}
diff --git a/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java b/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java
index fe873084b2b..96164a1121c 100644
--- a/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java
+++ b/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java
@@ -134,9 +134,7 @@ public class RequestHandlerUtils {
public static void setWt(SolrQueryRequest req, String wt) {
SolrParams params = req.getParams();
if (params.get(CommonParams.WT) != null) return; // wt is set by user
- Map<String, String> map = new HashMap<>(1);
- map.put(CommonParams.WT, wt);
- map.put("indent", "true");
+ Map<String, String> map = Map.of(CommonParams.WT, wt, "indent", "true");
req.setParams(SolrParams.wrapDefaults(params, new MapSolrParams(map)));
}
}
diff --git a/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java b/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
index 22f97952ef7..368b40cdb55 100644
--- a/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
@@ -107,8 +107,7 @@ public class UpdateRequestHandler extends ContentStreamHandlerBase
String wt = loader.getDefaultWT();
// Make sure it is a valid writer
if (req.getCore().getQueryResponseWriter(wt) != null) {
- Map<String, String> map = new HashMap<>(1);
- map.put(CommonParams.WT, wt);
+ Map<String, String> map = Map.of(CommonParams.WT, wt);
req.setParams(SolrParams.wrapDefaults(params, new MapSolrParams(map)));
}
}
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
index 7389fcd22c9..b130563099f 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
@@ -31,7 +31,6 @@ import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -359,9 +358,7 @@ public final class ZookeeperInfoHandler extends RequestHandlerBase {
@SuppressWarnings({"unchecked"})
public void handleRequestBody(SolrQueryRequest req, SolrQueryResponse rsp) throws Exception {
final SolrParams params = req.getParams();
- Map<String, String> map = new HashMap<>(1);
- map.put(WT, "raw");
- map.put(OMIT_HEADER, "true");
+ Map<String, String> map = Map.of(WT, "raw", OMIT_HEADER, "true");
req.setParams(SolrParams.wrapDefaults(new MapSolrParams(map), params));
synchronized (this) {
if (pagingSupport == null) {
diff --git a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
index 9d46b773ec9..f78c8658ccc 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/FacetComponent.java
@@ -41,6 +41,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -1435,7 +1436,7 @@ public class FacetComponent extends SearchComponent {
public long[] missingMax;
// a bitset for each shard, keeping track of which terms seen
public FixedBitSet[] counted;
- public HashMap<String, ShardFacetCount> counts = new HashMap<>(128);
+ public HashMap<String, ShardFacetCount> counts = CollectionUtil.newHashMap(128);
public int termNum;
public int initialLimit; // how many terms requested in first phase
diff --git a/solr/core/src/java/org/apache/solr/handler/component/PivotFacetValue.java b/solr/core/src/java/org/apache/solr/handler/component/PivotFacetValue.java
index 134364be3ce..6ff681a3dce 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/PivotFacetValue.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/PivotFacetValue.java
@@ -23,6 +23,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import org.apache.solr.common.params.FacetParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.util.PivotListEntry;
@@ -247,7 +248,7 @@ public class PivotFacetValue {
SimpleOrderedMap<SimpleOrderedMap<Object>> shardRanges = PivotFacetHelper.getRanges(value);
if (shardRanges != null) {
if (rangeCounts == null) {
- rangeCounts = new LinkedHashMap<>(shardRanges.size() / 2);
+ rangeCounts = CollectionUtil.newLinkedHashMap(shardRanges.size() / 2);
}
RangeFacetRequest.DistribRangeFacet.mergeFacetRangesFromShardResponse(
rangeCounts, shardRanges);
diff --git a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
index 587f270f5c0..4023ffea839 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/QueryElevationComponent.java
@@ -29,8 +29,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
@@ -1158,7 +1156,7 @@ public class QueryElevationComponent extends SearchComponent implements SolrCore
public ElevationBuilder addExcludedIds(Collection<String> ids) {
if (excludedIds == null) {
- excludedIds = new HashSet<>(Math.max(10, ids.size()));
+ excludedIds = CollectionUtil.newHashSet(Math.max(10, ids.size()));
}
for (String id : ids) {
excludedIds.add(toBytesRef(id));
@@ -1609,7 +1607,7 @@ public class QueryElevationComponent extends SearchComponent implements SolrCore
/** Gets the child node for the provided element, or creates it if it does not exist. */
Node<E, M> getOrCreateChild(E e) {
if (children == null) {
- children = new HashMap<>(4);
+ children = CollectionUtil.newHashMap(4);
}
Node<E, M> child = children.get(e);
if (child == null) {
diff --git a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
index b06116123e6..1a679f3b471 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/RealTimeGetComponent.java
@@ -69,6 +69,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.SolrCore;
@@ -1377,7 +1378,7 @@ public class RealTimeGetComponent extends SearchComponent {
// This can be done with single pass over both ranges and versionsAvailable, that would require
// merging ranges. We currently use Set to ensure there are no duplicates.
- Set<Long> versionsToRet = new HashSet<>(ulog.getNumRecordsToKeep());
+ Set<Long> versionsToRet = CollectionUtil.newHashSet(ulog.getNumRecordsToKeep());
for (String range : ranges) {
String[] rangeBounds = range.split("\\.{3}");
int indexStart =
diff --git a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
index 7d45a885855..cbc0760f12d 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/TermsComponent.java
@@ -42,6 +42,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.TermsParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -455,7 +456,7 @@ public class TermsComponent extends SearchComponent {
public boolean stats;
public TermsHelper() {
- fieldmap = new HashMap<>(5);
+ fieldmap = CollectionUtil.newHashMap(5);
}
public void init(SolrParams params) {
@@ -465,7 +466,7 @@ public class TermsComponent extends SearchComponent {
for (String field : fields) {
// TODO: not sure 128 is the best starting size
// It use it because that is what is used for facets
- fieldmap.put(field, new HashMap<String, TermsResponse.Term>(128));
+ fieldmap.put(field, CollectionUtil.newHashMap(128));
}
}
}
diff --git a/solr/core/src/java/org/apache/solr/handler/loader/XMLLoader.java b/solr/core/src/java/org/apache/solr/handler/loader/XMLLoader.java
index 5bc13f2a3ea..869d4790db9 100644
--- a/solr/core/src/java/org/apache/solr/handler/loader/XMLLoader.java
+++ b/solr/core/src/java/org/apache/solr/handler/loader/XMLLoader.java
@@ -42,6 +42,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.StrUtils;
@@ -375,11 +376,8 @@ public class XMLLoader extends ContentStreamLoader {
Object v = isNull ? null : text.toString();
if (update != null) {
if (updateMap == null) updateMap = new HashMap<>();
- Map<String, Object> extendedValues = updateMap.get(currentFieldName);
- if (extendedValues == null) {
- extendedValues = new HashMap<>(1);
- updateMap.put(currentFieldName, extendedValues);
- }
+ Map<String, Object> extendedValues =
+ updateMap.computeIfAbsent(currentFieldName, k -> CollectionUtil.newHashMap(1));
Object val = extendedValues.get(update);
if (val == null) {
extendedValues.put(update, v);
diff --git a/solr/core/src/java/org/apache/solr/handler/tagger/Tagger.java b/solr/core/src/java/org/apache/solr/handler/tagger/Tagger.java
index 376a09c37dc..aef96e08831 100644
--- a/solr/core/src/java/org/apache/solr/handler/tagger/Tagger.java
+++ b/solr/core/src/java/org/apache/solr/handler/tagger/Tagger.java
@@ -24,7 +24,6 @@ package org.apache.solr.handler.tagger;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
-import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.analysis.TokenStream;
import org.apache.lucene.analysis.tokenattributes.OffsetAttribute;
@@ -34,6 +33,7 @@ import org.apache.lucene.index.Terms;
import org.apache.lucene.util.Bits;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.IntsRef;
+import org.apache.solr.common.util.CollectionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -86,7 +86,7 @@ public abstract class Tagger {
}
public void enableDocIdsCache(int initSize) {
- if (initSize > 0) docIdsCache = new HashMap<>(initSize);
+ if (initSize > 0) docIdsCache = CollectionUtil.newHashMap(initSize);
}
public void process() throws IOException {
diff --git a/solr/core/src/java/org/apache/solr/handler/tagger/TaggerRequestHandler.java b/solr/core/src/java/org/apache/solr/handler/tagger/TaggerRequestHandler.java
index 510be22e385..f759badab74 100644
--- a/solr/core/src/java/org/apache/solr/handler/tagger/TaggerRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/tagger/TaggerRequestHandler.java
@@ -28,7 +28,6 @@ import java.io.Reader;
import java.io.StringReader;
import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -55,6 +54,7 @@ import org.apache.solr.analysis.TokenizerChain;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.handler.RequestHandlerBase;
@@ -203,7 +203,7 @@ public class TaggerRequestHandler extends RequestHandlerBase {
tags.add(tag);
}
- Map<Object, List<Object>> docIdsListCache = new HashMap<>(2000);
+ Map<Object, List<Object>> docIdsListCache = CollectionUtil.newHashMap(2000);
ValueSourceAccessor uniqueKeyCache =
new ValueSourceAccessor(
diff --git a/solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java b/solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
index a73ed06238f..b4c31bcf825 100644
--- a/solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
+++ b/solr/core/src/java/org/apache/solr/highlight/DefaultSolrHighlighter.java
@@ -22,7 +22,6 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
@@ -66,6 +65,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.HighlightParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.core.PluginInfo;
@@ -581,8 +581,8 @@ public class DefaultSolrHighlighter extends SolrHighlighter implements PluginInf
* isn't null.
*/
protected Set<String> getDocPrefetchFieldNames(String[] hlFieldNames, SolrQueryRequest req) {
- Set<String> preFetchFieldNames =
- new HashSet<>(hlFieldNames.length + 1); // +1 for uniqueyKey added after
+ // +1 for uniqueKey added after
+ Set<String> preFetchFieldNames = CollectionUtil.newHashSet(hlFieldNames.length + 1);
Collections.addAll(preFetchFieldNames, hlFieldNames);
for (String hlFieldName : hlFieldNames) {
String alternateField =
diff --git a/solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java b/solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java
index 7c942a8aadb..0eb9cfc8216 100644
--- a/solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java
+++ b/solr/core/src/java/org/apache/solr/packagemanager/DefaultPackageRepository.java
@@ -23,7 +23,6 @@ import java.lang.invoke.MethodHandles;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
-import java.util.HashMap;
import java.util.Map;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils;
@@ -31,6 +30,7 @@ import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.CollectionUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -105,7 +105,7 @@ public class DefaultPackageRepository extends PackageRepository {
SolrPackage[] items =
PackageUtils.getJson(client, repositoryURL + "/repository.json", SolrPackage[].class);
- packages = new HashMap<>(items.length);
+ packages = CollectionUtil.newHashMap(items.length);
for (SolrPackage pkg : items) {
pkg.setRepository(name);
packages.put(pkg.name, pkg);
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 7a1ce68a872..8d390717b25 100644
--- a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
@@ -24,7 +24,6 @@ import java.util.AbstractMap.SimpleImmutableEntry;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.IdentityHashMap;
import java.util.List;
@@ -69,6 +68,7 @@ import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.GroupParams;
import org.apache.solr.common.params.RequiredSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -595,7 +595,7 @@ public class SimpleFacets {
break;
case UIF:
// Emulate the JSON Faceting structure so we can use the same parsing classes
- Map<String, Object> jsonFacet = new HashMap<>(13);
+ Map<String, Object> jsonFacet = CollectionUtil.newHashMap(13);
jsonFacet.put("type", "terms");
jsonFacet.put("field", field);
jsonFacet.put("offset", offset);
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 f334c234e3f..d89326f2d80 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
@@ -17,11 +17,11 @@
package org.apache.solr.request.macro;
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.common.util.CollectionUtil;
import org.apache.solr.search.StrParser;
import org.apache.solr.search.SyntaxError;
@@ -52,7 +52,7 @@ public class MacroExpander {
}
public boolean expand() {
- this.expanded = new HashMap<>(orig.size());
+ this.expanded = CollectionUtil.newHashMap(orig.size());
boolean changed = false;
for (Map.Entry<String, String[]> entry : orig.entrySet()) {
diff --git a/solr/core/src/java/org/apache/solr/schema/CurrencyField.java b/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
index 7dc737bba81..cee593b5708 100644
--- a/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
+++ b/solr/core/src/java/org/apache/solr/schema/CurrencyField.java
@@ -25,6 +25,7 @@ import java.util.Map;
import org.apache.lucene.util.ResourceLoaderAware;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.util.CollectionUtil;
/**
* Field type for support of monetary values.
@@ -78,7 +79,7 @@ public class CurrencyField extends CurrencyFieldType implements SchemaAware, Res
// Initialize field type for amount
fieldTypeAmountRaw = new TrieLongField();
fieldTypeAmountRaw.setTypeName(FIELD_TYPE_AMOUNT_RAW);
- Map<String, String> map = new HashMap<>(1);
+ Map<String, String> map = CollectionUtil.newHashMap(1);
map.put("precisionStep", precisionStepString);
fieldTypeAmountRaw.init(schema, map);
fieldSuffixAmountRaw = FIELD_SUFFIX_AMOUNT_RAW;
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
index 6c7b014b0fa..0bcfda95823 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
@@ -65,6 +65,7 @@ import org.apache.solr.common.cloud.ZkCoreNodeProps;
import org.apache.solr.common.cloud.ZkStateReader;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SolrNamedThreadFactory;
@@ -1149,7 +1150,7 @@ public final class ManagedIndexSchema extends IndexSchema {
}
private Map<String, List<CopyField>> cloneCopyFieldsMap(Map<String, List<CopyField>> original) {
- Map<String, List<CopyField>> clone = new HashMap<>(original.size());
+ Map<String, List<CopyField>> clone = CollectionUtil.newHashMap(original.size());
Iterator<Map.Entry<String, List<CopyField>>> iterator = original.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, List<CopyField>> entry = iterator.next();
diff --git a/solr/core/src/java/org/apache/solr/search/CacheConfig.java b/solr/core/src/java/org/apache/solr/search/CacheConfig.java
index ecab7ead311..7dc154bed9e 100644
--- a/solr/core/src/java/org/apache/solr/search/CacheConfig.java
+++ b/solr/core/src/java/org/apache/solr/search/CacheConfig.java
@@ -28,6 +28,7 @@ import java.util.function.Supplier;
import org.apache.solr.common.ConfigNode;
import org.apache.solr.common.MapSerializable;
import org.apache.solr.common.SolrException;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrConfig;
@@ -82,7 +83,7 @@ public class CacheConfig implements MapSerializable {
public static Map<String, CacheConfig> getMultipleConfigs(
SolrConfig solrConfig, String configPath, List<ConfigNode> nodes) {
if (nodes == null || nodes.size() == 0) return new LinkedHashMap<>();
- Map<String, CacheConfig> result = new HashMap<>(nodes.size());
+ Map<String, CacheConfig> result = CollectionUtil.newHashMap(nodes.size());
for (ConfigNode node : nodes) {
if (node.boolAttr("enabled", true)) {
CacheConfig config =
@@ -107,7 +108,7 @@ public class CacheConfig implements MapSerializable {
SolrConfig solrConfig, String nodeName, Map<String, String> attrs, String xpath) {
CacheConfig config = new CacheConfig();
config.nodeName = nodeName;
- Map<String, String> attrsCopy = new LinkedHashMap<>(attrs.size());
+ Map<String, String> attrsCopy = CollectionUtil.newLinkedHashMap(attrs.size());
for (Map.Entry<String, String> e : attrs.entrySet()) {
attrsCopy.put(e.getKey(), String.valueOf(e.getValue()));
}
diff --git a/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java b/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
index 4dac76caeda..c7c59c54859 100644
--- a/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
+++ b/solr/core/src/java/org/apache/solr/search/ExtendedDismaxQParser.java
@@ -24,7 +24,6 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -52,6 +51,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.DisMaxParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.parser.QueryParser;
import org.apache.solr.parser.SolrQueryParserBase.MagicFieldName;
@@ -669,7 +669,7 @@ public class ExtendedDismaxQParser extends QParser {
* @return a {fieldName, fieldBoost} map for the given fields.
*/
private Map<String, Float> getFieldBoosts(Collection<FieldParams> fields) {
- Map<String, Float> fieldBoostMap = new LinkedHashMap<>(fields.size());
+ Map<String, Float> fieldBoostMap = CollectionUtil.newLinkedHashMap(fields.size());
for (FieldParams field : fields) {
fieldBoostMap.put(field.getField(), field.getBoost());
@@ -977,7 +977,7 @@ public class ExtendedDismaxQParser extends QParser {
* Where we store a map from field name we expect to see in our query string, to Alias object
* containing the fields to use in our DisjunctionMaxQuery and the tiebreaker to use.
*/
- protected Map<String, Alias> aliases = new HashMap<>(3);
+ protected Map<String, Alias> aliases = CollectionUtil.newHashMap(3);
private QType type;
private String field;
diff --git a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
index b3994d2335a..421e79994f7 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
@@ -26,7 +26,6 @@ import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -90,6 +89,7 @@ import org.apache.lucene.util.FixedBitSet;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ObjectReleaseTracker;
import org.apache.solr.core.DirectoryFactory;
import org.apache.solr.core.DirectoryFactory.DirContext;
@@ -392,7 +392,7 @@ public class SolrIndexSearcher extends IndexSearcher implements Closeable, SolrI
if (solrConfig.userCacheConfigs.isEmpty()) {
cacheMap = NO_GENERIC_CACHES;
} else {
- cacheMap = new HashMap<>(solrConfig.userCacheConfigs.size());
+ cacheMap = CollectionUtil.newHashMap(solrConfig.userCacheConfigs.size());
for (Map.Entry<String, CacheConfig> e : solrConfig.userCacheConfigs.entrySet()) {
SolrCache<?, ?> cache = e.getValue().newInstance();
if (cache != null) {
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetBucket.java b/solr/core/src/java/org/apache/solr/search/facet/FacetBucket.java
index c11e6b28da9..7584cdba6bb 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetBucket.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetBucket.java
@@ -20,6 +20,7 @@ package org.apache.solr.search.facet;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.SimpleOrderedMap;
public class FacetBucket {
@@ -132,7 +133,7 @@ public class FacetBucket {
Map<String, Object> subRef = subMerger.getRefinement(mcontext);
if (subRef != null) {
if (refinement == null) {
- refinement = new HashMap<>(refineTags.size());
+ refinement = CollectionUtil.newHashMap(refineTags.size());
}
refinement.put(tag, subRef);
}
@@ -170,7 +171,7 @@ public class FacetBucket {
} else {
// for missing bucket, go over all sub-facts
refineTags = null;
- refinement = new HashMap<>(4);
+ refinement = CollectionUtil.newHashMap(4);
if (bucketValue != null) {
refinement.put("_v", bucketValue);
}
@@ -187,7 +188,7 @@ public class FacetBucket {
Map<String, Object> subRef = sub.getValue().getRefinement(mcontext);
if (subRef != null) {
if (refinement == null) {
- refinement = new HashMap<>(4);
+ refinement = CollectionUtil.newHashMap(4);
}
refinement.put(sub.getKey(), subRef);
}
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
index e66a2d839b8..fbf5b18858e 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldMerger.java
@@ -19,9 +19,9 @@ package org.apache.solr.search.facet;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.SimpleOrderedMap;
// TODO: refactor more out to base class
@@ -185,7 +185,7 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
// same "missing" status as this facet, so no need to set it again
Map<String, Object> bucketRefinement = bucket.getRefinement(mcontext, tagsWithPartial);
if (bucketRefinement != null) {
- refinement = refinement == null ? new HashMap<>(2) : refinement;
+ refinement = refinement == null ? CollectionUtil.newHashMap(2) : refinement;
refinement.put(label, bucketRefinement);
}
return refinement;
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java b/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java
index 043230a324b..78f01106973 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetModule.java
@@ -21,7 +21,6 @@ import static org.apache.solr.common.util.Utils.fromJSONString;
import java.io.IOException;
import java.util.Collection;
import java.util.Date;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrResponse;
@@ -31,6 +30,7 @@ import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.handler.component.ResponseBuilder;
@@ -234,7 +234,7 @@ public class FacetModule extends SearchComponent {
shardsRefineRequest.purpose |= PURPOSE_REFINE_JSON_FACETS;
- Map<String, Object> finfo = new HashMap<>(1);
+ Map<String, Object> finfo = CollectionUtil.newHashMap(1);
finfo.put(FACET_REFINE, refinement);
// String finfoStr = JSONUtil.toJSON(finfo, -1); // this doesn't handle formatting of Date
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetRangeMerger.java b/solr/core/src/java/org/apache/solr/search/facet/FacetRangeMerger.java
index ea09ce06fe7..b0248d0e424 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetRangeMerger.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetRangeMerger.java
@@ -19,10 +19,10 @@ package org.apache.solr.search.facet;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.common.params.FacetParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.SimpleOrderedMap;
public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
@@ -107,7 +107,7 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
}
Map<String, Object> bucketRefinement = bucket.getRefinement(mcontext, tagsWithPartial);
if (bucketRefinement != null) {
- refinement = refinement == null ? new HashMap<>(2) : refinement;
+ refinement = refinement == null ? CollectionUtil.newHashMap(2) : refinement;
refinement.put(label, bucketRefinement);
}
return refinement;
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetRequestSortedMerger.java b/solr/core/src/java/org/apache/solr/search/facet/FacetRequestSortedMerger.java
index 07b67bf21da..63a28aa0829 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetRequestSortedMerger.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetRequestSortedMerger.java
@@ -23,10 +23,10 @@ import java.util.BitSet;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.SimpleOrderedMap;
// base class for facets that create a list of buckets that can be sorted
@@ -311,7 +311,7 @@ abstract class FacetRequestSortedMerger<FacetRequestT extends FacetRequestSorted
// higher level (i.e. we'll be in someone's missing bucket?)
// TODO: test with a sub-facet with a limit of 0 and something like a missing bucket
if (leafBuckets != null || partialBuckets != null || skipBuckets != null) {
- refinement = new HashMap<>(3);
+ refinement = CollectionUtil.newHashMap(3);
if (leafBuckets != null) refinement.put("_l", leafBuckets);
if (partialBuckets != null) refinement.put("_p", partialBuckets);
if (skipBuckets != null) refinement.put("_s", skipBuckets);
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 dad1e04c3a3..239e6c95e50 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
@@ -31,6 +31,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.FacetParams;
import org.apache.solr.common.params.RequiredSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.StrUtils;
import org.apache.solr.search.QueryParsing;
import org.apache.solr.search.SolrReturnFields;
@@ -122,8 +123,8 @@ public class LegacyFacet {
protected void addQueryFacet(String q) {
parseParams(FacetParams.FACET_QUERY, q);
- Map<String, Object> cmd = new HashMap<>(2);
- Map<String, Object> type = new HashMap<>(1);
+ Map<String, Object> cmd = CollectionUtil.newHashMap(2);
+ Map<String, Object> type = CollectionUtil.newHashMap(1);
type.put("query", cmd);
cmd.put("q", q);
addSub(key, type);
@@ -132,8 +133,8 @@ public class LegacyFacet {
protected void addRangeFacet(String field) {
parseParams(FacetParams.FACET_RANGE, field);
- Map<String, Object> cmd = new HashMap<>(5);
- Map<String, Object> type = new HashMap<>(1);
+ Map<String, Object> cmd = CollectionUtil.newHashMap(5);
+ Map<String, Object> type = CollectionUtil.newHashMap(1);
type.put("range", cmd);
String f = key;
@@ -191,7 +192,7 @@ public class LegacyFacet {
cmd.put(SORT, sort); // can be sort by one of our stats
}
- Map<String, Object> type = new HashMap<>(1);
+ Map<String, Object> type = CollectionUtil.newHashMap(1);
type.put("terms", cmd);
addSub(key, type);
diff --git a/solr/core/src/java/org/apache/solr/search/facet/UniqueAgg.java b/solr/core/src/java/org/apache/solr/search/facet/UniqueAgg.java
index 4d7db08781a..acf8596f1e5 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/UniqueAgg.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/UniqueAgg.java
@@ -18,13 +18,13 @@ package org.apache.solr.search.facet;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.apache.lucene.index.DocValues;
import org.apache.lucene.index.LeafReaderContext;
import org.apache.lucene.index.NumericDocValues;
import org.apache.lucene.index.SortedNumericDocValues;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.util.LongIterator;
@@ -81,11 +81,10 @@ public class UniqueAgg extends StrAggValueSource {
sumUnique += unique;
int valsListed = 0;
- @SuppressWarnings("unchecked")
List<?> vals = (List<?>) map.get(VALS);
if (vals != null) {
if (values == null) {
- values = new HashSet<>(vals.size() * 4);
+ values = CollectionUtil.newHashSet(vals.size() * 4);
}
values.addAll(vals);
valsListed = vals.size();
diff --git a/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java b/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java
index 4304a5dba99..8ca72d10878 100644
--- a/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java
+++ b/solr/core/src/java/org/apache/solr/search/grouping/distributed/shardresultserializer/SearchGroupsResultTransformer.java
@@ -19,7 +19,6 @@ package org.apache.solr.search.grouping.distributed.shardresultserializer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.lucene.search.Sort;
@@ -28,6 +27,7 @@ import org.apache.lucene.search.grouping.SearchGroup;
import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.BytesRefBuilder;
import org.apache.lucene.util.CharsRefBuilder;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.schema.SchemaField;
import org.apache.solr.search.SolrIndexSearcher;
@@ -109,7 +109,8 @@ public class SearchGroupsResultTransformer
@Override
public Map<String, SearchGroupsFieldCommandResult> transformToNative(
NamedList<NamedList<?>> shardResponse, Sort groupSort, Sort withinGroupSort, String shard) {
- final Map<String, SearchGroupsFieldCommandResult> result = new HashMap<>(shardResponse.size());
+ final Map<String, SearchGroupsFieldCommandResult> result =
+ CollectionUtil.newHashMap(shardResponse.size());
for (Map.Entry<String, NamedList<?>> command : shardResponse) {
List<SearchGroup<BytesRef>> searchGroups = new ArrayList<>();
NamedList<?> topGroupsAndGroupCount = command.getValue();
diff --git a/solr/core/src/java/org/apache/solr/search/join/ScoreModeParser.java b/solr/core/src/java/org/apache/solr/search/join/ScoreModeParser.java
index 050ac7706af..ed3dec8e2ba 100644
--- a/solr/core/src/java/org/apache/solr/search/join/ScoreModeParser.java
+++ b/solr/core/src/java/org/apache/solr/search/join/ScoreModeParser.java
@@ -17,10 +17,10 @@
package org.apache.solr.search.join;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.apache.lucene.search.join.ScoreMode;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.search.SyntaxError;
class ScoreModeParser {
@@ -29,7 +29,7 @@ class ScoreModeParser {
private ScoreModeParser() {}
private static Map<String, ScoreMode> getLowerAndCapitalCaseMap() {
- Map<String, ScoreMode> map = new HashMap<>(ScoreMode.values().length * 2);
+ Map<String, ScoreMode> map = CollectionUtil.newHashMap(ScoreMode.values().length * 2);
for (ScoreMode s : ScoreMode.values()) {
map.put(s.name().toLowerCase(Locale.ROOT), s);
map.put(s.name(), s);
diff --git a/solr/core/src/java/org/apache/solr/search/mlt/MLTContentQParserPlugin.java b/solr/core/src/java/org/apache/solr/search/mlt/MLTContentQParserPlugin.java
index 5c79f13d421..246497b1303 100644
--- a/solr/core/src/java/org/apache/solr/search/mlt/MLTContentQParserPlugin.java
+++ b/solr/core/src/java/org/apache/solr/search/mlt/MLTContentQParserPlugin.java
@@ -20,12 +20,12 @@ import java.io.IOException;
import java.io.StringReader;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
import org.apache.lucene.queries.mlt.MoreLikeThis;
import org.apache.lucene.search.Query;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.search.QParser;
import org.apache.solr.search.QParserPlugin;
@@ -58,7 +58,7 @@ public class MLTContentQParserPlugin extends QParserPlugin {
return moreLikeThis.like(fieldNames[0], new StringReader(content));
} else {
Collection<Object> streamValue = Collections.singleton(content);
- Map<String, Collection<Object>> multifieldDoc = new HashMap<>(fieldNames.length);
+ Map<String, Collection<Object>> multifieldDoc = CollectionUtil.newHashMap(fieldNames.length);
for (String field : fieldNames) {
multifieldDoc.put(field, streamValue);
}
diff --git a/solr/core/src/java/org/apache/solr/uninverting/FieldCacheImpl.java b/solr/core/src/java/org/apache/solr/uninverting/FieldCacheImpl.java
index c4d193b79f5..840c3fba3ee 100644
--- a/solr/core/src/java/org/apache/solr/uninverting/FieldCacheImpl.java
+++ b/solr/core/src/java/org/apache/solr/uninverting/FieldCacheImpl.java
@@ -67,12 +67,13 @@ public class FieldCacheImpl implements FieldCache {
}
private synchronized void init() {
- caches = new HashMap<>(6);
- caches.put(Long.TYPE, new LongCache(this));
- caches.put(BinaryDocValues.class, new BinaryDocValuesCache(this));
- caches.put(SortedDocValues.class, new SortedDocValuesCache(this));
- caches.put(DocTermOrds.class, new DocTermOrdsCache(this));
- caches.put(DocsWithFieldCache.class, new DocsWithFieldCache(this));
+ caches =
+ Map.ofEntries(
+ Map.entry(Long.TYPE, new LongCache(this)),
+ Map.entry(BinaryDocValues.class, new BinaryDocValuesCache(this)),
+ Map.entry(SortedDocValues.class, new SortedDocValuesCache(this)),
+ Map.entry(DocTermOrds.class, new DocTermOrdsCache(this)),
+ Map.entry(DocsWithFieldCache.class, new DocsWithFieldCache(this)));
}
@Override
diff --git a/solr/core/src/java/org/apache/solr/update/TransactionLog.java b/solr/core/src/java/org/apache/solr/update/TransactionLog.java
index 56f694314ee..5c28297fa09 100644
--- a/solr/core/src/java/org/apache/solr/update/TransactionLog.java
+++ b/solr/core/src/java/org/apache/solr/update/TransactionLog.java
@@ -38,6 +38,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.DataInputInputStream;
import org.apache.solr.common.util.FastInputStream;
import org.apache.solr.common.util.FastOutputStream;
@@ -295,7 +296,7 @@ public class TransactionLog implements Closeable {
synchronized (this) {
globalStringList = (List<String>) header.get("strings");
- globalStringMap = new HashMap<>(globalStringList.size());
+ globalStringMap = CollectionUtil.newHashMap(globalStringList.size());
for (int i = 0; i < globalStringList.size(); i++) {
globalStringMap.put(globalStringList.get(i), i + 1);
}
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index d78af4fdb7f..ae12fe9a3b8 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -61,9 +61,11 @@ import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.SolrNamedThreadFactory;
+import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.common.util.TimeSource;
import org.apache.solr.core.PluginInfo;
import org.apache.solr.core.SolrCore;
@@ -225,12 +227,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
// keep track of deletes only... this is not updated on an add
protected LinkedHashMap<BytesRef, LogPtr> oldDeletes =
- new LinkedHashMap<>(numDeletesToKeep) {
- @Override
- protected boolean removeEldestEntry(Map.Entry<BytesRef, LogPtr> eldest) {
- return size() > numDeletesToKeep;
- }
- };
+ new OldDeletesLinkedHashMap(this.numDeletesToKeep);
/** Holds the query and the version for a DeleteByQuery command */
public static class DBQ {
@@ -1601,7 +1598,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
updateList = new ArrayList<>(logList.size());
deleteByQueryList = new ArrayList<>();
deleteList = new ArrayList<>();
- updates = new HashMap<>(numRecordsToKeep);
+ updates = CollectionUtil.newHashMap(numRecordsToKeep);
for (TransactionLog oldLog : logList) {
List<Update> updatesForLog = new ArrayList<>();
@@ -2389,4 +2386,19 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
versionInfo.unblockUpdates();
}
}
+
+ @SuppressForbidden(reason = "extends linkedhashmap")
+ private static class OldDeletesLinkedHashMap extends LinkedHashMap<BytesRef, LogPtr> {
+ private final int numDeletesToKeepInternal;
+
+ public OldDeletesLinkedHashMap(int numDeletesToKeep) {
+ super(numDeletesToKeep);
+ this.numDeletesToKeepInternal = numDeletesToKeep;
+ }
+
+ @Override
+ protected boolean removeEldestEntry(Map.Entry<BytesRef, LogPtr> eldest) {
+ return size() > numDeletesToKeepInternal;
+ }
+ }
}
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
index c1eee8572c2..ab6ecab3d29 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
@@ -57,6 +57,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.Utils;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.request.SolrQueryRequest;
@@ -806,7 +807,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
String[] skipList = req.getParams().getParams(TEST_DISTRIB_SKIP_SERVERS);
Set<String> skipListSet = null;
if (skipList != null) {
- skipListSet = new HashSet<>(skipList.length);
+ skipListSet = CollectionUtil.newHashSet(skipList.length);
skipListSet.addAll(Arrays.asList(skipList));
log.info("test.distrib.skip.servers was found and contains:{}", skipListSet);
}
@@ -980,7 +981,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
String[] skipList = req.getParams().getParams(TEST_DISTRIB_SKIP_SERVERS);
Set<String> skipListSet = null;
if (skipList != null) {
- skipListSet = new HashSet<>(skipList.length);
+ skipListSet = CollectionUtil.newHashSet(skipList.length);
skipListSet.addAll(Arrays.asList(skipList));
log.info("test.distrib.skip.servers was found and contains:{}", skipListSet);
}
diff --git a/solr/core/src/java/org/apache/solr/util/DateMathParser.java b/solr/core/src/java/org/apache/solr/util/DateMathParser.java
index 8246e696ace..89a1a1516b5 100644
--- a/solr/core/src/java/org/apache/solr/util/DateMathParser.java
+++ b/solr/core/src/java/org/apache/solr/util/DateMathParser.java
@@ -29,7 +29,6 @@ import java.time.format.DateTimeParseException;
import java.time.temporal.ChronoUnit;
import java.util.Calendar;
import java.util.Date;
-import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;
@@ -133,28 +132,26 @@ public class DateMathParser {
// we probably need to change "Locale loc" to default to something
// from a param via SolrRequestInfo as well.
- Map<String, ChronoUnit> units = new HashMap<>(13);
- units.put("YEAR", ChronoUnit.YEARS);
- units.put("YEARS", ChronoUnit.YEARS);
- units.put("MONTH", ChronoUnit.MONTHS);
- units.put("MONTHS", ChronoUnit.MONTHS);
- units.put("DAY", ChronoUnit.DAYS);
- units.put("DAYS", ChronoUnit.DAYS);
- units.put("DATE", ChronoUnit.DAYS);
- units.put("HOUR", ChronoUnit.HOURS);
- units.put("HOURS", ChronoUnit.HOURS);
- units.put("MINUTE", ChronoUnit.MINUTES);
- units.put("MINUTES", ChronoUnit.MINUTES);
- units.put("SECOND", ChronoUnit.SECONDS);
- units.put("SECONDS", ChronoUnit.SECONDS);
- units.put("MILLI", ChronoUnit.MILLIS);
- units.put("MILLIS", ChronoUnit.MILLIS);
- units.put("MILLISECOND", ChronoUnit.MILLIS);
- units.put("MILLISECONDS", ChronoUnit.MILLIS);
-
// NOTE: Maybe eventually support NANOS
- return units;
+ return Map.ofEntries(
+ Map.entry("YEAR", ChronoUnit.YEARS),
+ Map.entry("YEARS", ChronoUnit.YEARS),
+ Map.entry("MONTH", ChronoUnit.MONTHS),
+ Map.entry("MONTHS", ChronoUnit.MONTHS),
+ Map.entry("DAY", ChronoUnit.DAYS),
+ Map.entry("DAYS", ChronoUnit.DAYS),
+ Map.entry("DATE", ChronoUnit.DAYS),
+ Map.entry("HOUR", ChronoUnit.HOURS),
+ Map.entry("HOURS", ChronoUnit.HOURS),
+ Map.entry("MINUTE", ChronoUnit.MINUTES),
+ Map.entry("MINUTES", ChronoUnit.MINUTES),
+ Map.entry("SECOND", ChronoUnit.SECONDS),
+ Map.entry("SECONDS", ChronoUnit.SECONDS),
+ Map.entry("MILLI", ChronoUnit.MILLIS),
+ Map.entry("MILLIS", ChronoUnit.MILLIS),
+ Map.entry("MILLISECOND", ChronoUnit.MILLIS),
+ Map.entry("MILLISECONDS", ChronoUnit.MILLIS));
}
/**
diff --git a/solr/core/src/java/org/apache/solr/util/ExportTool.java b/solr/core/src/java/org/apache/solr/util/ExportTool.java
index 1f611a8e03e..47137ab0258 100644
--- a/solr/core/src/java/org/apache/solr/util/ExportTool.java
+++ b/solr/core/src/java/org/apache/solr/util/ExportTool.java
@@ -39,7 +39,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -75,6 +74,7 @@ import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.CursorMarkParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.JavaBinCodec;
import org.apache.solr.common.util.NamedList;
@@ -269,7 +269,7 @@ public class ExportTool extends SolrCLI.ToolBase {
@Override
public synchronized void accept(SolrDocument doc) throws IOException {
charArr.reset();
- Map<String, Object> m = new LinkedHashMap<>(doc.size());
+ Map<String, Object> m = CollectionUtil.newLinkedHashMap(doc.size());
doc.forEach(
(s, field) -> {
if (s.equals("_version_") || s.equals("_roor_")) return;
diff --git a/solr/core/src/java/org/apache/solr/util/MapListener.java b/solr/core/src/java/org/apache/solr/util/MapListener.java
index ce1186b6876..60d02b26031 100644
--- a/solr/core/src/java/org/apache/solr/util/MapListener.java
+++ b/solr/core/src/java/org/apache/solr/util/MapListener.java
@@ -17,9 +17,9 @@
package org.apache.solr.util;
import com.google.common.collect.ForwardingMap;
-import java.util.HashSet;
import java.util.Map;
import java.util.Set;
+import org.apache.solr.common.util.CollectionUtil;
/**
* Wraps another map, keeping track of each key that was seen via {@link #get(Object)} or {@link
@@ -32,7 +32,7 @@ public class MapListener<K, V> extends ForwardingMap<K, V> {
public MapListener(Map<K, V> target) {
this.target = target;
- seenKeys = new HashSet<>(target.size());
+ seenKeys = CollectionUtil.newHashSet(target.size());
}
public Set<K> getSeenKeys() {
diff --git a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
index e70f8bd6871..0394ed78fbf 100644
--- a/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrPluginUtils.java
@@ -53,6 +53,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -477,7 +478,7 @@ public class SolrPluginUtils {
if (null == fieldLists || 0 == fieldLists.length) {
return new HashMap<>();
}
- Map<String, Float> out = new HashMap<>(7);
+ Map<String, Float> out = CollectionUtil.newHashMap(7);
for (String in : fieldLists) {
if (null == in) {
continue;
@@ -823,7 +824,7 @@ public class SolrPluginUtils {
* Where we store a map from field name we expect to see in our query string, to Alias object
* containing the fields to use in our DisjunctionMaxQuery and the tiebreaker to use.
*/
- protected Map<String, Alias> aliases = new HashMap<>(3);
+ protected Map<String, Alias> aliases = CollectionUtil.newHashMap(3);
public DisjunctionMaxQueryParser(QParser qp, String defaultField) {
super(qp, defaultField);
diff --git a/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpListenerFactory.java b/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpListenerFactory.java
index a6f079a1ed2..0e90657f7d2 100644
--- a/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpListenerFactory.java
+++ b/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpListenerFactory.java
@@ -20,10 +20,10 @@ package org.apache.solr.util.stats;
import static org.apache.solr.metrics.SolrMetricManager.mkName;
import com.codahale.metrics.Timer;
-import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.apache.solr.client.solrj.impl.HttpListenerFactory;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.metrics.SolrMetricProducer;
import org.apache.solr.metrics.SolrMetricsContext;
import org.eclipse.jetty.client.api.Request;
@@ -61,7 +61,8 @@ public class InstrumentedHttpListenerFactory implements SolrMetricProducer, Http
return mkName(schemeHostPort + "." + methodNameString(request), scope);
};
- public static final Map<String, NameStrategy> KNOWN_METRIC_NAME_STRATEGIES = new HashMap<>(3);
+ public static final Map<String, NameStrategy> KNOWN_METRIC_NAME_STRATEGIES =
+ CollectionUtil.newHashMap(3);
static {
KNOWN_METRIC_NAME_STRATEGIES.put("queryLessURLAndMethod", QUERYLESS_URL_AND_METHOD);
diff --git a/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpRequestExecutor.java b/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpRequestExecutor.java
index a555d143e15..c796fe8f57c 100644
--- a/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpRequestExecutor.java
+++ b/solr/core/src/java/org/apache/solr/util/stats/InstrumentedHttpRequestExecutor.java
@@ -22,7 +22,6 @@ import static org.apache.solr.metrics.SolrMetricManager.mkName;
import com.codahale.metrics.Timer;
import java.io.IOException;
import java.net.URISyntaxException;
-import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import org.apache.http.HttpClientConnection;
@@ -34,6 +33,7 @@ import org.apache.http.client.methods.HttpRequestWrapper;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.protocol.HttpContext;
import org.apache.http.protocol.HttpRequestExecutor;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.metrics.SolrMetricProducer;
import org.apache.solr.metrics.SolrMetricsContext;
@@ -100,7 +100,7 @@ public class InstrumentedHttpRequestExecutor extends HttpRequestExecutor
};
public static final Map<String, HttpClientMetricNameStrategy> KNOWN_METRIC_NAME_STRATEGIES =
- new HashMap<>(3);
+ CollectionUtil.newHashMap(3);
static {
KNOWN_METRIC_NAME_STRATEGIES.put("queryLessURLAndMethod", QUERYLESS_URL_AND_METHOD);
diff --git a/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java
index c7bca1b9aa6..a9dca90c98f 100644
--- a/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java
+++ b/solr/modules/hdfs/src/java/org/apache/solr/hdfs/update/HdfsTransactionLog.java
@@ -19,7 +19,6 @@ package org.apache.solr.hdfs.update;
import java.io.IOException;
import java.lang.invoke.MethodHandles;
import java.util.Collection;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -30,6 +29,7 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.DataInputInputStream;
import org.apache.solr.common.util.FastInputStream;
import org.apache.solr.common.util.FastOutputStream;
@@ -196,7 +196,7 @@ public class HdfsTransactionLog extends TransactionLog {
synchronized (this) {
globalStringList = (List<String>) header.get("strings");
- globalStringMap = new HashMap<>(globalStringList.size());
+ globalStringMap = CollectionUtil.newHashMap(globalStringList.size());
for (int i = 0; i < globalStringList.size(); i++) {
globalStringMap.put(globalStringList.get(i), i + 1);
}
diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/Tuple.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/Tuple.java
index 54da785fa3f..28d680e16b9 100644
--- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/Tuple.java
+++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/Tuple.java
@@ -28,6 +28,7 @@ import java.util.Map;
import java.util.stream.Collectors;
import org.apache.solr.common.MapWriter;
import org.apache.solr.common.params.StreamParams;
+import org.apache.solr.common.util.CollectionUtil;
/**
* A simple abstraction of a record containing key/value pairs. Convenience methods are provided for
@@ -52,7 +53,7 @@ public class Tuple implements Cloneable, MapWriter {
*
* @deprecated use {@link #getFields()} instead of this public field.
*/
- @Deprecated public Map<String, Object> fields = new HashMap<>(2);
+ @Deprecated public Map<String, Object> fields = CollectionUtil.newHashMap(2);
/**
* External serializable field names.
*
diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
index e359afb8367..4f39a9e668b 100644
--- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
+++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/FacetStream.java
@@ -19,7 +19,6 @@ package org.apache.solr.client.solrj.io.stream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -52,6 +51,7 @@ import org.apache.solr.client.solrj.io.stream.metrics.Metric;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
/**
@@ -1061,7 +1061,7 @@ public class FacetStream extends TupleStream implements Expressible, ParallelMet
* @return A mapping of fields produced by the rollup stream to their output name.
*/
protected Map<String, String> getRollupSelectFields(Metric[] rollupMetrics) {
- Map<String, String> map = new HashMap<>(rollupMetrics.length * 2);
+ Map<String, String> map = CollectionUtil.newHashMap(rollupMetrics.length * 2);
for (Bucket b : buckets) {
String key = b.toString();
map.put(key, key);
diff --git a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java
index 275482dda89..be3d6cdf953 100644
--- a/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java
+++ b/solr/solrj-streaming/src/java/org/apache/solr/client/solrj/io/stream/StatsStream.java
@@ -22,7 +22,6 @@ import static org.apache.solr.client.solrj.io.stream.FacetStream.defaultTieredEn
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -51,6 +50,7 @@ import org.apache.solr.client.solrj.io.stream.metrics.Metric;
import org.apache.solr.client.solrj.request.QueryRequest;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.NamedList;
/**
@@ -421,7 +421,7 @@ public class StatsStream extends TupleStream implements Expressible, ParallelMet
// Map the rollup metric to the original metric name so that we can project out the correct field
// names in the tuple
protected Map<String, String> getRollupSelectFields(Metric[] rollupMetrics) {
- Map<String, String> map = new HashMap<>(rollupMetrics.length * 2);
+ Map<String, String> map = CollectionUtil.newHashMap(rollupMetrics.length * 2);
for (Metric m : rollupMetrics) {
String[] cols = m.getColumns();
map.put(m.getIdentifier(), cols != null && cols.length > 0 ? cols[0] : "*");
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
index 10360292dc0..a9700ec9a20 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/CloudSolrClient.java
@@ -75,6 +75,7 @@ import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.Hash;
import org.apache.solr.common.util.NamedList;
@@ -474,7 +475,8 @@ public abstract class CloudSolrClient extends SolrClient {
long start = System.nanoTime();
if (parallelUpdates) {
- final Map<String, Future<NamedList<?>>> responseFutures = new HashMap<>(routes.size());
+ final Map<String, Future<NamedList<?>>> responseFutures =
+ CollectionUtil.newHashMap(routes.size());
for (final Map.Entry<String, ? extends LBSolrClient.Req> entry : routes.entrySet()) {
final String url = entry.getKey();
final LBSolrClient.Req lbRequest = entry.getValue();
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
index 26dcdebc97d..a2423a788c2 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
@@ -26,7 +26,6 @@ import java.lang.invoke.MethodHandles;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -36,6 +35,7 @@ import org.apache.solr.common.SolrInputField;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.ShardParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.DataInputInputStream;
import org.apache.solr.common.util.JavaBinCodec;
import org.apache.solr.common.util.NamedList;
@@ -221,7 +221,7 @@ public class JavaBinUpdateRequestCodec {
@Override
protected SolrInputDocument createSolrInputDocument(int sz) {
- return new MaskCharSequenceSolrInputDoc(new LinkedHashMap<>(sz));
+ return new MaskCharSequenceSolrInputDoc(CollectionUtil.newLinkedHashMap(sz));
}
@Override
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java b/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
index d41960c002b..3534558bba2 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/request/UpdateRequest.java
@@ -42,6 +42,7 @@ import org.apache.solr.common.cloud.DocRouter;
import org.apache.solr.common.cloud.Slice;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.UpdateParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.common.util.XML;
@@ -141,7 +142,7 @@ public class UpdateRequest extends AbstractUpdateRequest {
if (documents == null) {
documents = new LinkedHashMap<>();
}
- Map<String, Object> params = new HashMap<>(2);
+ Map<String, Object> params = CollectionUtil.newHashMap(2);
if (commitWithin != null) params.put(COMMIT_WITHIN, commitWithin);
if (overwrite != null) params.put(OVERWRITE, overwrite);
@@ -182,7 +183,8 @@ public class UpdateRequest extends AbstractUpdateRequest {
if (deleteById == null) {
deleteById = new LinkedHashMap<>();
}
- Map<String, Object> params = (route == null && version == null) ? null : new HashMap<>(1);
+ Map<String, Object> params =
+ (route == null && version == null) ? null : CollectionUtil.newHashMap(1);
if (version != null) params.put(VER, version);
if (route != null) params.put(_ROUTE_, route);
deleteById.put(id, params);
diff --git a/solr/solrj/src/java/org/apache/solr/common/LinkedHashMapWriter.java b/solr/solrj/src/java/org/apache/solr/common/LinkedHashMapWriter.java
index 3d8adf2caae..613720f1142 100644
--- a/solr/solrj/src/java/org/apache/solr/common/LinkedHashMapWriter.java
+++ b/solr/solrj/src/java/org/apache/solr/common/LinkedHashMapWriter.java
@@ -21,9 +21,11 @@ import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import org.apache.solr.common.util.SuppressForbidden;
public class LinkedHashMapWriter<V> extends LinkedHashMap<String, V> implements MapWriter {
+ @SuppressForbidden(reason = "extends LinkedHashMap")
public LinkedHashMapWriter(int initialCapacity) {
super(initialCapacity);
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java b/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java
index cda0b66a9e6..843bc1343e7 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/ClusterState.java
@@ -22,7 +22,6 @@ import java.lang.invoke.MethodHandles;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
@@ -35,6 +34,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.cloud.DocCollection.CollectionStateProps;
import org.apache.solr.common.cloud.Replica.ReplicaStateProps;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.Utils;
import org.noggit.JSONParser;
import org.noggit.JSONWriter;
@@ -65,7 +65,7 @@ public class ClusterState implements JSONWriter.Writable {
}
private static Map<String, CollectionRef> getRefMap(Map<String, DocCollection> collectionStates) {
- Map<String, CollectionRef> collRefs = new LinkedHashMap<>(collectionStates.size());
+ Map<String, CollectionRef> collRefs = CollectionUtil.newLinkedHashMap(collectionStates.size());
for (Entry<String, DocCollection> entry : collectionStates.entrySet()) {
final DocCollection c = entry.getValue();
collRefs.put(entry.getKey(), new CollectionRef(c));
@@ -78,7 +78,7 @@ public class ClusterState implements JSONWriter.Writable {
* loaded (parameter order different from constructor above to have different erasures)
*/
public ClusterState(Map<String, CollectionRef> collectionStates, Set<String> liveNodes) {
- this.liveNodes = new HashSet<>(liveNodes.size());
+ this.liveNodes = CollectionUtil.newHashSet(liveNodes.size());
this.liveNodes.addAll(liveNodes);
this.collectionStates = new LinkedHashMap<>(collectionStates);
this.immutableCollectionStates = Collections.unmodifiableMap(this.collectionStates);
@@ -158,7 +158,7 @@ public class ClusterState implements JSONWriter.Writable {
* @return a map of collection name vs DocCollection object
*/
public Map<String, DocCollection> getCollectionsMap() {
- Map<String, DocCollection> result = new HashMap<>(collectionStates.size());
+ Map<String, DocCollection> result = CollectionUtil.newHashMap(collectionStates.size());
for (Entry<String, CollectionRef> entry : collectionStates.entrySet()) {
DocCollection collection = entry.getValue().get();
if (collection != null) {
@@ -246,7 +246,7 @@ public class ClusterState implements JSONWriter.Writable {
Map<String, Object> stateMap,
Set<String> liveNodes,
DocCollection.PrsSupplier prsSupplier) {
- Map<String, CollectionRef> collections = new LinkedHashMap<>(stateMap.size());
+ Map<String, CollectionRef> collections = CollectionUtil.newLinkedHashMap(stateMap.size());
for (Entry<String, Object> entry : stateMap.entrySet()) {
String collectionName = entry.getKey();
@SuppressWarnings({"unchecked"})
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
index ba0a82ba6b5..55068c70aac 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/DocCollection.java
@@ -33,6 +33,7 @@ import java.util.function.BiConsumer;
import java.util.function.BiPredicate;
import java.util.function.Supplier;
import org.apache.solr.common.cloud.Replica.ReplicaStateProps;
+import org.apache.solr.common.util.CollectionUtil;
import org.noggit.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -327,7 +328,7 @@ public class DocCollection extends ZkNodeProps implements Iterable<Slice> {
@Override
public void write(JSONWriter jsonWriter) {
- LinkedHashMap<String, Object> all = new LinkedHashMap<>(slices.size() + 1);
+ LinkedHashMap<String, Object> all = CollectionUtil.newLinkedHashMap(slices.size() + 1);
all.putAll(propMap);
all.put(CollectionStateProps.SHARDS, slices);
jsonWriter.write(all);
diff --git a/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java b/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java
index 76539e70ead..197d10199cc 100644
--- a/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java
+++ b/solr/solrj/src/java/org/apache/solr/common/cloud/Slice.java
@@ -32,6 +32,7 @@ import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import org.apache.solr.common.cloud.Replica.Type;
+import org.apache.solr.common.util.CollectionUtil;
import org.noggit.JSONWriter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -64,7 +65,7 @@ public class Slice extends ZkNodeProps implements Iterable<Replica> {
public static Map<String, Slice> loadAllFromMap(
String collection, Map<String, Object> genericSlices) {
if (genericSlices == null) return Collections.emptyMap();
- Map<String, Slice> result = new LinkedHashMap<>(genericSlices.size());
+ Map<String, Slice> result = CollectionUtil.newLinkedHashMap(genericSlices.size());
for (Map.Entry<String, Object> entry : genericSlices.entrySet()) {
String name = entry.getKey();
Object val = entry.getValue();
@@ -159,7 +160,7 @@ public class Slice extends ZkNodeProps implements Iterable<Replica> {
@SuppressWarnings({"unchecked", "rawtypes"})
public Slice(
String name, Map<String, Replica> replicas, Map<String, Object> props, String collection) {
- super(props == null ? new LinkedHashMap<>(2) : new LinkedHashMap<>(props));
+ super(props == null ? CollectionUtil.newLinkedHashMap(2) : new LinkedHashMap<>(props));
this.name = name;
this.collection = collection;
@@ -221,8 +222,8 @@ public class Slice extends ZkNodeProps implements Iterable<Replica> {
@SuppressWarnings({"unchecked"})
private Map<String, Replica> makeReplicas(
String collection, String slice, Map<String, Object> genericReplicas) {
- if (genericReplicas == null) return new HashMap<>(1);
- Map<String, Replica> result = new LinkedHashMap<>(genericReplicas.size());
+ if (genericReplicas == null) return CollectionUtil.newHashMap(1);
+ Map<String, Replica> result = CollectionUtil.newLinkedHashMap(genericReplicas.size());
for (Map.Entry<String, Object> entry : genericReplicas.entrySet()) {
String name = entry.getKey();
Object val = entry.getValue();
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ByteArrayUtf8CharSequence.java b/solr/solrj/src/java/org/apache/solr/common/util/ByteArrayUtf8CharSequence.java
index 531fb9c8105..8379b5051c1 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ByteArrayUtf8CharSequence.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ByteArrayUtf8CharSequence.java
@@ -20,7 +20,6 @@ package org.apache.solr.common.util;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.function.Function;
@@ -207,7 +206,7 @@ public class ByteArrayUtf8CharSequence implements Utf8CharSequence {
if (needsCopy) {
Collection<Object> copy = null;
if (vals instanceof Set) {
- copy = new HashSet<>(vals.size());
+ copy = CollectionUtil.newHashSet(vals.size());
} else {
copy = new ArrayList<>(vals.size());
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/CollectionUtil.java b/solr/solrj/src/java/org/apache/solr/common/util/CollectionUtil.java
index 06df651ebb7..8d9a96c2574 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/CollectionUtil.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/CollectionUtil.java
@@ -18,12 +18,14 @@ package org.apache.solr.common.util;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedHashMap;
/**
* Methods for creating collections with exact sizes.
*
* @lucene.internal
*/
+@SuppressForbidden(reason = "This class properly sizes the collections")
public final class CollectionUtil {
private CollectionUtil() {} // no instance
@@ -35,10 +37,19 @@ public final class CollectionUtil {
public static <K, V> HashMap<K, V> newHashMap(int size) {
// With Lucene 9.5 - we should replace this with
// org.apache.lucene.util.CollectionUtil.newHashMap(int size)
- // This should be replaced with HashMap.newHashMap when Solr moves to jdk19 minimum version
+ // Replace with HashMap.newHashMap when Solr moves to minimum jdk19
return new HashMap<>((int) (size / 0.75f) + 1);
}
+ /**
+ * Returns a new {@link LinkedHashMap} sized to contain {@code size} items without resizing the
+ * internal array.
+ */
+ public static <K, V> LinkedHashMap<K, V> newLinkedHashMap(int size) {
+ // Replace with LinkedHashMap.newLinkedHashMap when Solr moves to minimum jdk19
+ return new LinkedHashMap<>((int) (size / 0.75f) + 1);
+ }
+
/**
* Returns a new {@link HashSet} sized to contain {@code size} items without resizing the internal
* array.
@@ -46,7 +57,7 @@ public final class CollectionUtil {
public static <E> HashSet<E> newHashSet(int size) {
// With Lucene 9.5 - we should replace this with
// org.apache.lucene.util.CollectionUtil.newHashSet(int size)
- // This should be replaced with HashSet.newHashSet when Solr moves to jdk19 minimum version
+ // Replace with HashSet.newHashSet when Solr moves to minimum jdk19
return new HashSet<>((int) (size / 0.75f) + 1);
}
}
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java b/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
index 15397556889..66386d21e52 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/CommandOperation.java
@@ -223,7 +223,7 @@ public class CommandOperation {
List<CommandOperation> operations = new ArrayList<>();
final HashMap<Object, Object> map =
- new HashMap<>(0) {
+ new HashMap<>() {
@Override
public Object put(Object key, Object value) {
List<?> vals = null;
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/FastJavaBinDecoder.java b/solr/solrj/src/java/org/apache/solr/common/util/FastJavaBinDecoder.java
index 5429c9b936b..06be49fc8de 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/FastJavaBinDecoder.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/FastJavaBinDecoder.java
@@ -54,7 +54,6 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.solr.common.SolrDocument;
@@ -783,7 +782,7 @@ public class FastJavaBinDecoder implements DataEntry.FastDecoder {
if (e.type().isContainer) {
Object ctx =
e.type() == DataEntry.Type.KEYVAL_ITER
- ? new LinkedHashMap(getSize(e))
+ ? CollectionUtil.newLinkedHashMap(getSize(e))
: new ArrayList(getSize(e));
if (e.ctx() != null) {
if (e.isKeyValEntry()) {
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 abe9c9d8619..aaf955b0aac 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
@@ -571,7 +571,7 @@ public class JavaBinCodec implements PushWriter {
public SolrDocument readSolrDocument(DataInputInputStream dis) throws IOException {
tagByte = dis.readByte();
int size = readSize(dis);
- SolrDocument doc = new SolrDocument(new LinkedHashMap<>(size));
+ SolrDocument doc = new SolrDocument(CollectionUtil.newLinkedHashMap(size));
for (int i = 0; i < size; i++) {
String fieldName;
Object obj = readVal(dis); // could be a field name, or a child document
@@ -658,7 +658,7 @@ public class JavaBinCodec implements PushWriter {
}
protected SolrInputDocument createSolrInputDocument(int sz) {
- return new SolrInputDocument(new LinkedHashMap<>(sz));
+ return new SolrInputDocument(CollectionUtil.newLinkedHashMap(sz));
}
static final Predicate<CharSequence> IGNORECHILDDOCS =
@@ -694,7 +694,7 @@ public class JavaBinCodec implements PushWriter {
* @param size expected size, -1 means unknown size
*/
protected Map<Object, Object> newMap(int size) {
- return size < 0 ? new LinkedHashMap<>() : new LinkedHashMap<>(size);
+ return size < 0 ? new LinkedHashMap<>() : CollectionUtil.newLinkedHashMap(size);
}
public Map<Object, Object> readMap(DataInputInputStream dis) throws IOException {
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java b/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java
index 4837736f103..1023689b3bc 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/JsonSchemaValidator.java
@@ -167,7 +167,7 @@ class TypeValidator extends Validator<Object> {
TypeValidator(Map<?, ?> schema, Object type) {
super(schema, type);
- types = new HashSet<>(1);
+ types = CollectionUtil.newHashSet(1);
if (type instanceof List) {
for (Object t : (List) type) {
types.add(getType(t.toString()));
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 f506cb56b81..6abff958f77 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
@@ -18,7 +18,6 @@
package org.apache.solr.common.util;
import java.io.IOException;
-import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
@@ -343,7 +342,7 @@ public interface JsonTextWriter extends TextWriter {
// Disad: this is ambiguous with a real single value that happens to be an array
//
// Both of these mappings have ambiguities.
- HashMap<String, Integer> repeats = new HashMap<>(4);
+ Map<String, Integer> repeats = CollectionUtil.newHashMap(4);
boolean first = true;
for (int i = 0; i < sz; i++) {
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 1a3a737fd2a..46c8da7d9b4 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
@@ -110,8 +110,8 @@ public class Utils {
} else {
copy =
map instanceof LinkedHashMap
- ? new LinkedHashMap<>(map.size())
- : new HashMap<>(map.size());
+ ? CollectionUtil.newLinkedHashMap(map.size())
+ : CollectionUtil.newHashMap(map.size());
}
for (Object o : map.entrySet()) {
Map.Entry<?, ?> e = (Map.Entry<?, ?>) o;
diff --git a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
index 769524bbcf2..bd678bf5161 100644
--- a/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
+++ b/solr/solrj/src/java/org/apache/solr/common/util/ValidatingJsonMap.java
@@ -78,7 +78,7 @@ public class ValidatingJsonMap implements Map<String, Object>, NavigableObject {
}
public ValidatingJsonMap(int i) {
- delegate = new LinkedHashMap<>(i);
+ delegate = CollectionUtil.newLinkedHashMap(i);
}
public ValidatingJsonMap() {
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 acc0a27c5eb..1b498255e08 100644
--- a/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
+++ b/solr/test-framework/src/java/org/apache/solr/BaseDistributedSearchTestCase.java
@@ -30,7 +30,6 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
-import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
@@ -60,6 +59,7 @@ import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
+import org.apache.solr.common.util.CollectionUtil;
import org.apache.solr.common.util.ExecutorUtil;
import org.apache.solr.common.util.IOUtils;
import org.apache.solr.common.util.NamedList;
@@ -809,14 +809,12 @@ public abstract class BaseDistributedSearchTestCase extends SolrTestCaseJ4 {
boolean ordered = (flags & UNORDERED) == 0;
if (!ordered) {
- @SuppressWarnings({"rawtypes"})
- Map mapA = new HashMap(a.size());
+ Map<String, Object> mapA = CollectionUtil.newHashMap(a.size());
for (int i = 0; i < a.size(); i++) {
Object prev = mapA.put(a.getName(i), a.getVal(i));
}
- @SuppressWarnings({"rawtypes"})
- Map mapB = new HashMap(b.size());
+ Map<String, Object> mapB = CollectionUtil.newHashMap(b.size());
for (int i = 0; i < b.size(); i++) {
Object prev = mapB.put(b.getName(i), b.getVal(i));
}