Skip to content

Commit 0254b34

Browse files
GH-10083: Apply NullAbility to scripting module
Related to: #10083 * Add `@Nullable` for `GroovyScriptExecutingMessageProcessor#getScriptSource` * Remove `@Nullable` * Remove `@Nullable` in `ScriptExecutingMessageProcessor` class * change to `byte[]` Signed-off-by: Tran Ngoc Nhan <[email protected]>
1 parent e9fab1f commit 0254b34

19 files changed

+60
-30
lines changed

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/AbstractScriptExecutingMessageProcessor.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,21 @@
1818

1919
import java.util.Map;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.beans.BeansException;
2224
import org.springframework.beans.factory.BeanClassLoaderAware;
2325
import org.springframework.beans.factory.BeanFactory;
2426
import org.springframework.beans.factory.BeanFactoryAware;
2527
import org.springframework.integration.handler.MessageProcessor;
26-
import org.springframework.lang.Nullable;
2728
import org.springframework.messaging.Message;
2829
import org.springframework.scripting.ScriptSource;
2930
import org.springframework.util.Assert;
3031

3132
/**
3233
* Base {@link MessageProcessor} for scripting implementations to extend.
3334
*
34-
* @param <T> the paylaod type.
35+
* @param <T> the payload type.
3536
*
3637
* @author Mark Fisher
3738
* @author Stefan Reuter
@@ -44,8 +45,10 @@ public abstract class AbstractScriptExecutingMessageProcessor<T>
4445

4546
private final ScriptVariableGenerator scriptVariableGenerator;
4647

48+
@SuppressWarnings("NullAway.Init")
4749
private ClassLoader beanClassLoader;
4850

51+
@SuppressWarnings("NullAway.Init")
4952
private BeanFactory beanFactory;
5053

5154
protected AbstractScriptExecutingMessageProcessor() {
@@ -83,8 +86,7 @@ protected BeanFactory getBeanFactory() {
8386
* Execute the script and return the result.
8487
*/
8588
@Override
86-
@Nullable
87-
public final T processMessage(Message<?> message) {
89+
public final @Nullable T processMessage(Message<?> message) {
8890
ScriptSource source = getScriptSource(message);
8991
Map<String, Object> variables = this.scriptVariableGenerator.generateScriptVariables(message);
9092
return executeScript(source, variables);
@@ -105,7 +107,6 @@ public final T processMessage(Message<?> message) {
105107
* @param variables The variables.
106108
* @return The result of the execution.
107109
*/
108-
@Nullable
109-
protected abstract T executeScript(ScriptSource scriptSource, Map<String, Object> variables);
110+
protected abstract @Nullable T executeScript(ScriptSource scriptSource, Map<String, Object> variables);
110111

111112
}

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/DefaultScriptVariableGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public DefaultScriptVariableGenerator(Map<String, Object> variableMap) {
4545
}
4646

4747
public Map<String, Object> generateScriptVariables(Message<?> message) {
48-
Map<String, Object> scriptVariables = new HashMap<String, Object>();
48+
Map<String, Object> scriptVariables = new HashMap<>();
4949
// Add Message content
5050
if (message != null) {
5151
scriptVariables.put("payload", message.getPayload());

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/PolyglotScriptExecutor.java

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

2323
import org.graalvm.polyglot.Context;
2424
import org.graalvm.polyglot.Value;
25+
import org.jspecify.annotations.Nullable;
2526

26-
import org.springframework.lang.Nullable;
2727
import org.springframework.scripting.ScriptSource;
2828
import org.springframework.util.Assert;
2929

@@ -63,7 +63,7 @@ public PolyglotScriptExecutor(String language, Context.Builder contextBuilder) {
6363
}
6464

6565
@Override
66-
public Object executeScript(ScriptSource scriptSource, @Nullable Map<String, Object> variables) {
66+
public @Nullable Object executeScript(ScriptSource scriptSource, @Nullable Map<String, Object> variables) {
6767
try (Context context = this.contextBuilder.build()) {
6868
if (variables != null) {
6969
Value bindings = context.getBindings(this.language);

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/RefreshableResourceScriptSource.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import java.io.IOException;
2020
import java.util.concurrent.atomic.AtomicLong;
2121

22+
import org.jspecify.annotations.Nullable;
23+
2224
import org.springframework.core.io.Resource;
2325
import org.springframework.scripting.ScriptSource;
2426
import org.springframework.scripting.support.ResourceScriptSource;
@@ -41,6 +43,7 @@ public class RefreshableResourceScriptSource implements ScriptSource {
4143

4244
private final AtomicLong lastModifiedChecked = new AtomicLong(System.currentTimeMillis());
4345

46+
@SuppressWarnings("NullAway.Init")
4447
private volatile String script;
4548

4649
public RefreshableResourceScriptSource(Resource resource, long refreshDelay) {
@@ -62,7 +65,7 @@ public String getScriptAsString() throws IOException {
6265
return this.script;
6366
}
6467

65-
public String suggestedClassName() {
68+
public @Nullable String suggestedClassName() {
6669
return this.source.getResource().getFilename();
6770
}
6871

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/ScriptExecutingMessageSource.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,11 @@
1616

1717
package org.springframework.integration.scripting;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
import org.springframework.integration.endpoint.AbstractMessageSource;
22+
import org.springframework.messaging.Message;
23+
import org.springframework.messaging.support.MessageBuilder;
2024

2125
/**
2226
* The {@link org.springframework.integration.core.MessageSource} strategy implementation
@@ -29,6 +33,8 @@
2933
*/
3034
public class ScriptExecutingMessageSource extends AbstractMessageSource<Object> {
3135

36+
private static final Message<byte[]> EMPTY_MESSAGE = MessageBuilder.withPayload(new byte[0]).build();
37+
3238
private final AbstractScriptExecutingMessageProcessor<?> scriptMessageProcessor;
3339

3440
public ScriptExecutingMessageSource(AbstractScriptExecutingMessageProcessor<?> scriptMessageProcessor) {
@@ -41,8 +47,8 @@ public String getComponentType() {
4147
}
4248

4349
@Override
44-
protected Object doReceive() {
45-
return this.scriptMessageProcessor.processMessage(null);
50+
protected @Nullable Object doReceive() {
51+
return this.scriptMessageProcessor.processMessage(EMPTY_MESSAGE);
4652
}
4753

4854
}

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/ScriptExecutor.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818

1919
import java.util.Map;
2020

21-
import org.springframework.lang.Nullable;
21+
import org.jspecify.annotations.Nullable;
22+
2223
import org.springframework.scripting.ScriptSource;
2324

2425
/**
@@ -46,8 +47,7 @@ public interface ScriptExecutor {
4647
* @param scriptSource The script source.
4748
* @return The result of the execution.
4849
*/
49-
@Nullable
50-
default Object executeScript(ScriptSource scriptSource) {
50+
default @Nullable Object executeScript(ScriptSource scriptSource) {
5151
return executeScript(scriptSource, null);
5252
}
5353

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/ScriptingException.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.scripting;
1818

19+
import org.jspecify.annotations.Nullable;
20+
1921
import org.springframework.messaging.MessagingException;
2022

2123
/**
@@ -30,7 +32,7 @@ public ScriptingException(String description) {
3032
super(description);
3133
}
3234

33-
public ScriptingException(String description, Throwable cause) {
35+
public ScriptingException(@Nullable String description, Throwable cause) {
3436
super(description, cause);
3537
}
3638

spring-integration-scripting/src/main/java/org/springframework/integration/scripting/config/AbstractScriptParser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ private ManagedMap<String, Object> buildVariablesMap(final Element element, fina
123123
List<Element> variableElements) {
124124

125125
@SuppressWarnings("serial")
126-
ManagedMap<String, Object> variableMap = new ManagedMap<String, Object>() {
126+
ManagedMap<String, Object> variableMap = new ManagedMap<>() {
127127

128128
@Override
129129
public Object put(String key, Object value) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/**
22
* Provides classes for configuration - parsers, namespace handlers.
33
*/
4+
@org.jspecify.annotations.NullMarked
45
package org.springframework.integration.scripting.config.jsr223;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/**
22
* Base package supporting configuration.
33
*/
4+
@org.jspecify.annotations.NullMarked
45
package org.springframework.integration.scripting.config;

0 commit comments

Comments
 (0)