Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ public void setCompilerConfiguration(CompilerConfiguration compilerConfiguration
}

@Override
protected ScriptSource getScriptSource(Message<?> message) {
protected ScriptSource getScriptSource(@Nullable Message<?> message) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's fix ScriptExecutingMessageSource instead providing a fake message instance!

The MessageProcessor cotnract is to not accept null for the message argument.

That could be a static final property in the ScriptExecutingMessageSource with byte[0] as payload.

return this.scriptSource;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,21 @@

import java.util.Map;

import org.jspecify.annotations.Nullable;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.integration.handler.MessageProcessor;
import org.springframework.lang.Nullable;
import org.springframework.messaging.Message;
import org.springframework.scripting.ScriptSource;
import org.springframework.util.Assert;

/**
* Base {@link MessageProcessor} for scripting implementations to extend.
*
* @param <T> the paylaod type.
* @param <T> the payload type.
*
* @author Mark Fisher
* @author Stefan Reuter
Expand All @@ -44,9 +45,9 @@ public abstract class AbstractScriptExecutingMessageProcessor<T>

private final ScriptVariableGenerator scriptVariableGenerator;

private ClassLoader beanClassLoader;
private @Nullable ClassLoader beanClassLoader;

private BeanFactory beanFactory;
private @Nullable BeanFactory beanFactory;
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both of these should be NullAway.Init


protected AbstractScriptExecutingMessageProcessor() {
this(new DefaultScriptVariableGenerator());
Expand All @@ -71,20 +72,19 @@ protected ScriptVariableGenerator getScriptVariableGenerator() {
return this.scriptVariableGenerator;
}

protected ClassLoader getBeanClassLoader() {
protected @Nullable ClassLoader getBeanClassLoader() {
return this.beanClassLoader;
}

protected BeanFactory getBeanFactory() {
protected @Nullable BeanFactory getBeanFactory() {
return this.beanFactory;
}

/**
* Execute the script and return the result.
*/
@Override
@Nullable
public final T processMessage(Message<?> message) {
public final @Nullable T processMessage(@Nullable Message<?> message) {
ScriptSource source = getScriptSource(message);
Map<String, Object> variables = this.scriptVariableGenerator.generateScriptVariables(message);
return executeScript(source, variables);
Expand All @@ -96,7 +96,7 @@ public final T processMessage(Message<?> message) {
* @param message the message being processed
* @return a ScriptSource to use to create a script
*/
protected abstract ScriptSource getScriptSource(Message<?> message);
protected abstract ScriptSource getScriptSource(@Nullable Message<?> message);

/**
* Subclasses must implement this method. In doing so, the execution context
Expand All @@ -105,7 +105,6 @@ public final T processMessage(Message<?> message) {
* @param variables The variables.
* @return The result of the execution.
*/
@Nullable
protected abstract T executeScript(ScriptSource scriptSource, Map<String, Object> variables);
protected abstract @Nullable T executeScript(ScriptSource scriptSource, Map<String, Object> variables);

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@
import java.util.HashMap;
import java.util.Map;

import org.jspecify.annotations.Nullable;

import org.springframework.messaging.Message;
import org.springframework.util.CollectionUtils;

Expand All @@ -44,8 +46,8 @@ public DefaultScriptVariableGenerator(Map<String, Object> variableMap) {
this.variableMap = variableMap;
}

public Map<String, Object> generateScriptVariables(Message<?> message) {
Map<String, Object> scriptVariables = new HashMap<String, Object>();
public Map<String, Object> generateScriptVariables(@Nullable Message<?> message) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

After fixing ScriptExecutingMessageSource many of these @Nullable on message would go away.

Map<String, Object> scriptVariables = new HashMap<>();
// Add Message content
if (message != null) {
scriptVariables.put("payload", message.getPayload());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@

import org.graalvm.polyglot.Context;
import org.graalvm.polyglot.Value;
import org.jspecify.annotations.Nullable;

import org.springframework.lang.Nullable;
import org.springframework.scripting.ScriptSource;
import org.springframework.util.Assert;

Expand Down Expand Up @@ -63,7 +63,7 @@ public PolyglotScriptExecutor(String language, Context.Builder contextBuilder) {
}

@Override
public Object executeScript(ScriptSource scriptSource, @Nullable Map<String, Object> variables) {
public @Nullable Object executeScript(ScriptSource scriptSource, @Nullable Map<String, Object> variables) {
try (Context context = this.contextBuilder.build()) {
if (variables != null) {
Value bindings = context.getBindings(this.language);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import java.io.IOException;
import java.util.concurrent.atomic.AtomicLong;

import org.jspecify.annotations.Nullable;

import org.springframework.core.io.Resource;
import org.springframework.scripting.ScriptSource;
import org.springframework.scripting.support.ResourceScriptSource;
Expand All @@ -41,6 +43,7 @@ public class RefreshableResourceScriptSource implements ScriptSource {

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

@SuppressWarnings("NullAway.Init")
private volatile String script;

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

public String suggestedClassName() {
public @Nullable String suggestedClassName() {
return this.source.getResource().getFilename();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package org.springframework.integration.scripting;

import org.jspecify.annotations.Nullable;

import org.springframework.integration.endpoint.AbstractMessageSource;

/**
Expand All @@ -41,7 +43,7 @@ public String getComponentType() {
}

@Override
protected Object doReceive() {
protected @Nullable Object doReceive() {
return this.scriptMessageProcessor.processMessage(null);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@

import java.util.Map;

import org.springframework.lang.Nullable;
import org.jspecify.annotations.Nullable;

import org.springframework.scripting.ScriptSource;

/**
Expand Down Expand Up @@ -46,8 +47,7 @@ public interface ScriptExecutor {
* @param scriptSource The script source.
* @return The result of the execution.
*/
@Nullable
default Object executeScript(ScriptSource scriptSource) {
default @Nullable Object executeScript(ScriptSource scriptSource) {
return executeScript(scriptSource, null);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@

import java.util.Map;

import org.jspecify.annotations.Nullable;

import org.springframework.messaging.Message;

/**
Expand All @@ -30,6 +32,6 @@
@FunctionalInterface
public interface ScriptVariableGenerator {

Map<String, Object> generateScriptVariables(Message<?> message);
Map<String, Object> generateScriptVariables(@Nullable Message<?> message);

}
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package org.springframework.integration.scripting;

import org.jspecify.annotations.Nullable;

import org.springframework.messaging.MessagingException;

/**
Expand All @@ -30,7 +32,7 @@ public ScriptingException(String description) {
super(description);
}

public ScriptingException(String description, Throwable cause) {
public ScriptingException(@Nullable String description, Throwable cause) {
super(description, cause);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ private ManagedMap<String, Object> buildVariablesMap(final Element element, fina
List<Element> variableElements) {

@SuppressWarnings("serial")
ManagedMap<String, Object> variableMap = new ManagedMap<String, Object>() {
ManagedMap<String, Object> variableMap = new ManagedMap<>() {

@Override
public Object put(String key, Object value) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/**
* Provides classes for configuration - parsers, namespace handlers.
*/
@org.jspecify.annotations.NullMarked
package org.springframework.integration.scripting.config.jsr223;
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/**
* Base package supporting configuration.
*/
@org.jspecify.annotations.NullMarked
package org.springframework.integration.scripting.config;
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

package org.springframework.integration.scripting.dsl;

import org.jspecify.annotations.Nullable;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanClassLoaderAware;
import org.springframework.beans.factory.InitializingBean;
Expand Down Expand Up @@ -47,20 +49,25 @@
class DslScriptExecutingMessageProcessor
implements MessageProcessor<Object>, InitializingBean, ApplicationContextAware, BeanClassLoaderAware {

@SuppressWarnings("NullAway.Init")
private Resource script;

private String location;
private @Nullable String location;

private String lang;
private @Nullable String lang;

private long refreshCheckDelay = -1;

@SuppressWarnings("NullAway.Init")
private ScriptVariableGenerator variableGenerator;

@SuppressWarnings("NullAway.Init")
private ApplicationContext applicationContext;

@SuppressWarnings("NullAway.Init")
private AbstractScriptExecutingMessageProcessor<?> delegate;

@SuppressWarnings("NullAway.Init")
private ClassLoader classLoader;

DslScriptExecutingMessageProcessor(Resource script) {
Expand Down Expand Up @@ -124,7 +131,7 @@ public void afterPropertiesSet() {
}

@Override
public Object processMessage(Message<?> message) {
public @Nullable Object processMessage(Message<?> message) {
return this.delegate.processMessage(message);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import java.util.Collections;
import java.util.Map;

import org.jspecify.annotations.Nullable;

import org.springframework.core.io.Resource;
import org.springframework.integration.core.MessageSource;
import org.springframework.integration.dsl.ComponentsRegistration;
Expand Down Expand Up @@ -125,8 +127,8 @@ protected MessageSource<?> doGet() {
}

@Override
public Map<Object, String> getComponentsToRegister() {
return Collections.singletonMap(this.delegate.getObject(), this.delegate.getId());
public Map<Object, @Nullable String> getComponentsToRegister() {
return Collections.<Object, @Nullable String>singletonMap(this.delegate.getObject(), this.delegate.getId());
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import java.util.HashMap;
import java.util.Map;

import org.jspecify.annotations.Nullable;

import org.springframework.core.io.Resource;
import org.springframework.integration.dsl.MessageProcessorSpec;
import org.springframework.integration.handler.MessageProcessor;
Expand All @@ -38,7 +40,7 @@ public class ScriptSpec extends MessageProcessorSpec<ScriptSpec> {

private final DslScriptExecutingMessageProcessor processor;

private ScriptVariableGenerator variableGenerator;
private @Nullable ScriptVariableGenerator variableGenerator;

private final Map<String, Object> variables = new HashMap<>();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* Provides Scripting Components support for Spring Integration Java DSL.
*/
@org.springframework.lang.NonNullApi
@org.jspecify.annotations.NullMarked
package org.springframework.integration.scripting.dsl;
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,10 @@

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jspecify.annotations.Nullable;

import org.springframework.integration.scripting.ScriptExecutor;
import org.springframework.integration.scripting.ScriptingException;
import org.springframework.lang.Nullable;
import org.springframework.scripting.ScriptSource;
import org.springframework.util.Assert;

Expand Down Expand Up @@ -69,8 +69,7 @@ public ScriptEngine getScriptEngine() {
}

@Override
@Nullable
public Object executeScript(ScriptSource scriptSource, Map<String, Object> variables) {
public @Nullable Object executeScript(ScriptSource scriptSource, @Nullable Map<String, Object> variables) {
try {
Object result;
String script = scriptSource.getScriptAsString();
Expand Down Expand Up @@ -108,7 +107,7 @@ public Object executeScript(ScriptSource scriptSource, Map<String, Object> varia
* @param bindings the bindings.
* @return modified result
*/
protected abstract Object postProcess(Object result, ScriptEngine scriptEngine, String script, Bindings bindings);
protected abstract Object postProcess(Object result, ScriptEngine scriptEngine, String script, @Nullable Bindings bindings);

private static String invalidLanguageMessage(String language) {
return ScriptEngineManager.class.getName() +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
import javax.script.Bindings;
import javax.script.ScriptEngine;

import org.jspecify.annotations.Nullable;

/**
* Default implementation of the {@link AbstractScriptExecutor}.
* Accepts a scripting language for resolving a target {@code ScriptEngine} for
Expand All @@ -43,7 +45,7 @@ public DefaultScriptExecutor(String language) {
}

@Override
protected Object postProcess(Object result, ScriptEngine scriptEngine, String script, Bindings bindings) {
protected Object postProcess(Object result, ScriptEngine scriptEngine, String script, @Nullable Bindings bindings) {
return result;
}

Expand Down
Loading