Skip to content

Commit dc11227

Browse files
artembilancppwfs
authored andcommitted
spring-projectsGH-10083: Apply Nullability to test-support module
Related to: spring-projects#10083 * Add missed `package-info.java` to packages of the `test-support` module * Add `@NullMarked` and fix all the reported nullability failures * Move `hashCode()` and `equals()` in the `OnlyOnceTrigger` to the end of class for more logical class structure. Remove out of use now `// NOSONAR` comment Signed-off-by: Artem Bilan <[email protected]>
1 parent 851001c commit dc11227

15 files changed

+105
-66
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* JUnit Jupiter conditions.
3+
*/
4+
@org.jspecify.annotations.NullMarked
5+
package org.springframework.integration.test.condition;

spring-integration-test-support/src/main/java/org/springframework/integration/test/context/TestApplicationContextAware.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.integration.test.context;
1818

19+
import java.util.Objects;
20+
1921
import org.junit.jupiter.api.AfterAll;
2022
import org.junit.jupiter.api.BeforeAll;
2123

@@ -54,7 +56,7 @@ static void beforeAll() {
5456
TEST_INTEGRATION_CONTEXT.refresh();
5557
}
5658
catch (IllegalStateException ex) {
57-
if (!ex.getMessage().contains("just call 'refresh' once")) {
59+
if (!Objects.requireNonNull(ex.getMessage()).contains("just call 'refresh' once")) {
5860
throw ex;
5961
}
6062
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* Test context support classes.
3+
*/
4+
@org.jspecify.annotations.NullMarked
5+
package org.springframework.integration.test.context;

spring-integration-test-support/src/main/java/org/springframework/integration/test/mail/package-info.java

Lines changed: 0 additions & 4 deletions
This file was deleted.

spring-integration-test-support/src/main/java/org/springframework/integration/test/matcher/PayloadAndHeaderMatcher.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222

2323
import org.hamcrest.BaseMatcher;
2424
import org.hamcrest.Description;
25+
import org.jspecify.annotations.Nullable;
2526

2627
import org.springframework.messaging.Message;
2728
import org.springframework.messaging.MessageHeaders;
@@ -56,13 +57,13 @@ public final class PayloadAndHeaderMatcher<T> extends BaseMatcher<Message<?>> {
5657

5758
private final Map<String, Object> headers;
5859

59-
private final String[] ignoreKeys;
60+
private final String @Nullable [] ignoreKeys;
6061

6162
public static <P> PayloadAndHeaderMatcher<P> sameExceptIgnorableHeaders(Message<P> expected, String... ignoreKeys) {
6263
return new PayloadAndHeaderMatcher<>(expected, ignoreKeys);
6364
}
6465

65-
private PayloadAndHeaderMatcher(Message<T> expected, String... ignoreKeys) {
66+
private PayloadAndHeaderMatcher(Message<T> expected, String @Nullable ... ignoreKeys) {
6667
this.ignoreKeys = ignoreKeys != null ? Arrays.copyOf(ignoreKeys, ignoreKeys.length) : null;
6768
this.payload = expected.getPayload();
6869
this.headers = extractHeadersToAssert(expected);
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/**
22
* Provides several {@link org.hamcrest.BaseMatcher} implementations.
33
*/
4+
@org.jspecify.annotations.NullMarked
45
package org.springframework.integration.test.matcher;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/**
2+
* AssertJ predicates.
3+
*/
4+
@org.jspecify.annotations.NullMarked
5+
package org.springframework.integration.test.predicate;

spring-integration-test-support/src/main/java/org/springframework/integration/test/support/AbstractRequestResponseScenarioTest.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.integration.test.support;
1818

1919
import java.util.List;
20+
import java.util.Objects;
2021

2122
import org.junit.jupiter.api.BeforeEach;
2223
import org.junit.jupiter.api.Test;
@@ -54,14 +55,15 @@
5455
@DirtiesContext
5556
public abstract class AbstractRequestResponseScenarioTest {
5657

57-
private List<RequestResponseScenario> scenarios = null;
58+
@SuppressWarnings("NullAway.Init")
59+
private List<RequestResponseScenario> scenarios;
5860

5961
@Autowired
6062
private ApplicationContext applicationContext;
6163

6264
@BeforeEach
6365
public void setUp() {
64-
scenarios = defineRequestResponseScenarios();
66+
this.scenarios = defineRequestResponseScenarios();
6567
}
6668

6769
/**
@@ -79,8 +81,9 @@ public void testRequestResponseScenarios() {
7981
MessageChannel.class);
8082
MessageChannel outputChannel = applicationContext.getBean(scenario.getOutputChannelName(),
8183
MessageChannel.class);
82-
if (outputChannel instanceof SubscribableChannel) {
83-
((SubscribableChannel) outputChannel).subscribe(scenario.getResponseValidator());
84+
AbstractResponseValidator<?> responseValidator = scenario.getResponseValidator();
85+
if (outputChannel instanceof SubscribableChannel subscribableChannel) {
86+
subscribableChannel.subscribe(responseValidator);
8487
}
8588

8689
assertThat(inputChannel.send(scenario.getMessage()))
@@ -89,14 +92,14 @@ public void testRequestResponseScenarios() {
8992
if (outputChannel instanceof PollableChannel) {
9093
Message<?> response = ((PollableChannel) outputChannel).receive(10000); // NOSONAR magic number
9194
assertThat(response).as(name + ": receive timeout on " + scenario.getOutputChannelName()).isNotNull();
92-
scenario.getResponseValidator().handleMessage(response);
95+
responseValidator.handleMessage(Objects.requireNonNull(response));
9396
}
9497

95-
assertThat(scenario.getResponseValidator().getLastMessage())
98+
assertThat(responseValidator.getLastMessage())
9699
.as("message was not handled on " + outputChannel + " for scenario '" + name + "'.").isNotNull();
97100

98101
if (outputChannel instanceof SubscribableChannel) {
99-
((SubscribableChannel) outputChannel).unsubscribe(scenario.getResponseValidator());
102+
((SubscribableChannel) outputChannel).unsubscribe(responseValidator);
100103
}
101104
}
102105
}

spring-integration-test-support/src/main/java/org/springframework/integration/test/support/AbstractRequestResponseScenarioTests.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.integration.test.support;
1818

1919
import java.util.List;
20+
import java.util.Objects;
2021

2122
import org.junit.Before;
2223
import org.junit.Test;
@@ -56,14 +57,15 @@
5657
@Deprecated(since = "7.0", forRemoval = true)
5758
public abstract class AbstractRequestResponseScenarioTests {
5859

59-
private List<RequestResponseScenario> scenarios = null;
60+
@SuppressWarnings("NullAway.Init")
61+
private List<RequestResponseScenario> scenarios;
6062

6163
@Autowired
6264
private ApplicationContext applicationContext;
6365

6466
@Before
6567
public void setUp() {
66-
scenarios = defineRequestResponseScenarios();
68+
this.scenarios = defineRequestResponseScenarios();
6769
}
6870

6971
/**
@@ -91,7 +93,7 @@ public void testRequestResponseScenarios() {
9193
if (outputChannel instanceof PollableChannel) {
9294
Message<?> response = ((PollableChannel) outputChannel).receive(10000); // NOSONAR magic number
9395
assertThat(response).as(name + ": receive timeout on " + scenario.getOutputChannelName()).isNotNull();
94-
scenario.getResponseValidator().handleMessage(response);
96+
scenario.getResponseValidator().handleMessage(Objects.requireNonNull(response));
9597
}
9698

9799
assertThat(scenario.getResponseValidator().getLastMessage())

spring-integration-test-support/src/main/java/org/springframework/integration/test/support/AbstractResponseValidator.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@
1616

1717
package org.springframework.integration.test.support;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
import org.springframework.messaging.Message;
2022
import org.springframework.messaging.MessageHandler;
2123
import org.springframework.messaging.MessagingException;
2224

2325
/**
2426
* The base class for response validators used for {@link RequestResponseScenario}s
27+
*
2528
* @author David Turanski
29+
* @author Artem Bilan
2630
*
2731
*/
2832
public abstract class AbstractResponseValidator<T> implements MessageHandler {
2933

30-
private Message<?> lastMessage;
34+
private @Nullable Message<?> lastMessage;
3135

3236
/**
3337
* handle the message
@@ -39,6 +43,13 @@ public void handleMessage(Message<?> message) throws MessagingException {
3943
validateResponse((T) (extractPayload() ? message.getPayload() : message));
4044
}
4145

46+
/**
47+
* @return the lastMessage
48+
*/
49+
public @Nullable Message<?> getLastMessage() {
50+
return this.lastMessage;
51+
}
52+
4253
/**
4354
* Implement this method to validate the response (Message or Payload)
4455
* @param response The response.
@@ -51,11 +62,4 @@ public void handleMessage(Message<?> message) throws MessagingException {
5162
*/
5263
protected abstract boolean extractPayload();
5364

54-
/**
55-
* @return the lastMessage
56-
*/
57-
public Message<?> getLastMessage() {
58-
return lastMessage;
59-
}
60-
6165
}

0 commit comments

Comments
 (0)