Skip to content

Commit 1024c44

Browse files
committed
jspecify Nullability changes in config package
Signed-off-by: Soby Chacko <[email protected]>
1 parent 9d91a79 commit 1024c44

17 files changed

+138
-103
lines changed

spring-kafka-docs/src/main/kotlin/org/springframework/kafka/kdocs/started/noboot/Config.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2021 the original author or authors.
2+
* Copyright 2021-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -41,8 +41,9 @@ class Config {
4141

4242
@Bean
4343
fun kafkaListenerContainerFactory(consumerFactory: ConsumerFactory<Int, String>) =
44-
ConcurrentKafkaListenerContainerFactory<Int, String>().also { it.consumerFactory = consumerFactory }
45-
44+
ConcurrentKafkaListenerContainerFactory<Int, String>().apply {
45+
setConsumerFactory(consumerFactory)
46+
}
4647

4748
@Bean
4849
fun consumerFactory() = DefaultKafkaConsumerFactory<Int, String>(consumerProps)

spring-kafka/src/main/java/org/springframework/kafka/config/AbstractKafkaListenerContainerFactory.java

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2024 the original author or authors.
2+
* Copyright 2014-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -23,6 +23,7 @@
2323
import java.util.regex.Pattern;
2424

2525
import org.apache.commons.logging.LogFactory;
26+
import org.jspecify.annotations.Nullable;
2627

2728
import org.springframework.beans.BeanUtils;
2829
import org.springframework.beans.BeansException;
@@ -70,49 +71,50 @@ public abstract class AbstractKafkaListenerContainerFactory<C extends AbstractMe
7071

7172
private final ContainerProperties containerProperties = new ContainerProperties((Pattern) null); // NOSONAR
7273

73-
private CommonErrorHandler commonErrorHandler;
74+
private @Nullable CommonErrorHandler commonErrorHandler;
7475

75-
private ConsumerFactory<? super K, ? super V> consumerFactory;
76+
private @Nullable ConsumerFactory<? super K, ? super V> consumerFactory;
7677

77-
private Boolean autoStartup;
78+
private @Nullable Boolean autoStartup;
7879

79-
private Integer phase;
80+
private @Nullable Integer phase;
8081

81-
private RecordMessageConverter recordMessageConverter;
82+
private @Nullable RecordMessageConverter recordMessageConverter;
8283

83-
private BatchMessageConverter batchMessageConverter;
84+
private @Nullable BatchMessageConverter batchMessageConverter;
8485

85-
private RecordFilterStrategy<? super K, ? super V> recordFilterStrategy;
86+
private @Nullable RecordFilterStrategy<? super K, ? super V> recordFilterStrategy;
8687

87-
private Boolean ackDiscarded;
88+
private @Nullable Boolean ackDiscarded;
8889

89-
private Boolean batchListener;
90+
private @Nullable Boolean batchListener;
9091

91-
private ApplicationEventPublisher applicationEventPublisher;
92+
private @Nullable ApplicationEventPublisher applicationEventPublisher;
9293

93-
private KafkaTemplate<?, ?> replyTemplate;
94+
private @Nullable KafkaTemplate<?, ?> replyTemplate;
9495

95-
private AfterRollbackProcessor<? super K, ? super V> afterRollbackProcessor;
96+
private @Nullable AfterRollbackProcessor<? super K, ? super V> afterRollbackProcessor;
9697

97-
private ReplyHeadersConfigurer replyHeadersConfigurer;
98+
private @Nullable ReplyHeadersConfigurer replyHeadersConfigurer;
9899

99-
private Boolean missingTopicsFatal;
100+
private @Nullable Boolean missingTopicsFatal;
100101

101-
private RecordInterceptor<K, V> recordInterceptor;
102+
private @Nullable RecordInterceptor<K, V> recordInterceptor;
102103

103-
private BatchInterceptor<K, V> batchInterceptor;
104+
private @Nullable BatchInterceptor<K, V> batchInterceptor;
104105

105-
private BatchToRecordAdapter<K, V> batchToRecordAdapter;
106+
private @Nullable BatchToRecordAdapter<K, V> batchToRecordAdapter;
106107

108+
@SuppressWarnings("NullAway.Init")
107109
private ApplicationContext applicationContext;
108110

109-
private ContainerCustomizer<K, V, C> containerCustomizer;
111+
private @Nullable ContainerCustomizer<K, V, C> containerCustomizer;
110112

111-
private String correlationHeaderName;
113+
private @Nullable String correlationHeaderName;
112114

113-
private Boolean changeConsumerThreadName;
115+
private @Nullable Boolean changeConsumerThreadName;
114116

115-
private Function<MessageListenerContainer, String> threadNameSupplier;
117+
private @Nullable Function<MessageListenerContainer, String> threadNameSupplier;
116118

117119
@Override
118120
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
@@ -127,7 +129,7 @@ public void setConsumerFactory(ConsumerFactory<? super K, ? super V> consumerFac
127129
this.consumerFactory = consumerFactory;
128130
}
129131

130-
public ConsumerFactory<? super K, ? super V> getConsumerFactory() {
132+
public @Nullable ConsumerFactory<? super K, ? super V> getConsumerFactory() {
131133
return this.consumerFactory;
132134
}
133135

@@ -190,7 +192,7 @@ public void setAckDiscarded(Boolean ackDiscarded) {
190192
* @return true for a batch listener.
191193
* @since 1.1
192194
*/
193-
public Boolean isBatchListener() {
195+
public @Nullable Boolean isBatchListener() {
194196
return this.batchListener;
195197
}
196198

spring-kafka/src/main/java/org/springframework/kafka/config/AbstractKafkaListenerEndpoint.java

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -72,53 +72,55 @@ public abstract class AbstractKafkaListenerEndpoint<K, V>
7272

7373
private final LogAccessor logger = new LogAccessor(LogFactory.getLog(getClass()));
7474

75-
private String id;
75+
private @Nullable String id;
7676

77-
private String groupId;
77+
private @Nullable String groupId;
7878

7979
private final Collection<String> topics = new ArrayList<>();
8080

81-
private Pattern topicPattern;
81+
private @Nullable Pattern topicPattern;
8282

8383
private final Collection<TopicPartitionOffset> topicPartitions = new ArrayList<>();
8484

85+
@SuppressWarnings("NullAway.Init")
8586
private BeanFactory beanFactory;
8687

87-
private BeanExpressionResolver resolver;
88+
private @Nullable BeanExpressionResolver resolver;
8889

89-
private BeanExpressionContext expressionContext;
90+
private @Nullable BeanExpressionContext expressionContext;
9091

91-
private BeanResolver beanResolver;
92+
private @Nullable BeanResolver beanResolver;
9293

93-
private String group;
94+
private @Nullable String group;
9495

95-
private RecordFilterStrategy<K, V> recordFilterStrategy;
96+
private @Nullable RecordFilterStrategy<K, V> recordFilterStrategy;
9697

9798
private boolean ackDiscarded;
9899

99-
private Boolean batchListener;
100+
private @Nullable Boolean batchListener;
100101

101-
private KafkaTemplate<?, ?> replyTemplate;
102+
private @Nullable KafkaTemplate<?, ?> replyTemplate;
102103

103-
private String clientIdPrefix;
104+
private @Nullable String clientIdPrefix;
104105

105-
private Integer concurrency;
106+
private @Nullable Integer concurrency;
106107

107-
private Boolean autoStartup;
108+
private @Nullable Boolean autoStartup;
108109

109-
private ReplyHeadersConfigurer replyHeadersConfigurer;
110+
private @Nullable ReplyHeadersConfigurer replyHeadersConfigurer;
110111

111-
private Properties consumerProperties;
112+
private @Nullable Properties consumerProperties;
112113

113114
private boolean splitIterables = true;
114115

115-
private BatchToRecordAdapter<K, V> batchToRecordAdapter;
116+
private @Nullable BatchToRecordAdapter<K, V> batchToRecordAdapter;
116117

118+
@SuppressWarnings("NullAway.Init")
117119
private byte[] listenerInfo;
118120

119-
private String correlationHeaderName;
121+
private @Nullable String correlationHeaderName;
120122

121-
private ContainerPostProcessor<?, ?, ?> containerPostProcessor;
123+
private @Nullable ContainerPostProcessor<?, ?, ?> containerPostProcessor;
122124

123125
@Nullable
124126
private String mainListenerId;
@@ -244,7 +246,7 @@ public TopicPartitionOffset[] getTopicPartitionsToAssign() {
244246
* @see #setTopicPartitions(TopicPartitionOffset...)
245247
* @see #setTopics(String...)
246248
*/
247-
public void setTopicPattern(Pattern topicPattern) {
249+
public void setTopicPattern(@Nullable Pattern topicPattern) {
248250
this.topicPattern = topicPattern;
249251
}
250252

@@ -268,7 +270,7 @@ public String getGroup() {
268270
* Set the group for the corresponding listener container.
269271
* @param group the group.
270272
*/
271-
public void setGroup(String group) {
273+
public void setGroup(@Nullable String group) {
272274
this.group = group;
273275
}
274276

@@ -354,7 +356,7 @@ public String getClientIdPrefix() {
354356
* @param clientIdPrefix the prefix.
355357
* @since 2.1.1
356358
*/
357-
public void setClientIdPrefix(String clientIdPrefix) {
359+
public void setClientIdPrefix(@Nullable String clientIdPrefix) {
358360
this.clientIdPrefix = clientIdPrefix;
359361
}
360362

@@ -369,7 +371,7 @@ public Integer getConcurrency() {
369371
* @param concurrency the concurrency.
370372
* @since 2.2
371373
*/
372-
public void setConcurrency(Integer concurrency) {
374+
public void setConcurrency(@Nullable Integer concurrency) {
373375
this.concurrency = concurrency;
374376
}
375377

@@ -384,7 +386,7 @@ public Boolean getAutoStartup() {
384386
* @param autoStartup the autoStartup.
385387
* @since 2.2
386388
*/
387-
public void setAutoStartup(Boolean autoStartup) {
389+
public void setAutoStartup(@Nullable Boolean autoStartup) {
388390
this.autoStartup = autoStartup;
389391
}
390392

@@ -414,7 +416,7 @@ public Properties getConsumerProperties() {
414416
* @see #setGroupId(String)
415417
* @see #setClientIdPrefix(String)
416418
*/
417-
public void setConsumerProperties(Properties consumerProperties) {
419+
public void setConsumerProperties(@Nullable Properties consumerProperties) {
418420
this.consumerProperties = consumerProperties;
419421
}
420422

@@ -434,7 +436,7 @@ public void setSplitIterables(boolean splitIterables) {
434436
}
435437

436438
@Override
437-
@Nullable
439+
@SuppressWarnings("NullAway") // Dataflow analysis limitation
438440
public byte[] getListenerInfo() {
439441
return this.listenerInfo; // NOSONAR
440442
}
@@ -444,7 +446,7 @@ public byte[] getListenerInfo() {
444446
* @param listenerInfo the info.
445447
* @since 2.8.4
446448
*/
447-
public void setListenerInfo(@Nullable byte[] listenerInfo) { // NOSONAR
449+
public void setListenerInfo(byte[] listenerInfo) { // NOSONAR
448450
this.listenerInfo = listenerInfo; // NOSONAR
449451
}
450452

@@ -474,7 +476,7 @@ public void setCorrelationHeaderName(String correlationHeaderName) {
474476
}
475477

476478
@Override
477-
public ContainerPostProcessor<?, ?, ?> getContainerPostProcessor() {
479+
public @Nullable ContainerPostProcessor<?, ?, ?> getContainerPostProcessor() {
478480
return this.containerPostProcessor;
479481
}
480482

spring-kafka/src/main/java/org/springframework/kafka/config/ConcurrentKafkaListenerContainerFactory.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2014-2021 the original author or authors.
2+
* Copyright 2014-2025 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -18,9 +18,12 @@
1818

1919
import java.util.Collection;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.kafka.listener.ConcurrentMessageListenerContainer;
2224
import org.springframework.kafka.listener.ContainerProperties;
2325
import org.springframework.kafka.support.TopicPartitionOffset;
26+
import org.springframework.util.Assert;
2427

2528
/**
2629
* A {@link KafkaListenerContainerFactory} implementation to build a
@@ -46,7 +49,7 @@
4649
public class ConcurrentKafkaListenerContainerFactory<K, V>
4750
extends AbstractKafkaListenerContainerFactory<ConcurrentMessageListenerContainer<K, V>, K, V> {
4851

49-
private Integer concurrency;
52+
private @Nullable Integer concurrency;
5053

5154
/**
5255
* Specify the container concurrency.
@@ -59,13 +62,14 @@ public void setConcurrency(Integer concurrency) {
5962

6063
@Override
6164
protected ConcurrentMessageListenerContainer<K, V> createContainerInstance(KafkaListenerEndpoint endpoint) {
62-
TopicPartitionOffset[] topicPartitions = endpoint.getTopicPartitionsToAssign();
65+
@Nullable TopicPartitionOffset[] topicPartitions = endpoint.getTopicPartitionsToAssign();
6366
if (topicPartitions != null && topicPartitions.length > 0) {
6467
ContainerProperties properties = new ContainerProperties(topicPartitions);
6568
return new ConcurrentMessageListenerContainer<>(getConsumerFactory(), properties);
6669
}
6770
else {
6871
Collection<String> topics = endpoint.getTopics();
72+
Assert.state(topics != null, "'topics' must not be null");
6973
if (!topics.isEmpty()) { // NOSONAR
7074
ContainerProperties properties = new ContainerProperties(topics.toArray(new String[0]));
7175
return new ConcurrentMessageListenerContainer<>(getConsumerFactory(), properties);

spring-kafka/src/main/java/org/springframework/kafka/config/KafkaListenerEndpoint.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ public interface KafkaListenerEndpoint {
6666
* Return the topics for this endpoint.
6767
* @return the topics for this endpoint.
6868
*/
69+
@Nullable
6970
Collection<String> getTopics();
7071

7172
/**
@@ -151,7 +152,7 @@ void setupListenerContainer(MessageListenerContainer listenerContainer,
151152
* @return the info.
152153
* @since 2.8.4
153154
*/
154-
@Nullable
155+
@SuppressWarnings("NullAway") // Dataflow analysis limitation
155156
default byte[] getListenerInfo() {
156157
return null;
157158
}

spring-kafka/src/main/java/org/springframework/kafka/config/KafkaListenerEndpointAdapter.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,8 @@ public String getGroup() {
5656
return null;
5757
}
5858

59-
@Nullable
6059
@Override
61-
public Collection<String> getTopics() {
60+
public @Nullable Collection<String> getTopics() {
6261
return Collections.emptyList();
6362
}
6463

0 commit comments

Comments
 (0)