You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@solr.apache.org by md...@apache.org on 2021/07/07 20:15:43 UTC

[solr] branch main updated: SOLR-15385 RawTypes Part V (#196)

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

mdrob 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 201d56b  SOLR-15385 RawTypes Part V (#196)
201d56b is described below

commit 201d56b350fa1b4e5f8361618f898a2155240c72
Author: Mike Drob <md...@apache.org>
AuthorDate: Wed Jul 7 13:15:36 2021 -0700

    SOLR-15385 RawTypes Part V (#196)
---
 .../src/java/org/apache/solr/api/V2HttpCall.java   |  5 ++-
 .../solr/cloud/api/collections/BackupCmd.java      | 16 ++++------
 .../solr/cloud/api/collections/CollApiCmds.java    | 18 +++++------
 .../api/collections/CollectionHandlingUtils.java   | 17 +++++-----
 .../solr/cloud/api/collections/CreateAliasCmd.java |  2 +-
 .../cloud/api/collections/CreateCollectionCmd.java |  6 ++--
 .../cloud/api/collections/CreateSnapshotCmd.java   | 10 +++---
 .../solr/cloud/api/collections/DeleteAliasCmd.java |  2 +-
 .../cloud/api/collections/DeleteCollectionCmd.java |  3 +-
 .../solr/cloud/api/collections/DeleteNodeCmd.java  |  9 ++----
 .../cloud/api/collections/DeleteSnapshotCmd.java   | 13 +++-----
 .../api/collections/MaintainRoutedAliasCmd.java    | 10 +++---
 .../solr/cloud/api/collections/MigrateCmd.java     |  5 ++-
 .../cloud/api/collections/OverseerStatusCmd.java   | 18 ++++-------
 .../api/collections/ReindexCollectionCmd.java      |  3 +-
 .../solr/cloud/api/collections/RenameCmd.java      |  2 +-
 .../cloud/api/collections/SetAliasPropCmd.java     |  2 +-
 .../java/org/apache/solr/core/CoreContainer.java   |  9 ++----
 .../java/org/apache/solr/handler/GraphHandler.java |  6 ++--
 .../apache/solr/handler/UpdateRequestHandler.java  |  2 +-
 .../apache/solr/handler/admin/ClusterStatus.java   |  9 +++---
 .../solr/handler/admin/CollectionsHandler.java     |  3 +-
 .../org/apache/solr/handler/admin/SplitOp.java     |  6 ++--
 .../handler/component/QueryElevationComponent.java |  3 +-
 .../handler/component/RealTimeGetComponent.java    | 11 +++----
 .../handler/component/SortedDateStatsValues.java   |  2 +-
 .../component/SortedNumericStatsValues.java        |  2 +-
 .../apache/solr/handler/component/StatsValues.java |  2 +-
 .../solr/handler/component/StatsValuesFactory.java | 24 ++++++---------
 .../java/org/apache/solr/request/SimpleFacets.java | 21 +++++--------
 .../transform/SubQueryAugmenterFactory.java        |  7 ++---
 .../response/transform/ValueSourceAugmenter.java   |  5 +--
 .../java/org/apache/solr/schema/LatLonType.java    |  7 ++---
 .../org/apache/solr/search/FunctionRangeQuery.java | 10 ++----
 .../apache/solr/search/SolrConstantScoreQuery.java |  3 +-
 .../org/apache/solr/search/SolrCoreParser.java     |  2 +-
 .../apache/solr/search/SolrDocumentFetcher.java    |  2 +-
 .../org/apache/solr/search/facet/FacetBucket.java  |  7 ++---
 .../apache/solr/search/facet/FacetFieldMerger.java | 23 ++++++--------
 .../solr/search/facet/FacetFieldProcessor.java     |  3 +-
 .../org/apache/solr/search/facet/FacetModule.java  |  4 +--
 .../apache/solr/search/facet/FacetRangeMerger.java | 19 ++++++------
 .../search/facet/FacetRequestSortedMerger.java     | 11 +++----
 .../search/function/CollapseScoreFunction.java     |  3 +-
 .../solr/security/PKIAuthenticationPlugin.java     |  3 +-
 .../security/RuleBasedAuthorizationPluginBase.java |  5 ++-
 .../org/apache/solr/servlet/ResponseUtils.java     |  3 +-
 .../solr/spelling/suggest/DictionaryFactory.java   |  5 ++-
 .../solr/spelling/suggest/LookupFactory.java       |  2 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |  2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |  2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |  2 +-
 .../spelling/suggest/fst/FSTLookupFactory.java     |  2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |  2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |  2 +-
 .../spelling/suggest/fst/WFSTLookupFactory.java    |  2 +-
 .../suggest/jaspell/JaspellLookupFactory.java      |  2 +-
 .../spelling/suggest/tst/TSTLookupFactory.java     |  2 +-
 .../org/apache/solr/update/HdfsTransactionLog.java |  9 +++---
 .../org/apache/solr/update/IndexFingerprint.java   |  4 +--
 .../src/java/org/apache/solr/update/UpdateLog.java |  4 +--
 .../java/org/apache/solr/update/VersionInfo.java   |  6 ++--
 .../apache/solr/util/MockSearchableSolrClient.java |  2 +-
 .../org/apache/solr/util/stats/MetricUtils.java    |  7 ++---
 .../solr/util/tracing/SolrRequestCarrier.java      |  5 ++-
 .../test/org/apache/solr/TestRandomDVFaceting.java |  2 +-
 .../apache/solr/cloud/CollectionsAPISolrJTest.java |  6 ++--
 .../apache/solr/cloud/SolrCloudExampleTest.java    |  8 ++---
 .../org/apache/solr/cloud/TestConfigSetsAPI.java   | 23 ++++++--------
 .../solr/cloud/overseer/ZkStateWriterTest.java     |  3 +-
 .../solr/core/ExitableDirectoryReaderTest.java     | 36 +++++++++-------------
 .../apache/solr/core/TestConfigSetImmutable.java   |  9 ++----
 .../handler/AnalysisRequestHandlerTestBase.java    |  2 +-
 .../org/apache/solr/handler/JsonLoaderTest.java    |  5 ++-
 .../org/apache/solr/handler/TestBlobHandler.java   |  3 +-
 .../TestReplicationHandlerDiskOverFlow.java        |  4 +--
 .../org/apache/solr/handler/TestReqParamsAPI.java  |  8 ++---
 .../solr/handler/TestSolrConfigHandlerCloud.java   |  3 +-
 .../apache/solr/handler/V2ApiIntegrationTest.java  | 25 ++++++---------
 .../component/QueryElevationComponentTest.java     |  3 +-
 .../org/apache/solr/request/SimpleFacetsTest.java  |  5 ++-
 .../solr/schema/TestUseDocValuesAsStored2.java     |  3 +-
 .../security/HttpParamDelegationTokenPlugin.java   |  2 +-
 .../solr/security/TestAuthorizationFramework.java  |  8 ++---
 .../org/apache/solr/util/SolrPluginUtilsTest.java  |  2 +-
 .../solr/util/TestSolrJacksonAnnotation.java       |  5 ++-
 .../src/test/org/apache/solr/util/TestUtils.java   | 18 +++++------
 .../apache/solr/util/stats/MetricUtilsTest.java    |  6 ++--
 88 files changed, 240 insertions(+), 369 deletions(-)

diff --git a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
index 71755db..13b34ce 100644
--- a/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
+++ b/solr/core/src/java/org/apache/solr/api/V2HttpCall.java
@@ -266,7 +266,6 @@ public class V2HttpCall extends HttpSolrCall {
     return api;
   }
 
-  @SuppressWarnings({"unchecked"})
   private static CompositeApi getSubPathApi(PluginBag<SolrRequestHandler> requestHandlers, String path, String fullPath, CompositeApi compositeApi) {
 
     String newPath = path.endsWith(CommonParams.INTROSPECT) ? path.substring(0, path.length() - CommonParams.INTROSPECT.length()) : path;
@@ -288,8 +287,8 @@ public class V2HttpCall extends HttpSolrCall {
           result.put(prefix + e.getKey(), e.getValue());
         }
 
-        @SuppressWarnings({"rawtypes"})
-        Map m = (Map) rsp.getValues().get("availableSubPaths");
+        @SuppressWarnings({"unchecked"})
+        Map<Object, Object> m = (Map<Object, Object>) rsp.getValues().get("availableSubPaths");
         if(m != null){
           m.putAll(result);
         } else {
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java
index 9825377..4819bb8 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/BackupCmd.java
@@ -67,8 +67,7 @@ public class BackupCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
 
     String extCollectionName = message.getStr(COLLECTION_PROP);
     boolean followAliases = message.getBool(FOLLOW_ALIASES, false);
@@ -248,13 +247,11 @@ public class BackupCmd implements CollApiCmds.CollectionApiCommand {
     }
 
     //Aggregating result from different shards
-    @SuppressWarnings({"rawtypes"})
-    NamedList aggRsp = aggregateResults(results, collectionName, backupManager, backupProperties, slices);
+    NamedList<Object> aggRsp = aggregateResults(results, collectionName, backupManager, backupProperties, slices);
     results.add("response", aggRsp);
   }
 
-  @SuppressWarnings({"rawtypes"})
-  private NamedList aggregateResults(NamedList results, String collectionName,
+  private NamedList<Object> aggregateResults(NamedList<Object> results, String collectionName,
                                      BackupManager backupManager,
                                      BackupProperties backupProps,
                                      Collection<Slice> slices) {
@@ -266,9 +263,9 @@ public class BackupCmd implements CollApiCmds.CollectionApiCommand {
     aggRsp.add("startTime", backupProps.getStartTime());
 
     double indexSizeMB = 0;
-    NamedList shards = (NamedList) results.get("success");
+    NamedList<?> shards = (NamedList<?>) results.get("success");
     for (int i = 0; i < shards.size(); i++) {
-      NamedList shardResp = (NamedList)((NamedList)shards.getVal(i)).get("response");
+      NamedList<?> shardResp = (NamedList<?>)((NamedList<?>)shards.getVal(i)).get("response");
       if (shardResp == null)
         continue;
       indexSizeMB += (double) shardResp.get("indexSizeMB");
@@ -288,8 +285,7 @@ public class BackupCmd implements CollApiCmds.CollectionApiCommand {
     return params;
   }
 
-  @SuppressWarnings({"unchecked"})
-  private void copyIndexFiles(URI backupPath, String collectionName, ZkNodeProps request, @SuppressWarnings({"rawtypes"}) NamedList results) throws Exception {
+  private void copyIndexFiles(URI backupPath, String collectionName, ZkNodeProps request, NamedList<Object> results) throws Exception {
     String backupName = request.getStr(NAME);
     String asyncId = request.getStr(ASYNC);
     String repoName = request.getStr(CoreAdminParams.BACKUP_REPOSITORY);
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CollApiCmds.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CollApiCmds.java
index 97349b1..4c00441 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CollApiCmds.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CollApiCmds.java
@@ -77,7 +77,7 @@ public class CollApiCmds {
    * Interface implemented by all Collection API commands. Collection API commands are defined in classes whose names ends in {@code Cmd}.
    */
   protected interface CollectionApiCommand {
-    void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results) throws Exception;
+    void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception;
   }
 
   /**
@@ -151,8 +151,7 @@ public class CollApiCmds {
 
   static public class MockOperationCmd implements CollectionApiCommand {
     @SuppressForbidden(reason = "Needs currentTimeMillis for mock requests")
-    @SuppressWarnings({"unchecked"})
-    public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results) throws InterruptedException {
+    public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws InterruptedException {
       //only for test purposes
       Thread.sleep(message.getInt("sleep", 1));
       if (log.isInfoEnabled()) {
@@ -169,8 +168,7 @@ public class CollApiCmds {
       this.ccc = ccc;
     }
 
-    @SuppressWarnings({"unchecked"})
-    public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results) {
+    public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) {
       ModifiableSolrParams params = new ModifiableSolrParams();
       params.set(CoreAdminParams.ACTION, CoreAdminParams.CoreAdminAction.RELOAD.toString());
 
@@ -186,7 +184,7 @@ public class CollApiCmds {
       this.ccc = ccc;
     }
 
-    public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results)
+    public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results)
         throws Exception {
       CollectionHandlingUtils.checkRequired(message, COLLECTION_PROP, SHARD_ID_PROP, CORE_NAME_PROP, ELECTION_NODE_PROP,
           CORE_NODE_NAME_PROP, NODE_NAME_PROP, REJOIN_AT_HEAD_PROP);
@@ -222,7 +220,7 @@ public class CollApiCmds {
       this.ccc = ccc;
     }
 
-    public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results)
+    public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results)
         throws Exception {
       CollectionHandlingUtils.checkRequired(message, COLLECTION_PROP, SHARD_ID_PROP, REPLICA_PROP, PROPERTY_PROP, PROPERTY_VALUE_PROP);
       Map<String, Object> propMap = new HashMap<>();
@@ -245,7 +243,7 @@ public class CollApiCmds {
       this.ccc = ccc;
     }
 
-    public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results)
+    public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results)
         throws Exception {
       CollectionHandlingUtils.checkRequired(message, COLLECTION_PROP, SHARD_ID_PROP, REPLICA_PROP, PROPERTY_PROP);
       Map<String, Object> propMap = new HashMap<>();
@@ -268,7 +266,7 @@ public class CollApiCmds {
       this.ccc = ccc;
     }
 
-    public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results) throws Exception {
+    public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) throws Exception {
       if (StringUtils.isBlank(message.getStr(COLLECTION_PROP)) || StringUtils.isBlank(message.getStr(PROPERTY_PROP))) {
         throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
             "The '" + COLLECTION_PROP + "' and '" + PROPERTY_PROP +
@@ -293,7 +291,7 @@ public class CollApiCmds {
       this.ccc = ccc;
     }
 
-    public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"}) NamedList results) throws Exception {
+    public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) throws Exception {
 
       final String collectionName = message.getStr(ZkStateReader.COLLECTION_PROP);
       //the rest of the processing is based on writing cluster state properties
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
index 7adb527..8034817 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CollectionHandlingUtils.java
@@ -174,8 +174,7 @@ public class CollectionHandlingUtils {
     }
   }
 
-  @SuppressWarnings({"unchecked"})
-  static void commit(@SuppressWarnings({"rawtypes"}) NamedList results, String slice, Replica parentShardLeader) {
+  static void commit(NamedList<Object> results, String slice, Replica parentShardLeader) {
     log.debug("Calling soft commit to make sub shard updates visible");
     String coreUrl = new ZkCoreNodeProps(parentShardLeader).getCoreUrl();
     // HttpShardHandler is hard coded to send a QueryRequest hence we go direct
@@ -246,7 +245,7 @@ public class CollectionHandlingUtils {
     }
   }
 
-  static void cleanupCollection(String collectionName, @SuppressWarnings({"rawtypes"})NamedList results, CollectionCommandContext ccc) throws Exception {
+  static void cleanupCollection(String collectionName, NamedList<Object> results, CollectionCommandContext ccc) throws Exception {
     log.error("Cleaning up collection [{}].", collectionName);
     Map<String, Object> props = Map.of(
         Overseer.QUEUE_OPERATION, DELETE.toLower(),
@@ -278,18 +277,17 @@ public class CollectionHandlingUtils {
     return results;
   }
 
-  @SuppressWarnings({"rawtypes"})
   static void cleanBackup(BackupRepository repository, URI backupUri, BackupId backupId, CollectionCommandContext ccc) throws Exception {
-    new DeleteBackupCmd(ccc).deleteBackupIds(backupUri, repository, Collections.singleton(backupId), new NamedList());
+    new DeleteBackupCmd(ccc).deleteBackupIds(backupUri, repository, Collections.singleton(backupId), new NamedList<>());
   }
 
   static void deleteBackup(BackupRepository repository, URI backupPath, int maxNumBackup,
-                    @SuppressWarnings({"rawtypes"}) NamedList results, CollectionCommandContext ccc) throws Exception {
+                    NamedList<Object> results, CollectionCommandContext ccc) throws Exception {
     new DeleteBackupCmd(ccc).keepNumberOfBackup(repository, backupPath, maxNumBackup, results);
   }
 
   static List<ZkNodeProps> addReplica(ClusterState clusterState, ZkNodeProps message,
-                                      @SuppressWarnings({"rawtypes"})NamedList results, Runnable onComplete, CollectionCommandContext ccc)
+                                      NamedList<Object> results, Runnable onComplete, CollectionCommandContext ccc)
       throws Exception {
 
     return new AddReplicaCmd(ccc).addReplica(clusterState, message, results, onComplete);
@@ -332,7 +330,6 @@ public class CollectionHandlingUtils {
     processResponse(results, e, nodeName, solrResponse, shard, okayExceptions);
   }
 
-  @SuppressWarnings("deprecation")
   static void processResponse(NamedList<Object> results, Throwable e, String nodeName, SolrResponse solrResponse, String shard, Set<String> okayExceptions) {
     String rootThrowable = null;
     if (e instanceof BaseHttpSolrClient.RemoteSolrException) {
@@ -347,8 +344,8 @@ public class CollectionHandlingUtils {
     }
   }
 
-  @SuppressWarnings("unchecked")
   private static void addFailure(NamedList<Object> results, String key, Object value) {
+    @SuppressWarnings("unchecked")
     SimpleOrderedMap<Object> failure = (SimpleOrderedMap<Object>) results.get("failure");
     if (failure == null) {
       failure = new SimpleOrderedMap<>();
@@ -357,8 +354,8 @@ public class CollectionHandlingUtils {
     failure.add(key, value);
   }
 
-  @SuppressWarnings("unchecked")
   private static void addSuccess(NamedList<Object> results, String key, Object value) {
+    @SuppressWarnings("unchecked")
     SimpleOrderedMap<Object> success = (SimpleOrderedMap<Object>) results.get("success");
     if (success == null) {
       success = new SimpleOrderedMap<>();
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java
index a05b8d4..9f73930 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateAliasCmd.java
@@ -52,7 +52,7 @@ public class CreateAliasCmd extends AliasCmd {
   }
 
   @Override
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results)
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results)
       throws Exception {
     final String aliasName = message.getStr(CommonParams.NAME);
     ZkStateReader zkStateReader = ccc.getZkStateReader();
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
index 9a150b4..04cb7b8 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateCollectionCmd.java
@@ -89,8 +89,7 @@ public class CreateCollectionCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
-  public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) throws Exception {
     if (ccc.getZkStateReader().aliasesManager != null) { // not a mock ZkStateReader
       ccc.getZkStateReader().aliasesManager.update();
     }
@@ -334,8 +333,7 @@ public class CreateCollectionCmd implements CollApiCmds.CollectionApiCommand {
       }
 
       shardRequestTracker.processResponses(results, shardHandler, false, null, Collections.emptySet());
-      @SuppressWarnings({"rawtypes"})
-      boolean failure = results.get("failure") != null && ((SimpleOrderedMap)results.get("failure")).size() > 0;
+      boolean failure = results.get("failure") != null && ((SimpleOrderedMap<?>)results.get("failure")).size() > 0;
       if (isPRS) {
         TimeOut timeout = new TimeOut(Integer.getInteger("solr.waitToSeeReplicasInStateTimeoutSeconds", 120), TimeUnit.SECONDS, ccc.getSolrCloudManager().getTimeSource()); // could be a big cluster
         PerReplicaStates prs = PerReplicaStates.fetch(collectionPath, ccc.getZkStateReader().getZkClient(), null);
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateSnapshotCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateSnapshotCmd.java
index c153f25..4dd194c 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateSnapshotCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/CreateSnapshotCmd.java
@@ -65,8 +65,7 @@ public class CreateSnapshotCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     String extCollectionName =  message.getStr(COLLECTION_PROP);
     boolean followAliases = message.getBool(FOLLOW_ALIASES, false);
 
@@ -93,8 +92,7 @@ public class CreateSnapshotCmd implements CollApiCmds.CollectionApiCommand {
     SolrSnapshotManager.createCollectionLevelSnapshot(zkClient, collectionName, new CollectionSnapshotMetaData(commitName));
     log.info("Created a ZK path to store snapshot information for collection={} with commitName={}", collectionName, commitName);
 
-    @SuppressWarnings({"rawtypes"})
-    NamedList shardRequestResults = new NamedList();
+    NamedList<Object> shardRequestResults = new NamedList<>();
     Map<String, Slice> shardByCoreName = new HashMap<>();
     ShardHandler shardHandler = ccc.newShardHandler();
 
@@ -133,8 +131,8 @@ public class CreateSnapshotCmd implements CollApiCmds.CollectionApiCommand {
     List<CoreSnapshotMetaData> replicas = new ArrayList<>();
     if (success != null) {
       for ( int i = 0 ; i < success.size() ; i++) {
-        @SuppressWarnings({"rawtypes"})
-        NamedList resp = (NamedList)success.getVal(i);
+        @SuppressWarnings("unchecked")
+        NamedList<Object> resp = (NamedList<Object>)success.getVal(i);
 
         // Check if this core is the leader for the shard. The idea here is that during the backup
         // operation we preferably use the snapshot of the "leader" replica since it is most likely
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteAliasCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteAliasCmd.java
index 5c31fdf..518fb92 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteAliasCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteAliasCmd.java
@@ -33,7 +33,7 @@ public class DeleteAliasCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     String aliasName = message.getStr(NAME);
 
     ZkStateReader zkStateReader = ccc.getZkStateReader();
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteCollectionCmd.java
index 77e60e5..d1ae965 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteCollectionCmd.java
@@ -66,7 +66,7 @@ public class DeleteCollectionCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     Object o = message.get(MaintainRoutedAliasCmd.INVOKED_BY_ROUTED_ALIAS);
     if (o != null) {
       ((Runnable)o).run(); // this will ensure the collection is removed from the alias before it disappears.
@@ -121,7 +121,6 @@ public class DeleteCollectionCmd implements CollApiCmds.CollectionApiCommand {
 
       ZkNodeProps internalMsg = message.plus(NAME, collection);
 
-      @SuppressWarnings({"unchecked"})
       List<Replica> failedReplicas = CollectionHandlingUtils.collectionCmd(internalMsg, params, results, null, asyncId, okayExceptions, ccc, state);
       for (Replica failedReplica : failedReplicas) {
         boolean isSharedFS = failedReplica.getBool(ZkStateReader.SHARED_STORAGE_PROP, false) && failedReplica.get("dataDir") != null;
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteNodeCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteNodeCmd.java
index 7323876..95e2942 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteNodeCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteNodeCmd.java
@@ -51,8 +51,7 @@ public class DeleteNodeCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     CollectionHandlingUtils.checkRequired(message, "node");
     String node = message.getStr("node");
     List<ZkNodeProps> sourceReplicas = ReplaceNodeCmd.getReplicasOfNode(node, state);
@@ -92,8 +91,7 @@ public class DeleteNodeCmd implements CollApiCmds.CollectionApiCommand {
     return res;
   }
 
-  @SuppressWarnings({"unchecked"})
-  static void cleanupReplicas(@SuppressWarnings({"rawtypes"})NamedList results,
+  static void cleanupReplicas(NamedList<Object> results,
                               ClusterState clusterState,
                               List<ZkNodeProps> sourceReplicas,
                               CollectionCommandContext ccc,
@@ -105,8 +103,7 @@ public class DeleteNodeCmd implements CollApiCmds.CollectionApiCommand {
       String shard = sourceReplica.getStr(SHARD_ID_PROP);
       String type = sourceReplica.getStr(ZkStateReader.REPLICA_TYPE);
       log.info("Deleting replica type={} for collection={} shard={} on node={}", type, coll, shard, node);
-      @SuppressWarnings({"rawtypes"})
-      NamedList deleteResult = new NamedList();
+      NamedList<Object> deleteResult = new NamedList<>();
       try {
         if (async != null) sourceReplica = sourceReplica.plus(ASYNC, async);
         new DeleteReplicaCmd(ccc).deleteReplica(clusterState, sourceReplica.plus("parallel", "true"), deleteResult, () -> {
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteSnapshotCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteSnapshotCmd.java
index f0d79e3..93f9735 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteSnapshotCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/DeleteSnapshotCmd.java
@@ -63,8 +63,7 @@ public class DeleteSnapshotCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     String extCollectionName =  message.getStr(COLLECTION_PROP);
     boolean followAliases = message.getBool(FOLLOW_ALIASES, false);
     String collectionName;
@@ -75,8 +74,7 @@ public class DeleteSnapshotCmd implements CollApiCmds.CollectionApiCommand {
     }
     String commitName =  message.getStr(CoreAdminParams.COMMIT_NAME);
     String asyncId = message.getStr(ASYNC);
-    @SuppressWarnings({"rawtypes"})
-    NamedList shardRequestResults = new NamedList();
+    NamedList<Object> shardRequestResults = new NamedList<>();
     ShardHandler shardHandler = ccc.newShardHandler();
     SolrZkClient zkClient = ccc.getZkStateReader().getZkClient();
 
@@ -128,13 +126,12 @@ public class DeleteSnapshotCmd implements CollApiCmds.CollectionApiCommand {
     }
 
     shardRequestTracker.processResponses(shardRequestResults, shardHandler, false, null);
-    @SuppressWarnings({"rawtypes"})
-    NamedList success = (NamedList) shardRequestResults.get("success");
+    @SuppressWarnings("unchecked")
+    NamedList<Object> success = (NamedList<Object>) shardRequestResults.get("success");
     List<CoreSnapshotMetaData> replicas = new ArrayList<>();
     if (success != null) {
       for ( int i = 0 ; i < success.size() ; i++) {
-        @SuppressWarnings({"rawtypes"})
-        NamedList resp = (NamedList)success.getVal(i);
+        NamedList<?> resp = (NamedList<?>)success.getVal(i);
         // Unfortunately async processing logic doesn't provide the "core" name automatically.
         String coreName = (String)resp.get("core");
         coresWithSnapshot.remove(coreName);
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainRoutedAliasCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainRoutedAliasCmd.java
index 0df599a..6be56ea 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainRoutedAliasCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/MaintainRoutedAliasCmd.java
@@ -99,7 +99,7 @@ public class MaintainRoutedAliasCmd extends AliasCmd {
   }
 
   @Override
-  public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) throws Exception {
     //---- PARSE PRIMARY MESSAGE PARAMS
     // important that we use NAME for the alias as that is what the Overseer will get a lock on before calling us
     final String aliasName = message.getStr(NAME);
@@ -162,10 +162,8 @@ public class MaintainRoutedAliasCmd extends AliasCmd {
     }
   }
 
-  @SuppressWarnings({"unchecked"})
-  public void addTargetCollection(ClusterState clusterState, @SuppressWarnings({"rawtypes"})NamedList results, String aliasName, ZkStateReader.AliasesManager aliasesManager, Map<String, String> aliasMetadata, RoutedAlias.Action action) throws Exception {
-    @SuppressWarnings({"rawtypes"})
-    NamedList createResults = createCollectionAndWait(clusterState, aliasName, aliasMetadata,
+  public void addTargetCollection(ClusterState clusterState, NamedList<Object> results, String aliasName, ZkStateReader.AliasesManager aliasesManager, Map<String, String> aliasMetadata, RoutedAlias.Action action) throws Exception {
+    NamedList<Object> createResults = createCollectionAndWait(clusterState, aliasName, aliasMetadata,
         action.targetCollection, ccc);
     if (createResults != null) {
       results.add("create", createResults);
@@ -173,7 +171,7 @@ public class MaintainRoutedAliasCmd extends AliasCmd {
     addCollectionToAlias(aliasName, aliasesManager, action.targetCollection);
   }
 
-  public void deleteTargetCollection(ClusterState clusterState, @SuppressWarnings({"rawtypes"})NamedList results, String aliasName, ZkStateReader.AliasesManager aliasesManager, RoutedAlias.Action action) throws Exception {
+  public void deleteTargetCollection(ClusterState clusterState, NamedList<Object> results, String aliasName, ZkStateReader.AliasesManager aliasesManager, RoutedAlias.Action action) throws Exception {
     Map<String, Object> delProps = new HashMap<>();
     delProps.put(INVOKED_BY_ROUTED_ALIAS,
         (Runnable) () -> removeCollectionFromAlias(aliasName, aliasesManager, action.targetCollection));
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/MigrateCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/MigrateCmd.java
index 746488f..594c49b 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/MigrateCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/MigrateCmd.java
@@ -69,7 +69,7 @@ public class MigrateCmd implements CollApiCmds.CollectionApiCommand {
 
 
   @Override
-  public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) throws Exception {
     String extSourceCollectionName = message.getStr("collection");
     String splitKey = message.getStr("split.key");
     String extTargetCollectionName = message.getStr("target.collection");
@@ -131,11 +131,10 @@ public class MigrateCmd implements CollApiCmds.CollectionApiCommand {
     }
   }
 
-  @SuppressWarnings({"unchecked"})
   private void migrateKey(ClusterState clusterState, DocCollection sourceCollection, Slice sourceSlice,
                           DocCollection targetCollection, Slice targetSlice,
                           String splitKey, int timeout,
-                          @SuppressWarnings({"rawtypes"})NamedList results, String asyncId, ZkNodeProps message) throws Exception {
+                          NamedList<Object> results, String asyncId, ZkNodeProps message) throws Exception {
     String tempSourceCollectionName = "split_" + sourceSlice.getName() + "_temp_" + targetSlice.getName();
     ZkStateReader zkStateReader = ccc.getZkStateReader();
     if (clusterState.hasCollection(tempSourceCollectionName)) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerStatusCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerStatusCmd.java
index 6cc6b9b..5685b25 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerStatusCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerStatusCmd.java
@@ -147,8 +147,7 @@ public class OverseerStatusCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings("unchecked")
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     // If Collection API execution is distributed, we're not running on the Overseer node so can't return any Overseer stats.
     if (ccc.getCoreContainer().getDistributedCollectionCommandRunner().isPresent()) {
       // TODO: introduce a per node status command allowing insight into how Cluster state updates, Collection API and
@@ -169,16 +168,11 @@ public class OverseerStatusCmd implements CollApiCmds.CollectionApiCommand {
     zkStateReader.getZkClient().getData("/overseer/collection-queue-work",null, stat, true);
     results.add("overseer_collection_queue_size", stat.getNumChildren());
 
-    @SuppressWarnings({"rawtypes"})
-    NamedList overseerStats = new NamedList();
-    @SuppressWarnings({"rawtypes"})
-    NamedList collectionStats = new NamedList();
-    @SuppressWarnings({"rawtypes"})
-    NamedList stateUpdateQueueStats = new NamedList();
-    @SuppressWarnings({"rawtypes"})
-    NamedList workQueueStats = new NamedList();
-    @SuppressWarnings({"rawtypes"})
-    NamedList collectionQueueStats = new NamedList();
+    NamedList<Object> overseerStats = new NamedList<>();
+    NamedList<Object> collectionStats = new NamedList<>();
+    NamedList<Object> stateUpdateQueueStats = new NamedList<>();
+    NamedList<Object> workQueueStats = new NamedList<>();
+    NamedList<Object> collectionQueueStats = new NamedList<>();
     Stats stats = ccc.getOverseerStats();
     for (Map.Entry<String, Stats.Stat> entry : stats.getStats().entrySet()) {
       String key = entry.getKey();
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
index 2b3c647..51dd622 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/ReindexCollectionCmd.java
@@ -165,8 +165,7 @@ public class ReindexCollectionCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
-  public void call(ClusterState clusterState, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState clusterState, ZkNodeProps message, NamedList<Object> results) throws Exception {
 
     log.debug("*** called: {}", message);
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/RenameCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/RenameCmd.java
index e0977de..ffc9296 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/RenameCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/RenameCmd.java
@@ -44,7 +44,7 @@ public class RenameCmd implements CollApiCmds.CollectionApiCommand {
   }
 
   @Override
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     String extCollectionName = message.getStr(CoreAdminParams.NAME);
     String target = message.getStr(CollectionAdminParams.TARGET);
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/SetAliasPropCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/SetAliasPropCmd.java
index d8c4dfd..a2059bd 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/SetAliasPropCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/SetAliasPropCmd.java
@@ -47,7 +47,7 @@ public class SetAliasPropCmd implements CollectionApiCommand {
   }
 
   @Override
-  public void call(ClusterState state, ZkNodeProps message, @SuppressWarnings({"rawtypes"})NamedList results) throws Exception {
+  public void call(ClusterState state, ZkNodeProps message, NamedList<Object> results) throws Exception {
     String aliasName = message.getStr(NAME);
 
     final ZkStateReader.AliasesManager aliasesManager = ccc.getZkStateReader().aliasesManager;
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 5c93c8f..c1a384d 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -206,8 +206,7 @@ public class CoreContainer {
 
   private final OrderedExecutor replayUpdatesExecutor;
 
-  @SuppressWarnings({"rawtypes"})
-  protected volatile LogWatcher logging = null;
+  protected volatile LogWatcher<?> logging = null;
 
   private volatile CloserThread backgroundCloser = null;
   protected final NodeConfig cfg;
@@ -561,10 +560,9 @@ public class CoreContainer {
     }
   }
 
-  @SuppressWarnings({"rawtypes"})
   private static int readVersion(Map<String, Object> conf) {
     if (conf == null) return -1;
-    Map meta = (Map) conf.get("");
+    Map<?,?> meta = (Map<?,?>) conf.get("");
     if (meta == null) return -1;
     Number v = (Number) meta.get("v");
     return v == null ? -1 : v.intValue();
@@ -2051,8 +2049,7 @@ public class CoreContainer {
     return cfg.getManagementPath();
   }
 
-  @SuppressWarnings({"rawtypes"})
-  public LogWatcher getLogging() {
+  public LogWatcher<?> getLogging() {
     return logging;
   }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/GraphHandler.java b/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
index 87a1633..d5f8126 100644
--- a/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/GraphHandler.java
@@ -146,8 +146,7 @@ public class GraphHandler extends RequestHandlerBase implements SolrCoreAware, P
     } catch (Exception e) {
       //Catch exceptions that occur while the stream is being created. This will include streaming expression parse rules.
       SolrException.log(log, e);
-      @SuppressWarnings({"rawtypes"})
-      Map requestContext = req.getContext();
+      Map<Object,Object> requestContext = req.getContext();
       requestContext.put("stream", new DummyErrorStream(e));
       return;
     }
@@ -158,8 +157,7 @@ public class GraphHandler extends RequestHandlerBase implements SolrCoreAware, P
     Traversal traversal = new Traversal();
     context.put("traversal", traversal);
     tupleStream.setStreamContext(context);
-    @SuppressWarnings({"rawtypes"})
-    Map requestContext = req.getContext();
+    Map<Object,Object> requestContext = req.getContext();
     requestContext.put("stream", new TimerStream(new ExceptionStream(tupleStream)));
     requestContext.put("traversal", traversal);
   }
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 b0f4f14..5e7991a 100644
--- a/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/UpdateRequestHandler.java
@@ -133,7 +133,7 @@ public class UpdateRequestHandler extends ContentStreamHandlerBase implements Pe
     }
   }
   private Map<String ,ContentStreamLoader> pathVsLoaders = new HashMap<>();
-  protected Map<String,ContentStreamLoader> createDefaultLoaders(@SuppressWarnings({"rawtypes"})NamedList args) {
+  protected Map<String,ContentStreamLoader> createDefaultLoaders(NamedList<?> args) {
     SolrParams p = null;
     if(args!=null) {
       p = args.toSolrParams();
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ClusterStatus.java b/solr/core/src/java/org/apache/solr/handler/admin/ClusterStatus.java
index c314240..423a8ce 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ClusterStatus.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ClusterStatus.java
@@ -97,8 +97,7 @@ public class ClusterStatus {
     collection = props.getStr(ZkStateReader.COLLECTION_PROP);
   }
 
-  @SuppressWarnings("unchecked")
-  public void getClusterStatus(@SuppressWarnings({"rawtypes"})NamedList results)
+  public void getClusterStatus(NamedList<Object> results)
       throws KeeperException, InterruptedException {
     // read aliases
     Aliases aliases = zkStateReader.getAliases();
@@ -115,10 +114,9 @@ public class ClusterStatus {
       }
     }
 
-    @SuppressWarnings({"rawtypes"})
-    Map roles = null;
+    Map<?,?> roles = null;
     if (zkStateReader.getZkClient().exists(ZkStateReader.ROLES, true)) {
-      roles = (Map) Utils.fromJSON(zkStateReader.getZkClient().getData(ZkStateReader.ROLES, null, null, true));
+      roles = (Map<?,?>) Utils.fromJSON(zkStateReader.getZkClient().getData(ZkStateReader.ROLES, null, null, true));
     }
 
     ClusterState clusterState = zkStateReader.getClusterState();
@@ -175,6 +173,7 @@ public class ClusterStatus {
       }
 
       byte[] bytes = Utils.toJSON(clusterStateCollection);
+      @SuppressWarnings("unchecked")
       Map<String, Object> docCollection = (Map<String, Object>) Utils.fromJSON(bytes);
       collectionStatus = getCollectionStatus(docCollection, name, requestedShards);
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index 60b16b2..e3f9e95 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -1221,7 +1221,6 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         return params;
       }
     }),
-    @SuppressWarnings({"unchecked", "rawtypes"})
     LISTBACKUP_OP(LISTBACKUP, (req, rsp, h) -> {
       req.getParams().required().check(NAME);
 
@@ -1260,7 +1259,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
         List<BackupId> propsFiles = BackupFilePaths.findAllBackupIdsFromFileListing(subFiles);
 
         NamedList<Object> results = new NamedList<>();
-        ArrayList<Map> backups = new ArrayList<>();
+        ArrayList<Map<Object,Object>> backups = new ArrayList<>();
         String collectionName = null;
         for (BackupId backupId: propsFiles) {
           BackupProperties properties = BackupProperties.readFrom(repository, backupLocation, BackupFilePaths.getBackupPropsName(backupId));
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/SplitOp.java b/solr/core/src/java/org/apache/solr/handler/admin/SplitOp.java
index 965168f..45dc6c5 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/SplitOp.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/SplitOp.java
@@ -129,8 +129,7 @@ class SplitOp implements CoreAdminHandler.CoreAdminOp {
         }
         Object routerObj = collection.get(DOC_ROUTER); // for back-compat with Solr 4.4
         if (routerObj instanceof Map) {
-          @SuppressWarnings({"rawtypes"})
-          Map routerProps = (Map) routerObj;
+          Map<?,?> routerProps = (Map<?,?>) routerObj;
           routeFieldName = (String) routerProps.get("field");
         }
       }
@@ -222,8 +221,7 @@ class SplitOp implements CoreAdminHandler.CoreAdminOp {
 
         Object routerObj = collection.get(DOC_ROUTER); // for back-compat with Solr 4.4
         if (routerObj instanceof Map) {
-          @SuppressWarnings({"rawtypes"})
-          Map routerProps = (Map) routerObj;
+          Map<?,?> routerProps = (Map<?,?>) routerObj;
           routeFieldName = (String) routerProps.get("field");
         }
         if (routeFieldName == null) {
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 e056091..b63e44b 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
@@ -633,9 +633,8 @@ public class QueryElevationComponent extends SearchComponent implements SolrCore
    * @param context the {@link SolrQueryRequest#getContext()} or null if none.  We'll cache our results here.
    */
   //TODO consider simplifying to remove "boosted" arg which can be looked up in context via BOOSTED key?
-  @SuppressWarnings({"unchecked"})
   public static IntIntHashMap getBoostDocs(SolrIndexSearcher indexSearcher, Set<BytesRef> boosted,
-                                           @SuppressWarnings({"rawtypes"})Map context) throws IOException {
+                                           Map<Object,Object> context) throws IOException {
 
     IntIntHashMap boostDocs = 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 e24b02c..a5cbc14 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
@@ -254,8 +254,7 @@ public class RealTimeGetComponent extends SearchComponent
          Object o = ulog.lookup(idBytes.get());
          if (o != null) {
            // should currently be a List<Oper,Ver,Doc/Id>
-           @SuppressWarnings({"rawtypes"})
-           List entry = (List)o;
+           List<?> entry = (List<?>)o;
            assert entry.size() >= 3;
            int oper = (Integer)entry.get(UpdateLog.FLAGS_IDX) & UpdateLog.OPERATION_MASK;
            switch (oper) {
@@ -426,7 +425,7 @@ public class RealTimeGetComponent extends SearchComponent
    */
   private static SolrDocument resolveFullDocument(SolrCore core, BytesRef idBytes,
                                                   ReturnFields returnFields, SolrInputDocument partialDoc,
-                                                  @SuppressWarnings({"rawtypes"}) List logEntry) throws IOException {
+                                                  List<?> logEntry) throws IOException {
     Set<String> onlyTheseFields = returnFields.getExplicitlyRequestedFieldNames();
     if (idBytes == null || (logEntry.size() != 5 && logEntry.size() != 6)) {
       throw new SolrException(ErrorCode.INVALID_STATE, "Either Id field not present in partial document or log entry doesn't have previous version.");
@@ -646,8 +645,7 @@ public class RealTimeGetComponent extends SearchComponent
       Object o = ulog.lookup(idBytes);
       if (o != null) {
         // should currently be a List<Oper,Ver,Doc/Id>
-        @SuppressWarnings({"rawtypes"})
-        List entry = (List)o;
+        List<?> entry = (List<?>)o;
         assert entry.size() >= 3;
         int oper = (Integer)entry.get(0) & UpdateLog.OPERATION_MASK;
         if (versionReturned != null) {
@@ -1082,8 +1080,7 @@ public class RealTimeGetComponent extends SearchComponent
       // can get more than one response
       for (ShardResponse srsp : sreq.responses) {
         SolrResponse sr = srsp.getSolrResponse();
-        @SuppressWarnings({"rawtypes"})
-        NamedList nl = sr.getResponse();
+        NamedList<?> nl = sr.getResponse();
         SolrDocumentList subList = (SolrDocumentList)nl.get("response");
         docList.addAll(subList);
       }
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SortedDateStatsValues.java b/solr/core/src/java/org/apache/solr/handler/component/SortedDateStatsValues.java
index 33bea21..4febc10 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SortedDateStatsValues.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SortedDateStatsValues.java
@@ -40,7 +40,7 @@ public class SortedDateStatsValues implements StatsValues {
   }
 
   @Override
-  public void accumulate(@SuppressWarnings({"rawtypes"})NamedList stv) {
+  public void accumulate(NamedList<?> stv) {
     dsv.accumulate(stv);
   }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/component/SortedNumericStatsValues.java b/solr/core/src/java/org/apache/solr/handler/component/SortedNumericStatsValues.java
index dcddf77..0f1c6ea 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/SortedNumericStatsValues.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/SortedNumericStatsValues.java
@@ -42,7 +42,7 @@ public class SortedNumericStatsValues implements StatsValues {
   }
 
   @Override
-  public void accumulate(@SuppressWarnings({"rawtypes"})NamedList stv) {
+  public void accumulate(NamedList<?> stv) {
     nsv.accumulate(stv);
   }
   
diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java b/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
index 50f8c30..cb7ffab 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/StatsValues.java
@@ -35,7 +35,7 @@ public interface StatsValues {
    *
    * @param stv NamedList whose values will be used to accumulate the current values
    */
-  void accumulate(@SuppressWarnings({"rawtypes"})NamedList stv);
+  void accumulate(NamedList<?> stv);
 
   /** Accumulate the value associated with <code>docID</code>.
    *  @see #setNextReader(org.apache.lucene.index.LeafReaderContext) */
diff --git a/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java b/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
index 67b1ee7..74e779a 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/StatsValuesFactory.java
@@ -128,8 +128,7 @@ public class StatsValuesFactory {
      * Context to use when retrieving FunctionValues, will be null until/unless
      * {@link #setNextReader} is called at least once
      */
-    @SuppressWarnings({"rawtypes"})
-    private Map vsContext;
+    private Map<Object,Object> vsContext;
     /**
      * Values to collect, will be null until/unless {@link #setNextReader} is
      * called at least once
@@ -201,7 +200,7 @@ public class StatsValuesFactory {
 
     @Override
     @SuppressWarnings({"unchecked"})
-    public void accumulate(@SuppressWarnings({"rawtypes"})NamedList stv) {
+    public void accumulate(NamedList<?> stv) {
       if (computeCount) {
         count += (Long) stv.get("count");
       }
@@ -234,16 +233,14 @@ public class StatsValuesFactory {
 
       updateTypeSpecificStats(stv);
 
-      @SuppressWarnings({"rawtypes"})
-      NamedList f = (NamedList) stv.get(FACETS);
+      NamedList<?> f = (NamedList<?>) stv.get(FACETS);
       if (f == null) {
         return;
       }
 
       for (int i = 0; i < f.size(); i++) {
         String field = f.getName(i);
-        @SuppressWarnings({"rawtypes"})
-        NamedList vals = (NamedList) f.getVal(i);
+        NamedList<?> vals = (NamedList<?>) f.getVal(i);
         Map<String, StatsValues> addTo = facets.get(field);
         if (addTo == null) {
           addTo = new HashMap<>();
@@ -256,7 +253,7 @@ public class StatsValuesFactory {
             vvals = createStatsValues(statsField);
             addTo.put(val, vvals);
           }
-          vvals.accumulate((NamedList) vals.getVal(j));
+          vvals.accumulate((NamedList<?>) vals.getVal(j));
         }
       }
     }
@@ -364,7 +361,6 @@ public class StatsValuesFactory {
       return res;
     }
 
-    @SuppressWarnings({"unchecked"})
     public void setNextReader(LeafReaderContext ctx) throws IOException {
       if (valueSource == null) {
         // first time we've collected local values, get the right ValueSource
@@ -415,7 +411,7 @@ public class StatsValuesFactory {
      *          List containing values the current statistics should be updated
      *          against
      */
-    protected abstract void updateTypeSpecificStats(@SuppressWarnings({"rawtypes"})NamedList stv);
+    protected abstract void updateTypeSpecificStats(NamedList<?> stv);
 
     /**
      * Add any type specific statistics to the given NamedList
@@ -489,7 +485,7 @@ public class StatsValuesFactory {
     }
 
     @Override
-    public void updateTypeSpecificStats(@SuppressWarnings({"rawtypes"})NamedList stv) {
+    public void updateTypeSpecificStats(NamedList<?> stv) {
       if (computeSum) {
         sum += ((Number) stv.get("sum")).doubleValue();
       }
@@ -651,7 +647,7 @@ public class StatsValuesFactory {
     }
 
     @Override
-    protected void updateTypeSpecificStats(@SuppressWarnings({"rawtypes"})NamedList stv) {
+    protected void updateTypeSpecificStats(NamedList<?> stv) {
       // No type specific stats
     }
 
@@ -702,7 +698,7 @@ public class StatsValuesFactory {
     }
 
     @Override
-    protected void updateTypeSpecificStats(@SuppressWarnings({"rawtypes"})NamedList stv) {
+    protected void updateTypeSpecificStats(NamedList<?> stv) {
       if (computeSum) {
         sum += ((Number) stv.get("sum")).doubleValue();
       }
@@ -802,7 +798,7 @@ public class StatsValuesFactory {
     }
 
     @Override
-    protected void updateTypeSpecificStats(@SuppressWarnings({"rawtypes"})NamedList stv) {
+    protected void updateTypeSpecificStats(NamedList<?> stv) {
       // No type specific stats
     }
 
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 fc462dd..48e9425 100644
--- a/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
+++ b/solr/core/src/java/org/apache/solr/request/SimpleFacets.java
@@ -267,8 +267,7 @@ public class SimpleFacets {
       } else {
         return base;
       }
-      @SuppressWarnings({"rawtypes"})
-      AllGroupHeadsCollector allGroupHeadsCollector = grouping.getCommands().get(0).createAllGroupCollector();
+      AllGroupHeadsCollector<?> allGroupHeadsCollector = grouping.getCommands().get(0).createAllGroupCollector();
       searcher.search(base.getTopFilter(), allGroupHeadsCollector);
       return new BitDocSet(allGroupHeadsCollector.retrieveGroupHeads(searcher.maxDoc()));
     } else {
@@ -334,8 +333,7 @@ public class SimpleFacets {
       );
     }
 
-    @SuppressWarnings({"rawtypes"})
-    AllGroupsCollector collector = new AllGroupsCollector<>(new TermGroupSelector(groupField));
+    AllGroupsCollector<?> collector = new AllGroupsCollector<>(new TermGroupSelector(groupField));
     searcher.search(QueryUtils.combineQueryAndFilter(facetQuery, docSet.getTopFilter()), collector);
     return collector.getGroupCount();
   }
@@ -787,7 +785,6 @@ public class SimpleFacets {
    * @see #getFieldMissingCount
    * @see #getFacetTermEnumCounts
    */
-  @SuppressWarnings("unchecked")
   public NamedList<Object> getFacetFieldCounts()
       throws IOException, SyntaxError {
 
@@ -803,8 +800,7 @@ public class SimpleFacets {
     int maxThreads = req.getParams().getInt(FacetParams.FACET_THREADS, 0);
     Executor executor = maxThreads == 0 ? directExecutor : facetExecutor;
     final Semaphore semaphore = new Semaphore((maxThreads <= 0) ? Integer.MAX_VALUE : maxThreads);
-    @SuppressWarnings({"rawtypes"})
-    List<Future<NamedList>> futures = new ArrayList<>(facetFs.length);
+    List<Future<NamedList<?>>> futures = new ArrayList<>(facetFs.length);
 
     if (fdebugParent != null) {
       fdebugParent.putInfoItem("maxThreads", maxThreads);
@@ -822,8 +818,7 @@ public class SimpleFacets {
         final String termList = localParams == null ? null : localParams.get(CommonParams.TERMS);
         final String key = parsed.key;
         final String facetValue = parsed.facetValue;
-        @SuppressWarnings({"rawtypes"})
-        Callable<NamedList> callable = () -> {
+        Callable<NamedList<?>> callable = () -> {
           try {
             NamedList<Object> result = new SimpleOrderedMap<>();
             if(termList != null) {
@@ -847,15 +842,14 @@ public class SimpleFacets {
           }
         };
 
-        @SuppressWarnings({"rawtypes"})
-        RunnableFuture<NamedList> runnableFuture = new FutureTask<>(callable);
+        RunnableFuture<NamedList<?>> runnableFuture = new FutureTask<>(callable);
         semaphore.acquire();//may block and/or interrupt
         executor.execute(runnableFuture);//releases semaphore when done
         futures.add(runnableFuture);
       }//facetFs loop
 
       //Loop over futures to get the values. The order is the same as facetFs but shouldn't matter.
-      for (@SuppressWarnings({"rawtypes"})Future<NamedList> future : futures) {
+      for (Future<NamedList<?>> future : futures) {
         res.addAll(future.get());
       }
       assert semaphore.availablePermits() >= maxThreads;
@@ -1205,8 +1199,7 @@ public class SimpleFacets {
     return res;
   }
 
-  @SuppressWarnings({"rawtypes"})
-  public NamedList getHeatmapCounts() throws IOException, SyntaxError {
+  public NamedList<Object> getHeatmapCounts() throws IOException, SyntaxError {
     final NamedList<Object> resOuter = new SimpleOrderedMap<>();
     String[] unparsedFields = rb.req.getParams().getParams(FacetParams.FACET_HEATMAP);
     if (unparsedFields == null || unparsedFields.length == 0) {
diff --git a/solr/core/src/java/org/apache/solr/response/transform/SubQueryAugmenterFactory.java b/solr/core/src/java/org/apache/solr/response/transform/SubQueryAugmenterFactory.java
index d6d7bf0..3a82a43 100644
--- a/solr/core/src/java/org/apache/solr/response/transform/SubQueryAugmenterFactory.java
+++ b/solr/core/src/java/org/apache/solr/response/transform/SubQueryAugmenterFactory.java
@@ -112,11 +112,10 @@ public class SubQueryAugmenterFactory extends TransformerFactory{
   @SuppressWarnings("unchecked")
   private void checkThereIsNoDupe(String field, Map<Object,Object> context) {
     // find a map
-    @SuppressWarnings({"rawtypes"})
-    final Map conflictMap;
+    final Map<Object,Object> conflictMap;
     final String conflictMapKey = getClass().getSimpleName();
     if (context.containsKey(conflictMapKey)) {
-      conflictMap = (Map) context.get(conflictMapKey);
+      conflictMap = (Map<Object,Object>) context.get(conflictMapKey);
     } else {
       conflictMap = new HashMap<>();
       context.put(conflictMapKey, conflictMap);
@@ -216,7 +215,7 @@ class SubQueryAugmenter extends DocTransformer {
       
       if (vals != null) {
         StringBuilder rez = new StringBuilder();
-        for (@SuppressWarnings({"rawtypes"})Iterator iterator = vals.iterator(); iterator.hasNext();) {
+        for (Iterator<Object> iterator = vals.iterator(); iterator.hasNext();) {
           Object object = iterator.next();
           rez.append(convertFieldValue(object));
           if (iterator.hasNext()) {
diff --git a/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java b/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java
index 372d111..ade5818 100644
--- a/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java
+++ b/solr/core/src/java/org/apache/solr/response/transform/ValueSourceAugmenter.java
@@ -60,7 +60,6 @@ public class ValueSourceAugmenter extends DocTransformer
   }
 
   @Override
-  @SuppressWarnings({"unchecked"})
   public void setContext( ResultContext context ) {
     super.setContext(context);
     try {
@@ -73,8 +72,7 @@ public class ValueSourceAugmenter extends DocTransformer
     }
   }
 
-  @SuppressWarnings({"rawtypes"})
-  Map fcontext;
+  Map<Object,Object> fcontext;
   SolrIndexSearcher searcher;
   List<LeafReaderContext> readerContexts;
 
@@ -87,7 +85,6 @@ public class ValueSourceAugmenter extends DocTransformer
       // TODO: calculate this stuff just once across diff functions
       int idx = ReaderUtil.subIndex(docid, readerContexts);
       LeafReaderContext rcontext = readerContexts.get(idx);
-      @SuppressWarnings({"unchecked"})
       FunctionValues values = valueSource.getValues(fcontext, rcontext);
       int localId = docid - rcontext.docBase;
       setValue(doc,values.objectVal(localId));
diff --git a/solr/core/src/java/org/apache/solr/schema/LatLonType.java b/solr/core/src/java/org/apache/solr/schema/LatLonType.java
index ea2711e..213d494 100644
--- a/solr/core/src/java/org/apache/solr/schema/LatLonType.java
+++ b/solr/core/src/java/org/apache/solr/schema/LatLonType.java
@@ -318,12 +318,9 @@ class SpatialDistanceQuery extends ExtendedQueryBase implements PostFilter {
 
   protected class SpatialWeight extends ConstantScoreWeight {
     protected IndexSearcher searcher;
-    @SuppressWarnings({"rawtypes"})
-    protected Map latContext;
-    @SuppressWarnings({"rawtypes"})
-    protected Map lonContext;
+    protected Map<Object,Object> latContext;
+    protected Map<Object,Object> lonContext;
 
-    @SuppressWarnings({"unchecked"})
     public SpatialWeight(IndexSearcher searcher, float boost) throws IOException {
       super(SpatialDistanceQuery.this, boost);
       this.searcher = searcher;
diff --git a/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java b/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java
index ff29322..6b8fdaa 100644
--- a/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java
+++ b/solr/core/src/java/org/apache/solr/search/FunctionRangeQuery.java
@@ -41,21 +41,18 @@ public class FunctionRangeQuery extends SolrConstantScoreQuery implements PostFi
 
   @Override
   public DelegatingCollector getFilterCollector(IndexSearcher searcher) {
-    @SuppressWarnings({"rawtypes"})
-    Map fcontext = ValueSource.newContext(searcher);
+    Map<Object,Object> fcontext = ValueSource.newContext(searcher);
     Weight weight = rangeFilt.createWeight(searcher, ScoreMode.COMPLETE, 1);
     return new FunctionRangeCollector(fcontext, weight);
   }
 
   class FunctionRangeCollector extends DelegatingCollector {
-    @SuppressWarnings({"rawtypes"})
-    final Map fcontext;
+    final Map<Object,Object> fcontext;
     final Weight weight;
     ValueSourceScorer scorer;
     int maxdoc;
 
-    @SuppressWarnings({"rawtypes"})
-    public FunctionRangeCollector(Map fcontext, Weight weight) {
+    public FunctionRangeCollector(Map<Object,Object> fcontext, Weight weight) {
       this.fcontext = fcontext;
       this.weight = weight;
     }
@@ -72,7 +69,6 @@ public class FunctionRangeQuery extends SolrConstantScoreQuery implements PostFi
     protected void doSetNextReader(LeafReaderContext context) throws IOException {
       super.doSetNextReader(context);
       maxdoc = context.reader().maxDoc();
-      @SuppressWarnings({"unchecked"})
       FunctionValues dv = rangeFilt.getValueSource().getValues(fcontext, context);
       scorer = dv.getRangeScorer(weight, context, rangeFilt.getLowerVal(), rangeFilt.getUpperVal(), rangeFilt.isIncludeLower(), rangeFilt.isIncludeUpper());
     }
diff --git a/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java b/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
index bc3b191..e21afe7 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrConstantScoreQuery.java
@@ -75,8 +75,7 @@ public class SolrConstantScoreQuery extends Query implements ExtendedQuery {
   }
 
   protected class ConstantWeight extends ConstantScoreWeight {
-    @SuppressWarnings({"rawtypes"})
-    private Map context;
+    private Map<Object,Object> context;
     private ScoreMode scoreMode;
 
     public ConstantWeight(IndexSearcher searcher, ScoreMode scoreMode, float boost) throws IOException {
diff --git a/solr/core/src/java/org/apache/solr/search/SolrCoreParser.java b/solr/core/src/java/org/apache/solr/search/SolrCoreParser.java
index d730397..0cf1013 100755
--- a/solr/core/src/java/org/apache/solr/search/SolrCoreParser.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrCoreParser.java
@@ -55,7 +55,7 @@ public class SolrCoreParser extends CoreParser implements NamedListInitializedPl
   }
 
   @Override
-  public void init(@SuppressWarnings({"rawtypes"}) NamedList<?> initArgs) {
+  public void init(NamedList<?> initArgs) {
     if (initArgs == null || initArgs.size() == 0) {
       return;
     }
diff --git a/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java b/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
index 8022e71..11b26cc 100644
--- a/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
+++ b/solr/core/src/java/org/apache/solr/search/SolrDocumentFetcher.java
@@ -515,7 +515,7 @@ public class SolrDocumentFetcher {
    *          The fields with docValues to populate the document with.
    *          DocValues fields which do not exist or not decodable will be ignored.
    */
-  public void decorateDocValueFields(@SuppressWarnings("rawtypes") SolrDocumentBase doc, int docid, Set<String> fields)
+  public void decorateDocValueFields(SolrDocumentBase<?,?> doc, int docid, Set<String> fields)
       throws IOException {
     final List<LeafReaderContext> leafContexts = searcher.getLeafContexts();
     final int subIndex = ReaderUtil.subIndex(docid, leafContexts);
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 675a141..478ca87 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
@@ -69,7 +69,7 @@ public class FacetBucket {
     return merger;
   }
 
-  public void mergeBucket(@SuppressWarnings("rawtypes") SimpleOrderedMap bucket, FacetMerger.Context mcontext) {
+  public void mergeBucket(SimpleOrderedMap<?> bucket, FacetMerger.Context mcontext) {
     // todo: for refinements, we want to recurse, but not re-do stats for intermediate buckets
 
     mcontext.setShardFlag(bucketNumber);
@@ -96,9 +96,8 @@ public class FacetBucket {
   }
 
 
-  @SuppressWarnings({"rawtypes", "unchecked"})
-  public SimpleOrderedMap getMergedBucket() {
-    SimpleOrderedMap out = new SimpleOrderedMap( (subs == null ? 0 : subs.size()) + 2 );
+  public SimpleOrderedMap<Object> getMergedBucket() {
+    SimpleOrderedMap<Object> out = new SimpleOrderedMap<>( (subs == null ? 0 : subs.size()) + 2 );
     if (bucketValue != null) {
       out.add("val", bucketValue);
     }
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 7826c93..7341729 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
@@ -45,23 +45,22 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
   }
 
   @Override
-  @SuppressWarnings({"rawtypes"})
   public void merge(Object facetResult, Context mcontext) {
     super.merge(facetResult, mcontext);
     if (numReturnedPerShard == null) {
       numReturnedPerShard = new int[mcontext.numShards];
     }
-    merge((SimpleOrderedMap)facetResult, mcontext);
+    merge((SimpleOrderedMap<?>)facetResult, mcontext);
   }
 
-  protected void merge(@SuppressWarnings("rawtypes") SimpleOrderedMap facetResult, Context mcontext) {
+  protected void merge(SimpleOrderedMap<?> facetResult, Context mcontext) {
     if (freq.missing) {
       Object o = facetResult.get("missing");
       if (o != null) {
         if (missingBucket == null) {
           missingBucket = newBucket(null, mcontext);
         }
-        missingBucket.mergeBucket((SimpleOrderedMap)o , mcontext);
+        missingBucket.mergeBucket((SimpleOrderedMap<?>)o , mcontext);
       }
     }
 
@@ -71,13 +70,13 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
         if (allBuckets == null) {
           allBuckets = newBucket(null, mcontext);
         }
-        allBuckets.mergeBucket((SimpleOrderedMap)o , mcontext);
+        allBuckets.mergeBucket((SimpleOrderedMap<?>)o , mcontext);
       }
     }
 
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    List<SimpleOrderedMap> bucketList = (List<SimpleOrderedMap>) facetResult.get("buckets");
+    @SuppressWarnings("unchecked")
+    List<SimpleOrderedMap<?>> bucketList = (List<SimpleOrderedMap<?>>) facetResult.get("buckets");
     numReturnedPerShard[mcontext.shardNum] = bucketList.size();
     numReturnedBuckets += bucketList.size();
     mergeBucketList(bucketList , mcontext);
@@ -98,9 +97,8 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
 
 
   @Override
-  @SuppressWarnings({"unchecked", "rawtypes"})
   public Object getMergedResult() {
-    SimpleOrderedMap result = new SimpleOrderedMap();
+    SimpleOrderedMap<Object> result = new SimpleOrderedMap<>();
 
     if (numBuckets != null) {
       result.add("numBuckets", ((Number)numBuckets.getMergedResult()).longValue());
@@ -112,7 +110,7 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
     long end = freq.limit >=0 ? first + (int) freq.limit : Integer.MAX_VALUE;
     long last = Math.min(sortedBuckets.size(), end);
 
-    List<SimpleOrderedMap> resultBuckets = new ArrayList<>(Math.max(0, (int)(last - first)));
+    List<SimpleOrderedMap<?>> resultBuckets = new ArrayList<>(Math.max(0, (int)(last - first)));
 
     /** this only works if there are no filters (like mincount)
     for (int i=first; i<last; i++) {
@@ -203,13 +201,12 @@ public class FacetFieldMerger extends FacetRequestSortedMerger<FacetField> {
     Set<Object> values;
 
     @Override
-    @SuppressWarnings({"unchecked", "rawtypes"})
     public void merge(Object facetResult, Context mcontext) {
-      SimpleOrderedMap map = (SimpleOrderedMap)facetResult;
+      SimpleOrderedMap<?> map = (SimpleOrderedMap<?>)facetResult;
       long numBuckets = ((Number)map.get("numBuckets")).longValue();
       sumBuckets += numBuckets;
 
-      List vals = (List)map.get("vals");
+      List<?> vals = (List<?>)map.get("vals");
       if (vals != null) {
         if (values == null) {
           values = new HashSet<>(vals.size()*4);
diff --git a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java
index bee2eaa..b6d55d7 100644
--- a/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java
+++ b/solr/core/src/java/org/apache/solr/search/facet/FacetFieldProcessor.java
@@ -439,8 +439,7 @@ abstract class FacetFieldProcessor extends FacetProcessor<FacetField> {
         sortedSlots = Arrays.copyOfRange(sortedSlots, off, endOffset);
       }
     }
-    @SuppressWarnings({"rawtypes"})
-    List<SimpleOrderedMap> bucketList = new ArrayList<>(sortedSlots.length);
+    List<SimpleOrderedMap<?>> bucketList = new ArrayList<>(sortedSlots.length);
 
     for (Slot slot : sortedSlots) {
       SimpleOrderedMap<Object> bucket = new SimpleOrderedMap<>();
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 5702a12..96b1e3a 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
@@ -284,7 +284,7 @@ public class FacetModule extends SearchComponent {
       if (top == null) continue; // shards.tolerant=true will cause this to happen on exceptions/errors
       Object facet = top.get("facets");
       if (facet == null) {
-        @SuppressWarnings("rawtypes") SimpleOrderedMap shardResponseHeader = (SimpleOrderedMap) rsp.getResponse().get("responseHeader");
+        SimpleOrderedMap<?> shardResponseHeader = (SimpleOrderedMap<?>) rsp.getResponse().get("responseHeader");
         if (Boolean.TRUE.equals(shardResponseHeader.getBooleanArg(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY))) {
           rb.rsp.getResponseHeader().asShallowMap().put(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY, Boolean.TRUE);
         }
@@ -480,7 +480,7 @@ public class FacetModule extends SearchComponent {
       if (bucket == null) {
         bucket = newBucket(null, mcontext);
       }
-      bucket.mergeBucket((SimpleOrderedMap) facet, mcontext);
+      bucket.mergeBucket((SimpleOrderedMap<?>) facet, mcontext);
     }
 
     @Override
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 5aaafa1..bb2f99a 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
@@ -40,7 +40,7 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
   @Override
   public void merge(Object facetResult, Context mcontext) {
     super.merge(facetResult, mcontext);
-    merge((SimpleOrderedMap) facetResult , mcontext);
+    merge((SimpleOrderedMap<?>) facetResult , mcontext);
   }
 
   @Override
@@ -89,7 +89,7 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
     return refinement;
   }
   
-  public void merge(@SuppressWarnings("rawtypes") SimpleOrderedMap facetResult, Context mcontext) {
+  public void merge(SimpleOrderedMap<?> facetResult, Context mcontext) {
     boolean all = freq.others.contains(FacetParams.FacetRangeOther.ALL);
 
     if (all || freq.others.contains(FacetParams.FacetRangeOther.BEFORE)) {
@@ -98,7 +98,7 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
         if (beforeBucket == null) {
           beforeBucket = newBucket(null, mcontext);
         }
-        beforeBucket.mergeBucket((SimpleOrderedMap)o, mcontext);
+        beforeBucket.mergeBucket((SimpleOrderedMap<?>)o, mcontext);
       }
     }
 
@@ -108,7 +108,7 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
         if (afterBucket == null) {
           afterBucket = newBucket(null, mcontext);
         }
-        afterBucket.mergeBucket((SimpleOrderedMap)o , mcontext);
+        afterBucket.mergeBucket((SimpleOrderedMap<?>)o , mcontext);
       }
     }
 
@@ -118,7 +118,7 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
         if (betweenBucket == null) {
           betweenBucket = newBucket(null, mcontext);
         }
-        betweenBucket.mergeBucket((SimpleOrderedMap)o , mcontext);
+        betweenBucket.mergeBucket((SimpleOrderedMap<?>)o , mcontext);
       }
     }
 
@@ -131,19 +131,18 @@ public class FacetRangeMerger extends FacetRequestSortedMerger<FacetRange> {
       }
     }
 
-    @SuppressWarnings({"unchecked", "rawtypes"})
-    List<SimpleOrderedMap> bucketList = (List<SimpleOrderedMap>) facetResult.get("buckets");
+    @SuppressWarnings("unchecked")
+    List<SimpleOrderedMap<?>> bucketList = (List<SimpleOrderedMap<?>>) facetResult.get("buckets");
     mergeBucketList(bucketList , mcontext);
   }
 
 
   @Override
-  @SuppressWarnings({"unchecked", "rawtypes"})
   public Object getMergedResult() {
     // TODO: use sortedBuckets
-    SimpleOrderedMap result = new SimpleOrderedMap(4);
+    SimpleOrderedMap<Object> result = new SimpleOrderedMap<>(4);
 
-    List<SimpleOrderedMap> resultBuckets = new ArrayList<>(buckets.size());
+    List<SimpleOrderedMap<?>> resultBuckets = new ArrayList<>(buckets.size());
 
     for (FacetBucket bucket : buckets.values()) {
        if (bucket.getCount() < freq.mincount) {
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 26b7774..968ba98 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
@@ -44,8 +44,7 @@ abstract class FacetRequestSortedMerger<FacetRequestT extends FacetRequestSorted
   @Override
   public void merge(Object facetResult, Context mcontext) {
     this.mcontext = mcontext;
-    @SuppressWarnings({"rawtypes"})
-    SimpleOrderedMap res = (SimpleOrderedMap)facetResult;
+    SimpleOrderedMap<?> res = (SimpleOrderedMap<?>)facetResult;
     Boolean more = (Boolean)res.get("more");
     if (more != null && more) {
       if (shardHasMoreBuckets == null) {
@@ -69,9 +68,9 @@ abstract class FacetRequestSortedMerger<FacetRequestT extends FacetRequestSorted
     }
   }
 
-  @SuppressWarnings({"rawtypes"})
-  public void mergeBucketList(List<SimpleOrderedMap> bucketList, Context mcontext) {
-    for (SimpleOrderedMap bucketRes : bucketList) {
+  public void mergeBucketList(List<SimpleOrderedMap<?>> bucketList, Context mcontext) {
+    for (SimpleOrderedMap<?> bucketRes : bucketList) {
+      @SuppressWarnings("rawtypes")
       Comparable bucketVal = (Comparable)bucketRes.get("val");
       FacetBucket bucket = buckets.get(bucketVal);
       if (bucket == null) {
@@ -83,7 +82,7 @@ abstract class FacetRequestSortedMerger<FacetRequestT extends FacetRequestSorted
   }
 
 
-  @SuppressWarnings({"unchecked", "rawtypes"})
+  @SuppressWarnings({"unchecked"})
   public void sortBuckets(final FacetRequest.FacetSort sort) {
     // NOTE: we *always* re-init from buckets, because it may have been modified post-refinement 
     sortedBuckets = new ArrayList<>( buckets.values() );
diff --git a/solr/core/src/java/org/apache/solr/search/function/CollapseScoreFunction.java b/solr/core/src/java/org/apache/solr/search/function/CollapseScoreFunction.java
index fdc6dc3..afbdbcc 100644
--- a/solr/core/src/java/org/apache/solr/search/function/CollapseScoreFunction.java
+++ b/solr/core/src/java/org/apache/solr/search/function/CollapseScoreFunction.java
@@ -49,8 +49,7 @@ public class CollapseScoreFunction extends ValueSource {
 
     private CollapseScore cscore;
 
-    @SuppressWarnings({"rawtypes"})
-    public CollapseScoreFunctionValues(Map context) {
+    public CollapseScoreFunctionValues(Map<?,?> context) {
       this.cscore = (CollapseScore) context.get("CSCORE");
       assert null != this.cscore;
     }
diff --git a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java
index 6a66f5a..737706f 100644
--- a/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/PKIAuthenticationPlugin.java
@@ -214,8 +214,7 @@ public class PKIAuthenticationPlugin extends AuthenticationPlugin implements Htt
           .execute(new HttpGet(uri), HttpClientUtil.createNewHttpClientRequestContext());
       entity  = rsp.getEntity();
       byte[] bytes = EntityUtils.toByteArray(entity);
-      @SuppressWarnings({"rawtypes"})
-      Map m = (Map) Utils.fromJSON(bytes);
+      Map<?, ?> m = (Map<?, ?>) Utils.fromJSON(bytes);
       String key = (String) m.get("key");
       if (key == null) {
         log.error("No key available from {} {}", url, PublicKeyHandler.PATH);
diff --git a/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPluginBase.java b/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPluginBase.java
index e1da856..46e80b8 100644
--- a/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPluginBase.java
+++ b/solr/core/src/java/org/apache/solr/security/RuleBasedAuthorizationPluginBase.java
@@ -262,9 +262,8 @@ public abstract class RuleBasedAuthorizationPluginBase implements AuthorizationP
   @SuppressWarnings({"unchecked"})
   public void init(Map<String, Object> initInfo) {
     mapping.put(null, new WildCardSupportMap());
-    @SuppressWarnings({"rawtypes"})
-    List<Map> perms = getListValue(initInfo, "permissions");
-    for (@SuppressWarnings({"rawtypes"})Map o : perms) {
+    List<Map<?, ?>> perms = getListValue(initInfo, "permissions");
+    for (Map<?, ?> o : perms) {
       Permission p;
       try {
         p = Permission.load(o);
diff --git a/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java b/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java
index b7df6fe..6ba3ab7 100644
--- a/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java
+++ b/solr/core/src/java/org/apache/solr/servlet/ResponseUtils.java
@@ -38,8 +38,7 @@ public class ResponseUtils {
    * <p>
    * Status codes less than 100 are adjusted to be 500.
    */
-  @SuppressWarnings({"unchecked"})
-  public static int getErrorInfo(Throwable ex, @SuppressWarnings({"rawtypes"})NamedList info, Logger log) {
+  public static int getErrorInfo(Throwable ex, NamedList<Object> info, Logger log) {
     int code = 500;
     if (ex instanceof SolrException) {
       SolrException solrExc = (SolrException)ex;
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/DictionaryFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/DictionaryFactory.java
index cae8560..077a8ef 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/DictionaryFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/DictionaryFactory.java
@@ -31,11 +31,10 @@ public abstract class DictionaryFactory {
   /** Default dictionary implementation to use for IndexBasedDictionaries */
   public static String DEFAULT_INDEX_BASED_DICT = HighFrequencyDictionaryFactory.class.getName(); 
   
-  @SuppressWarnings({"rawtypes"})
-  protected NamedList params;
+  protected NamedList<?> params;
   
   /** Sets the parameters available to SolrSuggester for use in Dictionary creation */
-  public void setParams(@SuppressWarnings({"rawtypes"})NamedList params) {
+  public void setParams(NamedList<?> params) {
     this.params = params;
   }
   
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/LookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/LookupFactory.java
index b54162b..98e5b73 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/LookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/LookupFactory.java
@@ -37,7 +37,7 @@ public abstract class LookupFactory {
    * Create a Lookup using config options in <code>params</code> and 
    * current <code>core</code>
    */
-  public abstract Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core);
+  public abstract Lookup create(NamedList<?> params, SolrCore core);
   
   /** 
    * <p>Returns the filename in which the in-memory data structure is stored </p>
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
index 1ce2206..adaa36b 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
@@ -82,7 +82,7 @@ public class AnalyzingInfixLookupFactory extends LookupFactory {
   
   
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     // mandatory parameter
     Object fieldTypeName = params.get(QUERY_ANALYZER);
     if (fieldTypeName == null) {
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
index b963cff..c5126fc 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
@@ -75,7 +75,7 @@ public class AnalyzingLookupFactory extends LookupFactory {
   private static final String FILENAME = "wfsta.bin";
 
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     // mandatory parameter
     Object fieldTypeName = params.get(QUERY_ANALYZER);
     if (fieldTypeName == null) {
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
index 4e27197..1f16178 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
@@ -70,7 +70,7 @@ public class BlendedInfixLookupFactory extends AnalyzingInfixLookupFactory {
   
   
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     // mandatory parameter
     Object fieldTypeName = params.get(QUERY_ANALYZER);
     if (fieldTypeName == null) {
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java
index 7b4d4d8..e8643ce 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FSTLookupFactory.java
@@ -50,7 +50,7 @@ public class FSTLookupFactory extends LookupFactory {
   public static final String EXACT_MATCH_FIRST = "exactMatchFirst";
 
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     int buckets = params.get(WEIGHT_BUCKETS) != null
     ? Integer.parseInt(params.get(WEIGHT_BUCKETS).toString())
     : 10;
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java
index 15bbbae..c6408e2 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java
@@ -53,7 +53,7 @@ public class FreeTextLookupFactory extends LookupFactory {
   
   
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     Object fieldTypeName = params.get(QUERY_ANALYZER);
     if (fieldTypeName == null) {
       throw new IllegalArgumentException("Error in configuration: " + QUERY_ANALYZER + " parameter is mandatory");
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
index 0fb3dbc..d70af3f 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
@@ -68,7 +68,7 @@ public class FuzzyLookupFactory extends LookupFactory {
   private static final String FILENAME = "fwfsta.bin";
   
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     
     // mandatory parameter
     Object fieldTypeName = params.get(AnalyzingLookupFactory.QUERY_ANALYZER);
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java
index b9b397e..a94140e 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/WFSTLookupFactory.java
@@ -40,7 +40,7 @@ public class WFSTLookupFactory extends LookupFactory {
   private static final String FILENAME = "wfst.bin";
 
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     boolean exactMatchFirst = params.get(EXACT_MATCH_FIRST) != null
     ? Boolean.valueOf(params.get(EXACT_MATCH_FIRST).toString())
     : true;
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/jaspell/JaspellLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/jaspell/JaspellLookupFactory.java
index 205760d..f64bc98 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/jaspell/JaspellLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/jaspell/JaspellLookupFactory.java
@@ -35,7 +35,7 @@ public class JaspellLookupFactory extends LookupFactory {
   private static final String FILENAME = "jaspell.dat";
 
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     log.info("init: {}", params);
     return new JaspellLookup();
   }
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java
index c6bbc93..b4d447c 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/tst/TSTLookupFactory.java
@@ -29,7 +29,7 @@ public class TSTLookupFactory extends LookupFactory {
   private static final String FILENAME = "tst.dat";
 
   @Override
-  public Lookup create(@SuppressWarnings({"rawtypes"})NamedList params, SolrCore core) {
+  public Lookup create(NamedList<?> params, SolrCore core) {
     return new TSTLookup(getTempDir(), "suggester");
   }
 
diff --git a/solr/core/src/java/org/apache/solr/update/HdfsTransactionLog.java b/solr/core/src/java/org/apache/solr/update/HdfsTransactionLog.java
index 2987aec..8982b6f 100644
--- a/solr/core/src/java/org/apache/solr/update/HdfsTransactionLog.java
+++ b/solr/core/src/java/org/apache/solr/update/HdfsTransactionLog.java
@@ -166,16 +166,16 @@ public class HdfsTransactionLog extends TransactionLog {
     return true;
   }
 
-  @SuppressWarnings({"unchecked", "rawtypes"})
+  @SuppressWarnings({"unchecked"})
   private void readHeader(FastInputStream fis) throws IOException {
     // read existing header
     boolean closeFis = false;
     if (fis == null) closeFis = true;
     fis = fis != null ? fis : new FSDataFastInputStream(fs.open(tlogFile), 0);
-    Map header = null;
+    Map<?,?> header = null;
     try {
       try (LogCodec codec = new LogCodec(resolver)) {
-        header = (Map) codec.unmarshal(fis);
+        header = (Map<?,?>) codec.unmarshal(fis);
       }
       
       fis.readInt(); // skip size
@@ -491,8 +491,7 @@ public class HdfsTransactionLog extends TransactionLog {
 
         long lastVersion = Long.MIN_VALUE;
         while ( (o = super.next()) != null) {
-          @SuppressWarnings({"rawtypes"})
-          List entry = (List) o;
+          List<?> entry = (List<?>) o;
           long version = (Long) entry.get(UpdateLog.VERSION_IDX);
           version = Math.abs(version);
           versionToPos.put(version, pos);
diff --git a/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java b/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java
index bb1be0d..31a5286 100644
--- a/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java
+++ b/solr/core/src/java/org/apache/solr/update/IndexFingerprint.java
@@ -105,13 +105,11 @@ public class IndexFingerprint implements MapSerializable {
     }
   }
   
-  @SuppressWarnings({"unchecked"})
   public static IndexFingerprint getFingerprint(SolrIndexSearcher searcher, LeafReaderContext ctx, Long maxVersion)
       throws IOException {
     SchemaField versionField = VersionInfo.getAndCheckVersionField(searcher.getSchema());
     ValueSource vs = versionField.getType().getValueSource(versionField, null);
-    @SuppressWarnings({"rawtypes"})
-    Map funcContext = ValueSource.newContext(searcher);
+    Map<Object, Object> funcContext = ValueSource.newContext(searcher);
     vs.createWeight(funcContext, searcher);
     
     IndexFingerprint f = new IndexFingerprint();
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 1fe33ec..46dcc13 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -909,7 +909,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
    */
   @SuppressWarnings({"unchecked"})
   synchronized public long applyPartialUpdates(BytesRef id, long prevPointer, long prevVersion,
-      Set<String> onlyTheseFields, @SuppressWarnings({"rawtypes"})SolrDocumentBase latestPartialDoc) {
+      Set<String> onlyTheseFields, SolrDocumentBase<?, ?> latestPartialDoc) {
     
     SolrInputDocument partialUpdateDoc = null;
 
@@ -957,7 +957,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
   /**
    * Add all fields from olderDoc into newerDoc if not already present in newerDoc
    */
-  private void applyOlderUpdates(@SuppressWarnings({"rawtypes"})SolrDocumentBase newerDoc, SolrInputDocument olderDoc, Set<String> mergeFields) {
+  private void applyOlderUpdates(SolrDocumentBase<?,?> newerDoc, SolrInputDocument olderDoc, Set<String> mergeFields) {
     for (String fieldName : olderDoc.getFieldNames()) {
       // if the newerDoc has this field, then this field from olderDoc can be ignored
       if (!newerDoc.containsKey(fieldName) && (mergeFields == null || mergeFields.contains(fieldName))) {
diff --git a/solr/core/src/java/org/apache/solr/update/VersionInfo.java b/solr/core/src/java/org/apache/solr/update/VersionInfo.java
index b97f812..db1006a 100644
--- a/solr/core/src/java/org/apache/solr/update/VersionInfo.java
+++ b/solr/core/src/java/org/apache/solr/update/VersionInfo.java
@@ -220,8 +220,7 @@ public class VersionInfo {
       if (lookup < 0) return null; // this means the doc doesn't exist in the index yet
 
       ValueSource vs = versionField.getType().getValueSource(versionField, null);
-      @SuppressWarnings({"rawtypes"})
-      Map context = ValueSource.newContext(searcher);
+      Map<Object, Object> context = ValueSource.newContext(searcher);
       vs.createWeight(context, searcher);
       FunctionValues fv = vs.getValues(context, searcher.getTopReaderContext().leaves().get((int) (lookup >> 32)));
       long ver = fv.longVal((int) lookup);
@@ -257,8 +256,7 @@ public class VersionInfo {
     
     long maxVersionInIndex = 0L;
     ValueSource vs = versionField.getType().getValueSource(versionField, null);
-    @SuppressWarnings({"rawtypes"})
-    Map funcContext = ValueSource.newContext(searcher);
+    Map<Object, Object> funcContext = ValueSource.newContext(searcher);
     vs.createWeight(funcContext, searcher);
     // TODO: multi-thread this
     for (LeafReaderContext ctx : searcher.getTopReaderContext().leaves()) {
diff --git a/solr/core/src/java/org/apache/solr/util/MockSearchableSolrClient.java b/solr/core/src/java/org/apache/solr/util/MockSearchableSolrClient.java
index 3dcb161..9680cc8 100644
--- a/solr/core/src/java/org/apache/solr/util/MockSearchableSolrClient.java
+++ b/solr/core/src/java/org/apache/solr/util/MockSearchableSolrClient.java
@@ -50,7 +50,7 @@ public class MockSearchableSolrClient extends SolrClient {
   }
 
   @Override
-  public synchronized NamedList<Object> request(@SuppressWarnings({"rawtypes"})SolrRequest request,
+  public synchronized NamedList<Object> request(SolrRequest<?> request,
                                                 String coll) throws SolrServerException, IOException {
     if (coll == null) {
       if (request.getParams() != null) {
diff --git a/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java b/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
index e970200..71e2d0d 100644
--- a/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/stats/MetricUtils.java
@@ -374,11 +374,10 @@ public class MetricUtils {
       Counter counter = (Counter) metric;
       convertCounter(n, counter, propertyFilter, compact, consumer);
     } else if (metric instanceof Gauge) {
-      @SuppressWarnings({"rawtypes"})
-      Gauge gauge = (Gauge) metric;
+      Gauge<?> gauge = (Gauge<?>) metric;
       // unwrap if needed
       if (gauge instanceof SolrMetricManager.GaugeWrapper) {
-        gauge = ((SolrMetricManager.GaugeWrapper) gauge).getGauge();
+        gauge = ((SolrMetricManager.GaugeWrapper<?>) gauge).getGauge();
       }
       try {
         if (gauge instanceof MapWriter) {
@@ -635,7 +634,7 @@ public class MetricUtils {
    * @param consumer consumer that accepts produced objects
    */
   static void convertGauge(String name,
-                           @SuppressWarnings({"rawtypes"})Gauge gauge,
+                           Gauge<?> gauge,
                            Predicate<CharSequence> propertyFilter, boolean simple, boolean compact,
                            String separator, BiConsumer<String, Object> consumer) {
     if (compact || simple) {
diff --git a/solr/core/src/java/org/apache/solr/util/tracing/SolrRequestCarrier.java b/solr/core/src/java/org/apache/solr/util/tracing/SolrRequestCarrier.java
index f5c613b..1fd2ee5 100644
--- a/solr/core/src/java/org/apache/solr/util/tracing/SolrRequestCarrier.java
+++ b/solr/core/src/java/org/apache/solr/util/tracing/SolrRequestCarrier.java
@@ -28,10 +28,9 @@ import org.apache.solr.client.solrj.SolrRequest;
  */
 public class SolrRequestCarrier implements TextMap {
 
-  @SuppressWarnings({"rawtypes"})
-  private final SolrRequest solrRequest;
+  private final SolrRequest<?> solrRequest;
 
-  public SolrRequestCarrier(@SuppressWarnings({"rawtypes"})SolrRequest solrRequest) {
+  public SolrRequestCarrier(SolrRequest<?> solrRequest) {
     this.solrRequest = solrRequest;
   }
 
diff --git a/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java b/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java
index fba9f4f..401b809 100644
--- a/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java
+++ b/solr/core/src/test/org/apache/solr/TestRandomDVFaceting.java
@@ -125,7 +125,7 @@ public class TestRandomDVFaceting extends SolrTestCaseJ4 {
     int percent = rand.nextInt(100);
     if (model == null) return;
     ArrayList<String> ids = new ArrayList<>(model.size());
-    for (@SuppressWarnings({"rawtypes"})Comparable id : model.keySet()) {
+    for (Comparable<?> id : model.keySet()) {
       if (rand.nextInt(100) < percent) {
         ids.add(id.toString());
       }
diff --git a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
index dda0f82..13baa60 100644
--- a/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/CollectionsAPISolrJTest.java
@@ -141,8 +141,7 @@ public class CollectionsAPISolrJTest extends SolrCloudTestCase {
           .process(cluster.getSolrClient());
 
       for (int i = 0; i < 300; i++) {
-        @SuppressWarnings({"rawtypes"})
-        Map m = cluster.getSolrClient().getZkStateReader().getClusterProperty(COLLECTION_DEF, null);
+        Map<?, ?> m = cluster.getSolrClient().getZkStateReader().getClusterProperty(COLLECTION_DEF, null);
         if (m != null) break;
         Thread.sleep(10);
       }
@@ -226,8 +225,7 @@ public class CollectionsAPISolrJTest extends SolrCloudTestCase {
           .process(cluster.getSolrClient());
 
       for (int i = 0; i < 300; i++) {
-        @SuppressWarnings({"rawtypes"})
-        Map m = cluster.getSolrClient().getZkStateReader().getClusterProperty(COLLECTION_DEF, null);
+        Map<?, ?> m = cluster.getSolrClient().getZkStateReader().getClusterProperty(COLLECTION_DEF, null);
         if (m != null) break;
         Thread.sleep(10);
       }
diff --git a/solr/core/src/test/org/apache/solr/cloud/SolrCloudExampleTest.java b/solr/core/src/test/org/apache/solr/cloud/SolrCloudExampleTest.java
index 7d63d8a..ac6eb19 100644
--- a/solr/core/src/test/org/apache/solr/cloud/SolrCloudExampleTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/SolrCloudExampleTest.java
@@ -268,8 +268,7 @@ public class SolrCloudExampleTest extends AbstractFullDistribZkTestBase {
     for (Slice slice : coll.getActiveSlices()) {
       for (Replica replica : slice.getReplicas()) {
         String uri = "" + replica.get(ZkStateReader.BASE_URL_PROP) + "/" + replica.get(ZkStateReader.CORE_NAME_PROP) + "/config";
-        @SuppressWarnings({"rawtypes"})
-        Map respMap = getAsMap(cloudClient, uri);
+        Map<?, ?> respMap = getAsMap(cloudClient, uri);
         Long maxTime = (Long) (getObjectByPath(respMap, true, asList("config", "updateHandler", "autoSoftCommit", "maxTime")));
         ret.put(replica.getCoreName(), maxTime);
       }
@@ -277,14 +276,13 @@ public class SolrCloudExampleTest extends AbstractFullDistribZkTestBase {
     return ret;
   }
 
-  @SuppressWarnings({"rawtypes"})
-  private Map getAsMap(CloudSolrClient cloudClient, String uri) throws Exception {
+  private Map<?, ?> getAsMap(CloudSolrClient cloudClient, String uri) throws Exception {
     HttpGet get = new HttpGet(uri);
     HttpEntity entity = null;
     try {
       entity = cloudClient.getLbClient().getHttpClient().execute(get).getEntity();
       String response = EntityUtils.toString(entity, StandardCharsets.UTF_8);
-      return (Map) fromJSONString(response);
+      return (Map<?, ?>) fromJSONString(response);
     } finally {
       EntityUtils.consumeQuietly(entity);
     }
diff --git a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
index 0c5c3f4..d555080 100644
--- a/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
+++ b/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
@@ -336,8 +336,7 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
 
     ignoreException("The configuration name should be provided");
     // Checking error when no configuration name is specified in request
-    @SuppressWarnings({"rawtypes"})
-    Map map = postDataAndGetResponse(cluster.getSolrClient(),
+    Map<?, ?> map = postDataAndGetResponse(cluster.getSolrClient(),
         cluster.getJettySolrRunners().get(0).getBaseUrl().toString()
         + "/admin/configs?action=UPLOAD", emptyData, null, false);
     assertNotNull(map);
@@ -909,8 +908,7 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
       uriEnding = "/solr/admin/configs?action=UPLOAD&name="+configSetName+suffix + (overwrite? "&overwrite=true" : "") + (cleanup? "&cleanup=true" : "");
     }
 
-    @SuppressWarnings({"rawtypes"})
-    Map map = postDataAndGetResponse(cluster.getSolrClient(),
+    Map<?, ?> map = postDataAndGetResponse(cluster.getSolrClient(),
             cluster.getJettySolrRunners().get(0).getBaseUrl().toString().replace("/solr", "") + uriEnding,
             file, username, usePut);
     assertNotNull(map);
@@ -932,8 +930,7 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
       uriEnding = "/solr/admin/configs?action=UPLOAD&name="+configSetName+suffix+"&filePath="+uploadPath + (overwrite? "&overwrite=true" : "") + (cleanup? "&cleanup=true" : "");
     }
 
-    @SuppressWarnings({"rawtypes"})
-    Map map = postDataAndGetResponse(cluster.getSolrClient(),
+    Map<?, ?> map = postDataAndGetResponse(cluster.getSolrClient(),
             cluster.getJettySolrRunners().get(0).getBaseUrl().toString().replace("/solr", "") + uriEnding,
             sampleConfigFile, username, usePut);
     assertNotNull(map);
@@ -1030,13 +1027,12 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
     return res;
   }
   
-  @SuppressWarnings({"rawtypes"})
-  public static Map postDataAndGetResponse(CloudSolrClient cloudClient,
+  public static Map<?, ?> postDataAndGetResponse(CloudSolrClient cloudClient,
       String uri, ByteBuffer bytarr, String username, boolean usePut) throws IOException {
     HttpEntityEnclosingRequestBase httpRequest = null;
     HttpEntity entity;
     String response = null;
-    Map m = null;
+    Map<?, ?> m = null;
     
     try {
       if (usePut) {
@@ -1057,7 +1053,7 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
           .getEntity();
       try {
         response = EntityUtils.toString(entity, UTF_8);
-        m = (Map) Utils.fromJSONString(response);
+        m = (Map<?, ?>) Utils.fromJSONString(response);
       } catch (JSONParser.ParseException e) {
         System.err.println("err response: " + response);
         throw new AssertionError(e);
@@ -1068,15 +1064,14 @@ public class TestConfigSetsAPI extends SolrCloudTestCase {
     return m;
   }
 
-  private static Object getObjectByPath(@SuppressWarnings({"rawtypes"})Map root,
+  private static Object getObjectByPath(Map<?, ?> root,
                                         boolean onlyPrimitive, java.util.List<String> hierarchy) {
-    @SuppressWarnings({"rawtypes"})
-    Map obj = root;
+    Map<?, ?> obj = root;
     for (int i = 0; i < hierarchy.size(); i++) {
       String s = hierarchy.get(i);
       if (i < hierarchy.size() - 1) {
         if (!(obj.get(s) instanceof Map)) return null;
-        obj = (Map) obj.get(s);
+        obj = (Map<?, ?>) obj.get(s);
         if (obj == null) return null;
       } else {
         Object val = obj.get(s);
diff --git a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java
index 2692704..6773c6b 100644
--- a/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/overseer/ZkStateWriterTest.java
@@ -136,8 +136,7 @@ public class ZkStateWriterTest extends SolrTestCaseJ4 {
         writer.enqueueUpdate(reader.getClusterState(), Collections.singletonList(c1), null);
         writer.writePendingUpdates();
 
-        @SuppressWarnings({"rawtypes"})
-        Map map = (Map) Utils.fromJSON(zkClient.getData(ZkStateReader.COLLECTIONS_ZKNODE + "/c1/state.json", null, null, true));
+        Map<?, ?> map = (Map<?, ?>) Utils.fromJSON(zkClient.getData(ZkStateReader.COLLECTIONS_ZKNODE + "/c1/state.json", null, null, true));
         assertNotNull(map.get("c1"));
       }
     } finally {
diff --git a/solr/core/src/test/org/apache/solr/core/ExitableDirectoryReaderTest.java b/solr/core/src/test/org/apache/solr/core/ExitableDirectoryReaderTest.java
index d4fd38e..988b67b 100644
--- a/solr/core/src/test/org/apache/solr/core/ExitableDirectoryReaderTest.java
+++ b/solr/core/src/test/org/apache/solr/core/ExitableDirectoryReaderTest.java
@@ -90,23 +90,20 @@ public class ExitableDirectoryReaderTest extends SolrTestCaseJ4 {
   public void testCacheAssumptions() throws Exception {
     String fq= "name:d*";
     SolrCore core = h.getCore();
-    MetricsMap filterCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper)core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.filterCache")).getGauge();
+    MetricsMap filterCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper<?>)core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.filterCache")).getGauge();
     long fqInserts = (long) filterCacheStats.getValue().get("inserts");
 
-    MetricsMap queryCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper)core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
+    MetricsMap queryCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper<?>)core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
     long qrInserts = (long) queryCacheStats.getValue().get("inserts");
 
     // This gets 0 docs back. Use 10000 instead of 1 for timeAllowed and it gets 100 back and the for loop below
     // succeeds.
     String response = JQ(req("q", "*:*", "fq", fq, "indent", "true", "timeAllowed", "1", "sleep", sleep));
-    @SuppressWarnings({"rawtypes"})
-    Map res = (Map) fromJSONString(response);
-    @SuppressWarnings({"rawtypes"})
-    Map body = (Map) (res.get("response"));
+    Map<?, ?> res = (Map<?, ?>) fromJSONString(response);
+    Map<?, ?> body = (Map<?, ?>) (res.get("response"));
     assertTrue("Should have fewer docs than " + NUM_DOCS, (long) (body.get("numFound")) < NUM_DOCS);
 
-    @SuppressWarnings({"rawtypes"})
-    Map header = (Map) (res.get("responseHeader"));
+    Map<?, ?> header = (Map<?, ?>) (res.get("responseHeader"));
     assertTrue("Should have partial results", (Boolean) (header.get(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY)));
 
     assertEquals("Should NOT have inserted partial results in the cache!",
@@ -121,11 +118,11 @@ public class ExitableDirectoryReaderTest extends SolrTestCaseJ4 {
     assertEquals("Hits should still be 0", (long) filterCacheStats.getValue().get("hits"), 0L);
     assertEquals("Inserts should be bumped", (long) filterCacheStats.getValue().get("inserts"), fqInserts + 1);
 
-    res = (Map) fromJSONString(response);
-    body = (Map) (res.get("response"));
+    res = (Map<?, ?>) fromJSONString(response);
+    body = (Map<?, ?>) (res.get("response"));
 
     assertEquals("Should have exactly " + NUM_DOCS, (long) (body.get("numFound")), NUM_DOCS);
-    header = (Map) (res.get("responseHeader"));
+    header = (Map<?, ?>) (res.get("responseHeader"));
     assertTrue("Should NOT have partial results", header.get(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY) == null);
   }
 
@@ -135,7 +132,7 @@ public class ExitableDirectoryReaderTest extends SolrTestCaseJ4 {
   public void testQueryResults() throws Exception {
     String q = "name:e*";
     SolrCore core = h.getCore();
-    MetricsMap queryCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper)core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
+    MetricsMap queryCacheStats = (MetricsMap)((SolrMetricManager.GaugeWrapper<?>)core.getCoreMetricManager().getRegistry().getMetrics().get("CACHE.searcher.queryResultCache")).getGauge();
     Map<String,Object> nl = queryCacheStats.getValue();
     long inserts = (long) nl.get("inserts");
 
@@ -145,12 +142,9 @@ public class ExitableDirectoryReaderTest extends SolrTestCaseJ4 {
     nl = queryCacheStats.getValue();
     assertEquals("Should NOT have inserted partial results!", inserts, (long) nl.get("inserts"));
 
-    @SuppressWarnings({"rawtypes"})
-    Map res = (Map) fromJSONString(response);
-    @SuppressWarnings({"rawtypes"})
-    Map body = (Map) (res.get("response"));
-    @SuppressWarnings({"rawtypes"})
-    Map header = (Map) (res.get("responseHeader"));
+    Map<?, ?> res = (Map<?, ?>) fromJSONString(response);
+    Map<?, ?> body = (Map<?, ?>) (res.get("response"));
+    Map<?, ?> header = (Map<?, ?>) (res.get("responseHeader"));
 
     assertTrue("Should have fewer docs than " + NUM_DOCS, (long) (body.get("numFound")) < NUM_DOCS);
     assertTrue("Should have partial results", (Boolean) (header.get(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY)));
@@ -162,9 +156,9 @@ public class ExitableDirectoryReaderTest extends SolrTestCaseJ4 {
     assertEquals("Hits should still be 0", (long) nl.get("hits"), (long) nl2.get("hits"));
     assertTrue("Inserts should be bumped", inserts < (long) nl2.get("inserts"));
 
-    res = (Map) fromJSONString(response);
-    body = (Map) (res.get("response"));
-    header = (Map) (res.get("responseHeader"));
+    res = (Map<?, ?>) fromJSONString(response);
+    body = (Map<?, ?>) (res.get("response"));
+    header = (Map<?, ?>) (res.get("responseHeader"));
 
     assertEquals("Should have exactly " + NUM_DOCS, NUM_DOCS, (long) (body.get("numFound")));
     Boolean test = (Boolean) (header.get(SolrQueryResponse.RESPONSE_HEADER_PARTIAL_RESULTS_KEY));
diff --git a/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java b/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java
index 1d0c733..c517edd 100644
--- a/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java
+++ b/solr/core/src/test/org/apache/solr/core/TestConfigSetImmutable.java
@@ -75,8 +75,7 @@ public class TestConfigSetImmutable extends RestTestBase {
         "}";
     String uri = "/config";
     String response = restTestHarness.post(uri, SolrTestCaseJ4.json(payload));
-    @SuppressWarnings({"rawtypes"})
-    Map map = (Map) Utils.fromJSONString(response);
+    Map<?, ?> map = (Map<?, ?>) Utils.fromJSONString(response);
     assertNotNull(map.get("error"));
     assertTrue(map.get("error").toString().contains("immutable"));
   }
@@ -93,10 +92,8 @@ public class TestConfigSetImmutable extends RestTestBase {
         "    }";
 
     String response = restTestHarness.post("/schema", json(payload));
-    @SuppressWarnings({"rawtypes"})
-    Map map = (Map) Utils.fromJSONString(response);
-    @SuppressWarnings({"rawtypes"})
-    Map error = (Map)map.get("error");
+    Map<?, ?> map = (Map<?, ?>) Utils.fromJSONString(response);
+    Map<?, ?> error = (Map<?, ?>)map.get("error");
     assertNotNull("No errors", error);
     String msg = (String)error.get("msg");
     assertTrue(msg.contains("immutable"));
diff --git a/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java b/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java
index 0012c11..57d4252 100644
--- a/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java
+++ b/solr/core/src/test/org/apache/solr/handler/AnalysisRequestHandlerTestBase.java
@@ -28,7 +28,7 @@ import org.apache.commons.lang3.ArrayUtils;
  */
 public abstract class AnalysisRequestHandlerTestBase extends SolrTestCaseJ4 {
 
-  protected void assertToken(@SuppressWarnings({"rawtypes"})NamedList token, TokenInfo info) {
+  protected void assertToken(NamedList<?> token, TokenInfo info) {
     assertEquals(info.getText(), token.get("text"));
     if (info.getRawText() != null) {
       assertEquals(info.getRawText(), token.get("raw_text"));
diff --git a/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java b/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
index 1895ba0..4779a0b 100644
--- a/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
@@ -294,8 +294,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
 
     String content = (String) p.addCommands.get(0).solrDoc.getFieldValue("_src_");
     assertNotNull(content);
-    @SuppressWarnings({"rawtypes"})
-    Map obj = (Map) Utils.fromJSONString(content);
+    Map<?, ?> obj = (Map<?, ?>) Utils.fromJSONString(content);
     assertEquals(Boolean.TRUE, obj.get("bool"));
     assertEquals("v0", obj.get("f0"));
     assertNotNull(obj.get("f0"));
@@ -304,7 +303,7 @@ public class JsonLoaderTest extends SolrTestCaseJ4 {
 
     content = (String) p.addCommands.get(1).solrDoc.getFieldValue("_src_");
     assertNotNull(content);
-    obj = (Map) Utils.fromJSONString(content);
+    obj = (Map<?, ?>) Utils.fromJSONString(content);
     assertEquals("v1", obj.get("f1"));
     assertEquals("v2", obj.get("f2"));
     assertTrue(obj.containsKey("f3"));
diff --git a/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java b/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
index 8c4003d..90d2388 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestBlobHandler.java
@@ -176,8 +176,7 @@ public class TestBlobHandler extends AbstractFullDistribZkTestBase {
       entity = cloudClient.getLbClient().getHttpClient().execute(httpPost).getEntity();
       try {
         response = EntityUtils.toString(entity, StandardCharsets.UTF_8);
-        @SuppressWarnings({"rawtypes"})
-        Map m = (Map) fromJSONString(response);
+        Map<?, ?> m = (Map<?, ?>) fromJSONString(response);
         assertFalse("Error in posting blob " + m.toString(), m.containsKey("error"));
       } catch (JSONParser.ParseException e) {
         log.error("$ERROR$: {}", response, e);
diff --git a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerDiskOverFlow.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerDiskOverFlow.java
index 0982217..6d2beb4 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerDiskOverFlow.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerDiskOverFlow.java
@@ -214,7 +214,7 @@ public class TestReplicationHandlerDiskOverFlow extends SolrTestCaseJ4 {
                  "true", response._getStr("details/follower/clearedLocalIndexFirst", null));
   }
 
-  @SuppressWarnings({"unchecked", "rawtypes"})
+  @SuppressWarnings("unchecked")
   private long indexDocs(SolrClient client, int totalDocs, int start) throws Exception {
     for (int i = 0; i < totalDocs; i++)
       TestReplicationHandler.index(client, "id", i + start, "name", TestUtil.randomSimpleString(random(), 1000, 5000));
@@ -225,7 +225,7 @@ public class TestReplicationHandlerDiskOverFlow extends SolrTestCaseJ4 {
         .add("generation", "-1"));
 
     long totalSize = 0;
-    for (Map map : (List<Map>) response.getResponse().get(CMD_GET_FILE_LIST)) {
+    for (Map<?, ?> map : (List<Map<?, ?>>) response.getResponse().get(CMD_GET_FILE_LIST)) {
       Long sz = (Long) map.get(ReplicationHandler.SIZE);
       totalSize += sz;
     }
diff --git a/solr/core/src/test/org/apache/solr/handler/TestReqParamsAPI.java b/solr/core/src/test/org/apache/solr/handler/TestReqParamsAPI.java
index dea016b..def36df 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReqParamsAPI.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReqParamsAPI.java
@@ -78,7 +78,6 @@ public class TestReqParamsAPI extends SolrCloudTestCase {
     }
   }
 
-  @SuppressWarnings({"rawtypes"})
   private void testReqParams() throws Exception {
     CloudSolrClient cloudClient = cluster.getSolrClient();
     DocCollection coll = cloudClient.getZkStateReader().getClusterState().getCollection(COLL_NAME);
@@ -112,7 +111,7 @@ public class TestReqParamsAPI extends SolrCloudTestCase {
 
     TestSolrConfigHandler.runConfigCommand(writeHarness, "/config/params", payload);
 
-    Map result = TestSolrConfigHandler.testForResponseElement(null,
+    Map<?, ?> result = TestSolrConfigHandler.testForResponseElement(null,
         urls.get(random().nextInt(urls.size())),
         "/config/params",
         cloudClient,
@@ -280,11 +279,10 @@ public class TestReqParamsAPI extends SolrCloudTestCase {
         asList("params", "fixed"),
         "f",
         5);
-    compareValues(result, new Predicate() {
+    compareValues(result, new Predicate<>() {
       @Override
       public boolean test(Object o) {
-        @SuppressWarnings({"rawtypes"})
-        List l = (List) o;
+        List<?> l = (List<?>) o;
         return l.contains("first") && l.contains("second");
       }
     }, asList("params", "add"));
diff --git a/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java b/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java
index 5bc531e..7726376 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestSolrConfigHandlerCloud.java
@@ -109,8 +109,7 @@ public class TestSolrConfigHandlerCloud extends AbstractFullDistribZkTestBase {
 
     TestSolrConfigHandler.runConfigCommand(writeHarness,"/config/params", payload);
 
-    @SuppressWarnings({"rawtypes"})
-    Map result = TestSolrConfigHandler.testForResponseElement(null,
+    Map<?, ?> result = TestSolrConfigHandler.testForResponseElement(null,
         urls.get(random().nextInt(urls.size())),
         "/config/params",
         cloudClient,
diff --git a/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java b/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
index eb7d2db..1be56ee 100644
--- a/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/V2ApiIntegrationTest.java
@@ -91,9 +91,9 @@ public class V2ApiIntegrationTest extends SolrCloudTestCase {
   private long getStatus(V2Response response) {
     Object header = response.getResponse().get("responseHeader");
     if (header instanceof NamedList) {
-      return (int) ((NamedList) header).get("status");
+      return (int) ((NamedList<?>) header).get("status");
     } else {
-      return (long) ((Map) header).get("status");
+      return (long) ((Map<?, ?>) header).get("status");
     }
   }
 
@@ -102,21 +102,19 @@ public class V2ApiIntegrationTest extends SolrCloudTestCase {
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set("command","XXXX");
     params.set("method", "POST");
-    @SuppressWarnings({"rawtypes"})
-    Map result = resAsMap(cluster.getSolrClient(),
+    Map<?, ?> result = resAsMap(cluster.getSolrClient(),
         new V2Request.Builder("/c/"+COLL_NAME+"/_introspect")
             .withParams(params).build());
     assertEquals("Command not found!", Utils.getObjectByPath(result, false, "/spec[0]/commands/XXXX"));
   }
 
-  @SuppressWarnings("rawtypes")
   @Test
   public void testWTParam() throws Exception {
     V2Request request = new V2Request.Builder("/c/" + COLL_NAME + "/get/_introspect").build();
     // TODO: If possible do this in a better way
     request.setResponseParser(new NoOpResponseParser("bleh"));
 
-    Map resp = resAsMap(cluster.getSolrClient(), request);
+    Map<?, ?> resp = resAsMap(cluster.getSolrClient(), request);
     String respString = resp.toString();
 
     assertFalse(respString.contains("<body><h2>HTTP ERROR 500</h2>"));
@@ -139,18 +137,15 @@ public class V2ApiIntegrationTest extends SolrCloudTestCase {
 
   @Test
   public void testSingleWarning() throws Exception {
-    @SuppressWarnings({"rawtypes"})
-    NamedList resp = cluster.getSolrClient().request(
+    NamedList<?> resp = cluster.getSolrClient().request(
         new V2Request.Builder("/c/"+COLL_NAME+"/_introspect").build());
-    @SuppressWarnings({"rawtypes"})
-    List warnings = resp.getAll("WARNING");
+    List<?> warnings = resp.getAll("WARNING");
     assertEquals(1, warnings.size());
   }
 
   @Test
   public void testSetPropertyValidationOfCluster() throws IOException, SolrServerException {
-    @SuppressWarnings({"rawtypes"})
-    NamedList resp = cluster.getSolrClient().request(
+    NamedList<?> resp = cluster.getSolrClient().request(
       new V2Request.Builder("/cluster").withMethod(SolrRequest.METHOD.POST).withPayload("{set-property: {name: maxCoresPerNode, val:42}}").build());
     assertTrue(resp.toString().contains("status=0"));
     resp = cluster.getSolrClient().request(
@@ -163,8 +158,7 @@ public class V2ApiIntegrationTest extends SolrCloudTestCase {
     CloudSolrClient client = cluster.getSolrClient();
     V2Request req1 = new V2Request.Builder("/c/" + COLL_NAME + "/get/_introspect").build();
     assertEquals(COLL_NAME, req1.getCollection());
-    @SuppressWarnings({"rawtypes"})
-    Map result = resAsMap(client, req1);
+    Map<?, ?> result = resAsMap(client, req1);
     assertEquals("/c/collection1/get", Utils.getObjectByPath(result, true, "/spec[0]/url/paths[0]"));
     result = resAsMap(client, new V2Request.Builder("/collections/"+COLL_NAME+"/get/_introspect").build());
     assertEquals("/collections/collection1/get", Utils.getObjectByPath(result, true, "/spec[0]/url/paths[0]"));
@@ -193,8 +187,7 @@ public class V2ApiIntegrationTest extends SolrCloudTestCase {
     assertEquals(0, ((SolrDocumentList)v2Response.getResponse().get("response")).getNumFound());
   }
   
-  @SuppressWarnings({"rawtypes"})
-  private Map resAsMap(CloudSolrClient client, V2Request request) throws SolrServerException, IOException {
+  private Map<?, ?> resAsMap(CloudSolrClient client, V2Request request) throws SolrServerException, IOException {
     NamedList<Object> rsp = client.request(request);
     return rsp.asMap(100);
   }
diff --git a/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java
index 7d158aa..ce7576a 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/QueryElevationComponentTest.java
@@ -1127,8 +1127,7 @@ public class QueryElevationComponentTest extends SolrTestCaseJ4 {
    */
   private static String assertCursorJQ(SolrQueryRequest req, String... tests) throws Exception {
     String json = assertJQ(req, tests);
-    @SuppressWarnings({"rawtypes"})
-    Map rsp = (Map) fromJSONString(json);
+    Map<?, ?> rsp = (Map<?, ?>) fromJSONString(json);
     assertTrue("response doesn't contain "+CURSOR_MARK_NEXT + ": " + json,
                rsp.containsKey(CURSOR_MARK_NEXT));
     String next = (String)rsp.get(CURSOR_MARK_NEXT);
diff --git a/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java b/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
index 15f5b7e..6d04b90 100644
--- a/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
+++ b/solr/core/src/test/org/apache/solr/request/SimpleFacetsTest.java
@@ -524,9 +524,8 @@ public class SimpleFacetsTest extends SolrTestCaseJ4 {
     SchemaField sf = h.getCore().getLatestSchema().getField(field);
 
     String response = JQ(req("q", "*:*"));
-    @SuppressWarnings({"rawtypes"})
-    Map rsp = (Map) fromJSONString(response);
-    Long numFound  = (Long)(((Map)rsp.get("response")).get("numFound"));
+    Map<?, ?> rsp = (Map<?, ?>) fromJSONString(response);
+    Long numFound  = (Long)(((Map<?, ?>)rsp.get("response")).get("numFound"));
 
     ModifiableSolrParams params = params("q","*:*", "facet.mincount","1","rows","0", "facet","true", "facet.field","{!key=myalias}"+field);
     
diff --git a/solr/core/src/test/org/apache/solr/schema/TestUseDocValuesAsStored2.java b/solr/core/src/test/org/apache/solr/schema/TestUseDocValuesAsStored2.java
index 41e5504..cab4e27 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestUseDocValuesAsStored2.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestUseDocValuesAsStored2.java
@@ -89,8 +89,7 @@ public class TestUseDocValuesAsStored2 extends RestTestBase {
 
     String response = harness.post("/schema", json(payload));
 
-    @SuppressWarnings({"rawtypes"})
-    Map m = (Map) Utils.fromJSONString(response);
+    Map<?, ?> m = (Map<?, ?>) Utils.fromJSONString(response);
     assertNull(response, m.get("errors"));
 
     // default value of useDocValuesAsStored
diff --git a/solr/core/src/test/org/apache/solr/security/HttpParamDelegationTokenPlugin.java b/solr/core/src/test/org/apache/solr/security/HttpParamDelegationTokenPlugin.java
index 30badf1..a85b36a 100644
--- a/solr/core/src/test/org/apache/solr/security/HttpParamDelegationTokenPlugin.java
+++ b/solr/core/src/test/org/apache/solr/security/HttpParamDelegationTokenPlugin.java
@@ -191,7 +191,7 @@ public class HttpParamDelegationTokenPlugin extends KerberosPlugin {
     @Override
     public void init(Properties config) throws ServletException {
       Properties conf = new Properties();
-      for (@SuppressWarnings({"rawtypes"})Map.Entry entry : config.entrySet()) {
+      for (Map.Entry<Object, Object> entry : config.entrySet()) {
         conf.setProperty((String) entry.getKey(), (String) entry.getValue());
       }
       conf.setProperty(TOKEN_KIND, KerberosPlugin.DELEGATION_TOKEN_TYPE_DEFAULT);
diff --git a/solr/core/src/test/org/apache/solr/security/TestAuthorizationFramework.java b/solr/core/src/test/org/apache/solr/security/TestAuthorizationFramework.java
index 81c07e3..33e0f45 100644
--- a/solr/core/src/test/org/apache/solr/security/TestAuthorizationFramework.java
+++ b/solr/core/src/test/org/apache/solr/security/TestAuthorizationFramework.java
@@ -89,7 +89,6 @@ public class TestAuthorizationFramework extends AbstractFullDistribZkTestBase {
 
   }
 
-  @SuppressWarnings({"unchecked"})
   public static void verifySecurityStatus(HttpClient cl, String url, String objPath, Object expected, int count) throws Exception {
     boolean success = false;
     String s = null;
@@ -97,13 +96,12 @@ public class TestAuthorizationFramework extends AbstractFullDistribZkTestBase {
     for (int i = 0; i < count; i++) {
       HttpGet get = new HttpGet(url);
       s = EntityUtils.toString(cl.execute(get, HttpClientUtil.createNewHttpClientRequestContext()).getEntity());
-      @SuppressWarnings({"rawtypes"})
-      Map m = (Map) Utils.fromJSONString(s);
+      Map<?, ?> m = (Map<?, ?>) Utils.fromJSONString(s);
 
       Object actual = Utils.getObjectByPath(m, true, hierarchy);
       if (expected instanceof Predicate) {
-        @SuppressWarnings({"rawtypes"})
-        Predicate predicate = (Predicate) expected;
+        @SuppressWarnings("unchecked")
+        Predicate<Object> predicate = (Predicate<Object>) expected;
         if (predicate.test(actual)) {
           success = true;
           break;
diff --git a/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java b/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
index d18b575..9815341 100644
--- a/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
+++ b/solr/core/src/test/org/apache/solr/util/SolrPluginUtilsTest.java
@@ -248,7 +248,7 @@ public class SolrPluginUtilsTest extends SolrTestCaseJ4 {
         
   }
 
-  private static int countItems(@SuppressWarnings({"rawtypes"})Iterator i) {
+  private static int countItems(Iterator<?> i) {
     int count = 0;
     while (i.hasNext()) {
       count++;
diff --git a/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java b/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java
index f8a7aa4..23bea78 100644
--- a/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java
+++ b/solr/core/src/test/org/apache/solr/util/TestSolrJacksonAnnotation.java
@@ -29,7 +29,6 @@ import org.apache.solr.common.util.Utils;
 
 public class TestSolrJacksonAnnotation extends SolrTestCase {
 
-  @SuppressWarnings({"unchecked"})
   public void testSerDe() throws Exception {
     ObjectMapper mapper = new ObjectMapper();
     mapper.setAnnotationIntrospector(new SolrJacksonAnnotationInspector());
@@ -40,8 +39,8 @@ public class TestSolrJacksonAnnotation extends SolrTestCase {
     o.ifld = 1234;
     String json = mapper.writeValueAsString(o);
 
-    @SuppressWarnings({"rawtypes"})
-    Map m = (Map) Utils.fromJSONString(json);
+    @SuppressWarnings("unchecked")
+    Map<Object, Object> m = (Map<Object, Object>) Utils.fromJSONString(json);
     assertEquals("v1",  m.get("field"));
     assertEquals("v2",  m.get("friendlyName"));
     assertEquals("1234",  String.valueOf(m.get("friendlyIntFld")));
diff --git a/solr/core/src/test/org/apache/solr/util/TestUtils.java b/solr/core/src/test/org/apache/solr/util/TestUtils.java
index 249aad6..e5aa8b0 100644
--- a/solr/core/src/test/org/apache/solr/util/TestUtils.java
+++ b/solr/core/src/test/org/apache/solr/util/TestUtils.java
@@ -174,8 +174,8 @@ public class TestUtils extends SolrTestCaseJ4 {
 
   public void testNoggitFlags() throws IOException {
     String s = "a{b:c, d [{k1:v1}{k2:v2}]}";
-    assertNoggitJsonValues((Map) Utils.fromJSON(s.getBytes(UTF_8)));
-    assertNoggitJsonValues((Map) fromJSONString(s));
+    assertNoggitJsonValues((Map<?, ?>) Utils.fromJSON(s.getBytes(UTF_8)));
+    assertNoggitJsonValues((Map<?, ?>) fromJSONString(s));
     List<CommandOperation> commands = CommandOperation.parse(new StringReader(s + s));
     assertEquals(2, commands.size());
     for (CommandOperation command : commands) {
@@ -197,13 +197,12 @@ public class TestUtils extends SolrTestCaseJ4 {
     }
 
     ContentStream stream = new ContentStreamBase.ByteArrayStream(baos.toByteArray(),null, "application/javabin");
-    @SuppressWarnings({"rawtypes"})
-    List<CommandOperation> commands = CommandOperation.readCommands(Collections.singletonList(stream), new NamedList(), Collections.singleton("single"));
+    List<CommandOperation> commands = CommandOperation.readCommands(Collections.singletonList(stream), new NamedList<>(), Collections.singleton("single"));
 
     assertEquals(5, commands.size());
   }
 
-  private void assertNoggitJsonValues(@SuppressWarnings({"rawtypes"})Map m) {
+  private void assertNoggitJsonValues(Map<?, ?> m) {
     assertEquals( "c" ,Utils.getObjectByPath(m, true, "/a/b"));
     assertEquals( "v1" ,Utils.getObjectByPath(m, true, "/a/d[0]/k1"));
     assertEquals( "v2" ,Utils.getObjectByPath(m, true, "/a/d[1]/k2"));
@@ -224,8 +223,7 @@ public class TestUtils extends SolrTestCaseJ4 {
         "        'path':'/update/*',\n" +
         "        'role':'dev'}],\n" +
         "    '':{'v':4}}}";
-    @SuppressWarnings({"rawtypes"})
-    Map m = (Map) fromJSONString(json);
+    Map<?, ?> m = (Map<?, ?>) fromJSONString(json);
     Utils.setObjectByPath(m,"authorization/permissions[1]/role","guest");
     Utils.setObjectByPath(m,"authorization/permissions[0]/role[-1]","dev");
     assertEquals("guest", Utils.getObjectByPath(m,true,"authorization/permissions[1]/role"));
@@ -250,8 +248,7 @@ public class TestUtils extends SolrTestCaseJ4 {
         "        'path':'/update/*',\n" +
         "        'role':'dev'}],\n" +
         "    '':{'v':4}}}";
-    @SuppressWarnings({"rawtypes"})
-    Map m = (Map) fromJSONString(json);
+    Map<?, ?> m = (Map<?, ?>) fromJSONString(json);
     assertEquals("x-update", Utils.getObjectByPath(m,false, "authorization/permissions[1]/name"));
 
   }
@@ -294,8 +291,7 @@ public class TestUtils extends SolrTestCaseJ4 {
     assertEquals("corestatus_test_shard2_replica_n3", Utils.getObjectByPath(m, false,asList("success[3]", "value", "core") ));
     assertEquals(5033L, Utils.getObjectByPath(m, false,asList("success[3]", "value", "responseHeader", "QTime") ));
 
-    @SuppressWarnings({"rawtypes"})
-    Map nodes = (Map) m.get("success");
+    Map<?, ?> nodes = (Map<?, ?>) m.get("success");
     m.put("success", (MapWriter) ew -> nodes.forEach((o, o2) -> ew.putNoEx((String) o,o2)));
     assertEquals("127.0.0.1:56443_solr", Utils.getObjectByPath(m,false, "success[0]/key"));
     assertEquals("corestatus_test_shard2_replica_n5", Utils.getObjectByPath(m, false,asList("success[0]", "value", "core") ));
diff --git a/solr/core/src/test/org/apache/solr/util/stats/MetricUtilsTest.java b/solr/core/src/test/org/apache/solr/util/stats/MetricUtilsTest.java
index 3fdd282..17358f2 100644
--- a/solr/core/src/test/org/apache/solr/util/stats/MetricUtilsTest.java
+++ b/solr/core/src/test/org/apache/solr/util/stats/MetricUtilsTest.java
@@ -41,7 +41,6 @@ import org.junit.Test;
 public class MetricUtilsTest extends SolrTestCaseJ4 {
 
   @Test
-  @SuppressWarnings({"unchecked"})
   public void testSolrTimerGetSnapshot() {
     // create a timer with up to 100 data points
     final Timer timer = new Timer();
@@ -54,8 +53,7 @@ public class MetricUtilsTest extends SolrTestCaseJ4 {
     MetricUtils.convertTimer("", timer, MetricUtils.ALL_PROPERTIES, false, false, ".", (k, v) -> {
       ((MapWriter) v).toMap(map);
     });
-    @SuppressWarnings({"rawtypes"})
-    NamedList lst = new NamedList(map);
+    NamedList<?> lst = new NamedList<>(map);
     // check that expected metrics were obtained
     assertEquals(14, lst.size());
     final Snapshot snapshot = timer.getSnapshot();
@@ -161,7 +159,7 @@ public class MetricUtilsTest extends SolrTestCaseJ4 {
       } else if (k.startsWith("map") || k.startsWith("wrapped")) {
         assertNotNull(v.toString(), v.get("value"));
         assertTrue(v.toString(), v.get("value") instanceof Map);
-        assertEquals(v.toString(), "bar", ((Map) v.get("value")).get("foo"));
+        assertEquals(v.toString(), "bar", ((Map<?, ?>) v.get("value")).get("foo"));
       }
     });
     // test compact format