You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by mm...@apache.org on 2026/03/27 22:29:18 UTC

(pulsar) branch master updated: [improve][build] Fix final rawtypes, unchecked, and redundant cast warnings (#25420)

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

mmerli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new 3aa8e56aadd [improve][build] Fix final rawtypes, unchecked, and redundant cast warnings (#25420)
3aa8e56aadd is described below

commit 3aa8e56aaddf179b9b630d0906842481b2dd3b04
Author: Matteo Merli <mm...@apache.org>
AuthorDate: Fri Mar 27 15:29:13 2026 -0700

    [improve][build] Fix final rawtypes, unchecked, and redundant cast warnings (#25420)
---
 .../java/org/apache/pulsar/client/cli/CmdProduce.java    |  5 +++--
 .../java/org/apache/pulsar/client/impl/ProducerImpl.java | 16 ++++++++++------
 .../impl/PulsarClientSharedResourcesBuilderImpl.java     |  1 +
 .../pulsar/functions/instance/AbstractSinkRecord.java    |  8 ++++++--
 .../pulsar/functions/instance/FunctionResultRouter.java  |  2 +-
 .../pulsar/functions/instance/JavaInstanceRunnable.java  | 14 ++++++++++----
 .../instance/state/BKStateStoreProviderImpl.java         |  1 +
 .../state/PulsarMetadataStateStoreProviderImpl.java      |  1 +
 .../instance/stats/FunctionCollectorRegistryImpl.java    |  6 ++++--
 .../org/apache/pulsar/functions/sink/PulsarSink.java     |  1 +
 .../functions/windowing/WindowFunctionExecutor.java      |  7 +++++--
 .../apache/pulsar/functions/windowing/WindowImpl.java    |  2 +-
 .../windowing/evictors/WatermarkCountEvictionPolicy.java |  1 +
 .../java/org/apache/pulsar/functions/LocalRunner.java    |  1 +
 .../bookkeeper/PulsarLedgerUnderreplicationManager.java  |  1 +
 .../metadata/bookkeeper/PulsarMetadataBookieDriver.java  |  1 +
 .../org/apache/pulsar/websocket/ProducerHandler.java     |  1 +
 17 files changed, 49 insertions(+), 20 deletions(-)

diff --git a/pulsar-client-tools/src/main/java/org/apache/pulsar/client/cli/CmdProduce.java b/pulsar-client-tools/src/main/java/org/apache/pulsar/client/cli/CmdProduce.java
index 9c72cd474cc..69b180eca75 100644
--- a/pulsar-client-tools/src/main/java/org/apache/pulsar/client/cli/CmdProduce.java
+++ b/pulsar-client-tools/src/main/java/org/apache/pulsar/client/cli/CmdProduce.java
@@ -344,7 +344,8 @@ public class CmdProduce extends AbstractCmd {
                             limiter.acquire();
                         }
 
-                        TypedMessageBuilder message = producer.newMessage();
+                        @SuppressWarnings("unchecked")
+                        TypedMessageBuilder<Object> message = (TypedMessageBuilder<Object>) producer.newMessage();
 
                         if (!kvMap.isEmpty()) {
                             message.properties(kvMap);
@@ -359,7 +360,7 @@ public class CmdProduce extends AbstractCmd {
                                 break;
                             case KEY_VALUE_ENCODING_TYPE_SEPARATED:
                             case KEY_VALUE_ENCODING_TYPE_INLINE:
-                                KeyValue kv = new KeyValue<>(
+                                KeyValue<byte[], byte[]> kv = new KeyValue<>(
                                         keyValueKeyBytes,
                                         content);
                                 message.value(kv);
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java
index 4119fc8b6ed..fa4b4053758 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java
@@ -146,10 +146,12 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
 
     private final CompressionCodec compressor;
 
+    @SuppressWarnings("rawtypes")
     static final AtomicLongFieldUpdater<ProducerImpl> LAST_SEQ_ID_PUBLISHED_UPDATER = AtomicLongFieldUpdater
             .newUpdater(ProducerImpl.class, "lastSequenceIdPublished");
     private volatile long lastSequenceIdPublished;
 
+    @SuppressWarnings("rawtypes")
     static final AtomicLongFieldUpdater<ProducerImpl> LAST_SEQ_ID_PUSHED_UPDATER = AtomicLongFieldUpdater
             .newUpdater(ProducerImpl.class, "lastSequenceIdPushed");
     protected volatile long lastSequenceIdPushed;
@@ -453,6 +455,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
             }
         }
 
+        @SuppressWarnings("unchecked")
         private void onSendComplete(Throwable e, SendCallback sendCallback, MessageImpl<?> msg) {
             long createdAt = (sendCallback instanceof ProducerImpl.DefaultSendMessageCallback)
                     ? ((DefaultSendMessageCallback) sendCallback).createdAt : this.createdAt;
@@ -851,7 +854,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
     }
 
     @VisibleForTesting
-    boolean populateMessageSchema(MessageImpl msg, SendCallback callback) {
+    boolean populateMessageSchema(MessageImpl<?> msg, SendCallback callback) {
         MessageMetadata msgMetadataBuilder = msg.getMessageBuilder();
         if (msg.getSchemaInternal() == schema) {
             schemaVersion.ifPresent(v -> msgMetadataBuilder.setSchemaVersion(v));
@@ -886,7 +889,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
         return true;
     }
 
-    private boolean rePopulateMessageSchema(MessageImpl msg) {
+    private boolean rePopulateMessageSchema(MessageImpl<?> msg) {
         byte[] schemaVersion = schemaCache.get(msg.getSchemaHash());
         if (schemaVersion == null) {
             return false;
@@ -900,7 +903,8 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
         return true;
     }
 
-    private void tryRegisterSchema(ClientCnx cnx, final MessageImpl msg, SendCallback callback, long expectedCnxEpoch) {
+    private void tryRegisterSchema(ClientCnx cnx, final MessageImpl<?> msg, SendCallback callback,
+                                    long expectedCnxEpoch) {
         if (!changeToRegisteringSchemaState()) {
             return;
         }
@@ -1938,7 +1942,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
                         // Deprecated (PIP-464): This backward-compatible path sends old Jackson JsonSchema
                         // format to brokers below protocol v13 (Pulsar < 2.1). Scheduled for removal in a
                         // future major release.
-                        JSONSchema jsonSchema = (JSONSchema) schema;
+                        JSONSchema<?> jsonSchema = (JSONSchema<?>) schema;
                         schemaInfo = jsonSchema.getBackwardsCompatibleJsonSchemaInfo();
                     } else {
                         schemaInfo = schema.getSchemaInfo();
@@ -2560,7 +2564,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
      * Note: Since the current method accesses & modifies {@link #pendingMessages}, you should acquire a lock on
      *       {@link ProducerImpl} before calling method.
      */
-    private void recoverProcessOpSendMsgFrom(ClientCnx cnx, MessageImpl latestMsgAttemptedRegisteredSchema,
+    private void recoverProcessOpSendMsgFrom(ClientCnx cnx, MessageImpl<?> latestMsgAttemptedRegisteredSchema,
                                              boolean failedIncompatibleSchema, long expectedEpoch) {
         if (expectedEpoch != this.connectionHandler.getEpoch() || cnx() == null) {
             // In this case, the cnx passed to this method is no longer the active connection. This method will get
@@ -2572,7 +2576,7 @@ public class ProducerImpl<T> extends ProducerBase<T> implements TimerTask, Conne
         }
         final boolean stripChecksum = cnx.getRemoteEndpointProtocolVersion() < brokerChecksumSupportedVersion();
         Iterator<OpSendMsg> msgIterator = pendingMessages.iterator();
-        MessageImpl loopStartAt = latestMsgAttemptedRegisteredSchema;
+        MessageImpl<?> loopStartAt = latestMsgAttemptedRegisteredSchema;
         OpSendMsg loopEndDueToSchemaRegisterNeeded = null;
         boolean pausedSendingToPreservePublishOrderOnSchemaRegFailure = false;
         while (msgIterator.hasNext()) {
diff --git a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java
index fe9d43dc41e..f8ac98bb862 100644
--- a/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java
+++ b/pulsar-client/src/main/java/org/apache/pulsar/client/impl/PulsarClientSharedResourcesBuilderImpl.java
@@ -59,6 +59,7 @@ public class PulsarClientSharedResourcesBuilderImpl implements PulsarClientShare
         }
     }
 
+    @SuppressWarnings("rawtypes")
     static class ThreadPoolResourceConfig extends NamedResourceConfig<ThreadPoolConfig> implements ThreadPoolConfig {
         int numberOfThreads = Runtime.getRuntime().availableProcessors();
         boolean daemon = Thread.currentThread().isDaemon();
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/AbstractSinkRecord.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/AbstractSinkRecord.java
index d0e70d67514..1ee6ae3e2d4 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/AbstractSinkRecord.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/AbstractSinkRecord.java
@@ -101,9 +101,13 @@ public abstract class AbstractSinkRecord<T> implements Record<T> {
                 // see PIP-85
                 if (record.getMessage().isPresent()
                         && record.getMessage().get().getReaderSchema().isPresent()) {
-                    schema = (Schema<T>) record.getMessage().get().getReaderSchema().get();
+                    @SuppressWarnings("unchecked")
+                    Schema<T> readerSchema = (Schema<T>) record.getMessage().get().getReaderSchema().get();
+                    schema = readerSchema;
                 } else {
-                    schema = (Schema<T>) ((AutoConsumeSchema) schema).getInternalSchema();
+                    @SuppressWarnings("unchecked")
+                    Schema<T> internalSchema = (Schema<T>) ((AutoConsumeSchema) schema).getInternalSchema();
+                    schema = internalSchema;
                 }
             }
             return schema;
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/FunctionResultRouter.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/FunctionResultRouter.java
index f6b4cd829b9..1a44b924386 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/FunctionResultRouter.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/FunctionResultRouter.java
@@ -52,7 +52,7 @@ public class FunctionResultRouter extends RoundRobinPartitionMessageRouterImpl {
     }
 
     @Override
-    public int choosePartition(Message msg, TopicMetadata metadata) {
+    public int choosePartition(Message<?> msg, TopicMetadata metadata) {
         // if key is specified, we should use key as routing;
         // if key is not specified and no sequence id is provided, not an effectively-once publish, use the default
         // round-robin routing.
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java
index 56dc802affb..7c9685e90d0 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/JavaInstanceRunnable.java
@@ -420,7 +420,7 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
     }
 
     @VisibleForTesting
-    void handleResult(Record srcRecord, JavaExecutionResult result) throws Exception {
+    void handleResult(Record<?> srcRecord, JavaExecutionResult result) throws Exception {
         if (result.getUserException() != null) {
             Throwable t = result.getUserException();
             log.warn("Encountered exception when processing message {}",
@@ -481,7 +481,9 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
         }
     }
 
-    private OutputRecordSinkRecord encodeWithRecordSchemaAndDecodeWithSinkSchema(Record srcRecord, Record record) {
+    @SuppressWarnings({"unchecked", "rawtypes"})
+    private OutputRecordSinkRecord<?> encodeWithRecordSchemaAndDecodeWithSinkSchema(
+            Record<?> srcRecord, Record<?> record) {
         AbstractSinkRecord<?> sinkRecord;
         Schema encodingSchema = record.getSchema();
         boolean isKeyValueSeparated = false;
@@ -521,8 +523,8 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
         return new OutputRecordSinkRecord(srcRecord, record, decoded, finalSchema);
     }
 
-    private Record readInput() throws Exception {
-        Record record;
+    private Record<?> readInput() throws Exception {
+        Record<?> record;
         if (componentType == org.apache.pulsar.functions.proto.Function.FunctionDetails.ComponentType.SOURCE) {
             Thread.currentThread().setContextClassLoader(componentClassLoader);
         }
@@ -773,6 +775,7 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
         context.updateLoggers();
     }
 
+    @SuppressWarnings({"unchecked", "rawtypes"})
     private void setupInput(ContextImpl contextImpl) throws Exception {
 
         SourceSpec sourceSpec = this.instanceConfig.getFunctionDetails().getSource();
@@ -924,6 +927,7 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
      * @param secretsProvider - the secrets provider that will convert secret's values into config values.
      * @param configs - the connector configuration map, which will be mutated.
      */
+    @SuppressWarnings("unchecked")
     private static void interpolateSecretsIntoConfigs(SecretsProvider secretsProvider,
                                                       Map<String, Object> configs) {
         for (Map.Entry<String, Object> entry : configs.entrySet()) {
@@ -1024,6 +1028,7 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
     }
 
 
+    @SuppressWarnings({"unchecked", "rawtypes"})
     private void setupOutput(ContextImpl contextImpl) throws Exception {
 
         SinkSpec sinkSpec = this.instanceConfig.getFunctionDetails().getSink();
@@ -1097,6 +1102,7 @@ public class JavaInstanceRunnable implements AutoCloseable, Runnable {
         }
     }
 
+    @SuppressWarnings("unchecked")
     private static <T> Schema<T> getSinkSchema(Record<?> record, Class<T> clazz) {
         SchemaType type = getSchemaTypeOrDefault(record, clazz);
         switch (type) {
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java
index 5faab27b341..f60bb676b45 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/BKStateStoreProviderImpl.java
@@ -181,6 +181,7 @@ public class BKStateStoreProviderImpl implements StateStoreProvider {
         throw new IOException("Failed to open state table for function " + tenant + "/" + namespace + "/" + name);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public <T extends StateStore> T getStateStore(String tenant, String namespace, String name) throws Exception {
         // we defer creation of the state table until a java instance is running here.
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/PulsarMetadataStateStoreProviderImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/PulsarMetadataStateStoreProviderImpl.java
index dd2a702e65f..9121fe57d43 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/PulsarMetadataStateStoreProviderImpl.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/state/PulsarMetadataStateStoreProviderImpl.java
@@ -57,6 +57,7 @@ public class PulsarMetadataStateStoreProviderImpl implements StateStoreProvider
         }
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public DefaultStateStore getStateStore(String tenant, String namespace, String name) throws Exception {
         return new PulsarMetadataStateStoreImpl(store, prefix, tenant, namespace, name);
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionCollectorRegistryImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionCollectorRegistryImpl.java
index dae3e04ea63..611031474f7 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionCollectorRegistryImpl.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/instance/stats/FunctionCollectorRegistryImpl.java
@@ -26,9 +26,11 @@ public class FunctionCollectorRegistryImpl extends FunctionCollectorRegistry {
 
     private final Map<String, Collector> namesToCollectors = new HashMap<String, Collector>();
 
-    public Collector registerIfNotExist(String metricName, Collector collector) {
+    @Override
+    public <T extends Collector> T registerIfNotExist(String metricName, T collector) {
         synchronized (this) {
-            Collector existingCollector = namesToCollectors.get(metricName);
+            @SuppressWarnings("unchecked")
+            T existingCollector = (T) namesToCollectors.get(metricName);
             if (existingCollector == null) {
                 namesToCollectors.put(metricName, collector);
                 super.register(collector);
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
index da6b8006eb9..dadf401d542 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/sink/PulsarSink.java
@@ -291,6 +291,7 @@ public class PulsarSink<T> implements Sink<T> {
         }
 
         if (sinkRecord.getSourceRecord() instanceof PulsarRecord) {
+            @SuppressWarnings("unchecked")
             PulsarRecord<T> pulsarRecord = (PulsarRecord<T>) sinkRecord.getSourceRecord();
             // forward user properties to sink-topic
             msg.property("__pfn_input_topic__", pulsarRecord.getTopicName().get())
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutor.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutor.java
index 1e492d74aa6..bd3d2dca610 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutor.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowFunctionExecutor.java
@@ -65,6 +65,7 @@ public class WindowFunctionExecutor<T, X> implements Function<T, X> {
         this.start();
     }
 
+    @SuppressWarnings("unchecked")
     private void initializeUserFunction(WindowConfig windowConfig) {
         String actualWindowFunctionClassName = windowConfig.getActualWindowFunctionClassName();
         ClassLoader clsLoader = Thread.currentThread().getContextClassLoader();
@@ -75,12 +76,12 @@ public class WindowFunctionExecutor<T, X> implements Function<T, X> {
             Class<?>[] typeArgs = TypeResolver.resolveRawArguments(
                     java.util.function.Function.class, userClassObject.getClass());
             if (typeArgs[0].equals(Collection.class)) {
-                bareWindowFunction = (java.util.function.Function) userClassObject;
+                bareWindowFunction = (java.util.function.Function<Collection<T>, X>) userClassObject;
             } else {
                 throw new IllegalArgumentException("Window function must take a collection as input");
             }
         } else if (userClassObject instanceof WindowFunction) {
-            windowFunction = (WindowFunction) userClassObject;
+            windowFunction = (WindowFunction<T, X>) userClassObject;
         } else {
             throw new IllegalArgumentException("Window function does not implement the correct interface");
         }
@@ -125,6 +126,7 @@ public class WindowFunctionExecutor<T, X> implements Function<T, X> {
         return manager;
     }
 
+    @SuppressWarnings("unchecked")
     private TimestampExtractor<T> getTimeStampExtractor(WindowConfig windowConfig) {
 
         Class<?> theCls;
@@ -279,6 +281,7 @@ public class WindowFunctionExecutor<T, X> implements Function<T, X> {
         return this.timestampExtractor != null;
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public X process(T input, Context context) throws Exception {
         if (!this.initialized) {
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowImpl.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowImpl.java
index de77898b1ce..30d40fea997 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowImpl.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/WindowImpl.java
@@ -79,7 +79,7 @@ public class WindowImpl<T> implements Window<T> {
             return false;
         }
 
-        WindowImpl that = (WindowImpl) o;
+        WindowImpl<?> that = (WindowImpl<?>) o;
 
         if (tuples != null ? !tuples.equals(that.tuples) : that.tuples != null) {
             return false;
diff --git a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/evictors/WatermarkCountEvictionPolicy.java b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/evictors/WatermarkCountEvictionPolicy.java
index 174954d8116..6ebfa77502a 100644
--- a/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/evictors/WatermarkCountEvictionPolicy.java
+++ b/pulsar-functions/instance/src/main/java/org/apache/pulsar/functions/windowing/evictors/WatermarkCountEvictionPolicy.java
@@ -37,6 +37,7 @@ public class WatermarkCountEvictionPolicy<T>
     protected final AtomicLong currentCount;
     private EvictionContext context;
 
+    @SuppressWarnings("rawtypes")
     private static final AtomicLongFieldUpdater<WatermarkCountEvictionPolicy> PROCESSED_UPDATER =
             AtomicLongFieldUpdater.newUpdater(WatermarkCountEvictionPolicy.class, "processed");
     private volatile long processed;
diff --git a/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java b/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java
index 1e2d4e0b21b..9401d33f710 100644
--- a/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java
+++ b/pulsar-functions/localrun/src/main/java/org/apache/pulsar/functions/LocalRunner.java
@@ -598,6 +598,7 @@ public class LocalRunner implements AutoCloseable {
         statusCheckTimer.scheduleAtFixedRate(new TimerTask() {
             @Override
             public void run() {
+                @SuppressWarnings({"unchecked", "rawtypes"})
                 CompletableFuture<String>[] futures = new CompletableFuture[spawners.size()];
                 int index = 0;
                 for (RuntimeSpawner spawner : spawners) {
diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
index bfd9171a391..3e5d59eebe5 100644
--- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
+++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarLedgerUnderreplicationManager.java
@@ -100,6 +100,7 @@ public class PulsarLedgerUnderreplicationManager implements LedgerUnderreplicati
 
     private static final Pattern ID_EXTRACTION_PATTERN = Pattern.compile("urL(\\d+)$");
 
+    @SuppressWarnings("rawtypes")
     private final AbstractConfiguration conf;
     private final String basePath;
     private final String urLedgerPath;
diff --git a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarMetadataBookieDriver.java b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarMetadataBookieDriver.java
index 352148d9975..58ecaf7b9cb 100644
--- a/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarMetadataBookieDriver.java
+++ b/pulsar-metadata/src/main/java/org/apache/pulsar/metadata/bookkeeper/PulsarMetadataBookieDriver.java
@@ -39,6 +39,7 @@ public class PulsarMetadataBookieDriver extends AbstractMetadataDriver implement
         // cause <clinit> to be invoked
     }
 
+    @SuppressWarnings("rawtypes")
     @Override
     protected void initialize(AbstractConfiguration serverConfiguration) throws MetadataException {
         super.initialize(serverConfiguration);
diff --git a/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ProducerHandler.java b/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ProducerHandler.java
index e4fb7d332f7..ca82cc993b0 100644
--- a/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ProducerHandler.java
+++ b/pulsar-websocket/src/main/java/org/apache/pulsar/websocket/ProducerHandler.java
@@ -421,6 +421,7 @@ public class ProducerHandler extends AbstractWebSocketHandler {
         int keysLen = encryptionKeyMap.size();
         final String[] keyNameArray = new String[keysLen];
         final byte[][] keyValueArray = new byte[keysLen][];
+        @SuppressWarnings({"unchecked", "rawtypes"})
         final List<KeyValue>[] keyMetadataArray = new List[keysLen];
         // Format keys.
         int index = 0;