diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AbstractDispatcher.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AbstractDispatcher.java index 8f2ea397750..fa027359901 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AbstractDispatcher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AbstractDispatcher.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jspecify.annotations.Nullable; import org.springframework.integration.support.utils.IntegrationUtils; import org.springframework.messaging.Message; @@ -53,7 +54,7 @@ public abstract class AbstractDispatcher implements MessageDispatcher { private volatile int maxSubscribers = Integer.MAX_VALUE; - private volatile MessageHandler theOneHandler; + private volatile @Nullable MessageHandler theOneHandler; private final Lock lock = new ReentrantLock(); diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AggregateMessageDeliveryException.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AggregateMessageDeliveryException.java index 49c1993920b..2dba0a2a698 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AggregateMessageDeliveryException.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/AggregateMessageDeliveryException.java @@ -19,6 +19,8 @@ import java.util.ArrayList; import java.util.List; +import org.jspecify.annotations.Nullable; + import org.springframework.messaging.Message; import org.springframework.messaging.MessageDeliveryException; import org.springframework.util.StringUtils; @@ -30,6 +32,7 @@ * @author Mark Fisher * @author Artem Bilan * @author Gary Russell + * @author Glenn Renfro * * @since 1.0.3 */ @@ -69,7 +72,7 @@ public String getMessage() { return message.toString(); } - private String appendPeriodIfNecessary(String baseMessage) { + private String appendPeriodIfNecessary(@Nullable String baseMessage) { if (!StringUtils.hasText(baseMessage)) { return ""; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/BroadcastingDispatcher.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/BroadcastingDispatcher.java index fdc4461c00e..f24b2b6cd1c 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/BroadcastingDispatcher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/BroadcastingDispatcher.java @@ -20,6 +20,8 @@ import java.util.UUID; import java.util.concurrent.Executor; +import org.jspecify.annotations.Nullable; + import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -56,12 +58,13 @@ * @author Gary Russell * @author Oleg Zhurakousky * @author Artem Bilan + * @author Glenn Renfro */ public class BroadcastingDispatcher extends AbstractDispatcher implements BeanFactoryAware { private final boolean requireSubscribers; - private final Executor executor; + private final @Nullable Executor executor; private boolean ignoreFailures; @@ -71,6 +74,7 @@ public class BroadcastingDispatcher extends AbstractDispatcher implements BeanFa private MessageHandlingTaskDecorator messageHandlingTaskDecorator = task -> task; + @SuppressWarnings("NullAway.Init") private BeanFactory beanFactory; private volatile MessageBuilderFactory messageBuilderFactory = new DefaultMessageBuilderFactory(); @@ -89,7 +93,7 @@ public BroadcastingDispatcher(boolean requireSubscribers) { this(null, requireSubscribers); } - public BroadcastingDispatcher(Executor executor, boolean requireSubscribers) { + public BroadcastingDispatcher(@Nullable Executor executor, boolean requireSubscribers) { this.requireSubscribers = requireSubscribers; this.executor = executor; } diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java index 0e7b97b2097..6037a26a28a 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java @@ -54,6 +54,7 @@ * * @author Artem Bilan * @author Christian Tzolov + * @author Glenn Renfro * * @since 6.1 */ @@ -71,10 +72,9 @@ public class PartitionedDispatcher extends AbstractDispatcher { private Predicate failoverStrategy = (exception) -> true; - @Nullable - private LoadBalancingStrategy loadBalancingStrategy; + private @Nullable LoadBalancingStrategy loadBalancingStrategy; - private ErrorHandler errorHandler; + private @Nullable ErrorHandler errorHandler; private MessageHandlingTaskDecorator messageHandlingTaskDecorator = task -> task; @@ -164,6 +164,7 @@ public void shutdown() { } @Override + @SuppressWarnings("NullAway") // The partitions map never returns null according to partition hash public boolean dispatch(Message message) { populatedPartitions(); int partition = Math.abs(this.partitionKeyFunction.apply(message).hashCode()) % this.partitionCount; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/UnicastingDispatcher.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/UnicastingDispatcher.java index 1966f7414bb..0bd51514e4b 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/UnicastingDispatcher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/UnicastingDispatcher.java @@ -51,6 +51,7 @@ * @author Gary Russell * @author Oleg Zhurakousky * @author Artem Bilan + * @author Glenn Renfro * * @since 1.0.2 */ @@ -58,11 +59,11 @@ public class UnicastingDispatcher extends AbstractDispatcher { private final MessageHandler dispatchHandler = this::doDispatch; - private final Executor executor; + private final @Nullable Executor executor; private Predicate failoverStrategy = (exception) -> true; - private LoadBalancingStrategy loadBalancingStrategy; + private @Nullable LoadBalancingStrategy loadBalancingStrategy; private MessageHandlingTaskDecorator messageHandlingTaskDecorator = task -> task; diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/package-info.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/package-info.java index 126e182014a..075712e7f83 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/package-info.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/package-info.java @@ -1,4 +1,5 @@ /** * Provides classes related to dispatching messages. */ +@org.jspecify.annotations.NullMarked package org.springframework.integration.dispatcher;