diff --git a/spring-aop/src/main/java/org/springframework/aop/TrueMethodMatcher.java b/spring-aop/src/main/java/org/springframework/aop/TrueMethodMatcher.java index cf21e97c91..7442d72ec4 100644 --- a/spring-aop/src/main/java/org/springframework/aop/TrueMethodMatcher.java +++ b/spring-aop/src/main/java/org/springframework/aop/TrueMethodMatcher.java @@ -19,6 +19,8 @@ package org.springframework.aop; import java.io.Serializable; import java.lang.reflect.Method; +import org.springframework.lang.Nullable; + /** * Canonical MethodMatcher instance that matches all methods. * @@ -43,12 +45,12 @@ class TrueMethodMatcher implements MethodMatcher, Serializable { } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return true; } @Override - public boolean matches(Method method, Class targetClass, Object... args) { + public boolean matches(Method method, @Nullable Class targetClass, Object... args) { // Should never be invoked as isRuntime returns false. throw new UnsupportedOperationException(); } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java index 6240294239..daf6f13a63 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AbstractAspectJAdvice.java @@ -698,7 +698,7 @@ public abstract class AbstractAspectJAdvice implements Advice, AspectJPrecedence } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return !this.adviceMethod.equals(method); } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterReturningAdvice.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterReturningAdvice.java index f3dbb60630..e679a117ff 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterReturningAdvice.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAfterReturningAdvice.java @@ -61,7 +61,7 @@ public class AspectJAfterReturningAdvice extends AbstractAspectJAdvice } @Override - public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { + public void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable { if (shouldInvokeOnReturnValueOf(method, returnValue)) { invokeAdviceMethod(getJoinPointMatch(), returnValue, null); } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java index 2e21602fc8..026c493420 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java @@ -277,7 +277,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut } @Override - public boolean matches(Method method, Class targetClass, boolean beanHasIntroductions) { + public boolean matches(Method method, @Nullable Class targetClass, boolean beanHasIntroductions) { checkReadyToMatch(); Method targetMethod = AopUtils.getMostSpecificMethod(method, targetClass); ShadowMatch shadowMatch = getShadowMatch(targetMethod, method); @@ -306,7 +306,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return matches(method, targetClass, false); } @@ -317,7 +317,7 @@ public class AspectJExpressionPointcut extends AbstractExpressionPointcut } @Override - public boolean matches(Method method, Class targetClass, Object... args) { + public boolean matches(Method method, @Nullable Class targetClass, Object... args) { checkReadyToMatch(); ShadowMatch shadowMatch = getShadowMatch(AopUtils.getMostSpecificMethod(method, targetClass), method); ShadowMatch originalShadowMatch = getShadowMatch(method, method); diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJMethodBeforeAdvice.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJMethodBeforeAdvice.java index b18345667c..32a2108776 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJMethodBeforeAdvice.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJMethodBeforeAdvice.java @@ -20,6 +20,7 @@ import java.io.Serializable; import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; +import org.springframework.lang.Nullable; /** * Spring AOP advice that wraps an AspectJ before method. @@ -39,7 +40,7 @@ public class AspectJMethodBeforeAdvice extends AbstractAspectJAdvice implements @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { invokeAdviceMethod(getJoinPointMatch(), null, null); } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java index 27d3a9ba43..7b4c48098f 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/InstantiationModelAwarePointcutAdvisorImpl.java @@ -31,6 +31,7 @@ import org.springframework.aop.aspectj.InstantiationModelAwarePointcutAdvisor; import org.springframework.aop.aspectj.annotation.AbstractAspectJAdvisorFactory.AspectJAnnotation; import org.springframework.aop.support.DynamicMethodMatcherPointcut; import org.springframework.aop.support.Pointcuts; +import org.springframework.lang.Nullable; /** * Internal implementation of AspectJPointcutAdvisor. @@ -274,14 +275,14 @@ class InstantiationModelAwarePointcutAdvisorImpl } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { // We're either instantiated and matching on declared pointcut, or uninstantiated matching on either pointcut return (isAspectMaterialized() && this.declaredPointcut.matches(method, targetClass)) || this.preInstantiationPointcut.getMethodMatcher().matches(method, targetClass); } @Override - public boolean matches(Method method, Class targetClass, Object... args) { + public boolean matches(Method method, @Nullable Class targetClass, Object... args) { // This can match only on declared pointcut. return (isAspectMaterialized() && this.declaredPointcut.matches(method, targetClass)); } diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java index c386a411c6..94439644e2 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/annotation/ReflectiveAspectJAdvisorFactory.java @@ -315,7 +315,7 @@ public class ReflectiveAspectJAdvisorFactory extends AbstractAspectJAdvisorFacto public SyntheticInstantiationAdvisor(final MetadataAwareAspectInstanceFactory aif) { super(aif.getAspectMetadata().getPerClausePointcut(), new MethodBeforeAdvice() { @Override - public void before(Method method, Object[] args, Object target) { + public void before(Method method, Object[] args, @Nullable Object target) { // Simply instantiate the aspect aif.getAspectInstance(); } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.java b/spring-aop/src/main/java/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.java index 4dce5b8e9a..59417f743c 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/AbstractSingletonProxyFactoryBean.java @@ -24,6 +24,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.FactoryBeanNotInitializedException; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -123,7 +124,7 @@ public abstract class AbstractSingletonProxyFactoryBean extends ProxyConfig } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { if (this.proxyClassLoader == null) { this.proxyClassLoader = classLoader; } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/CglibAopProxy.java b/spring-aop/src/main/java/org/springframework/aop/framework/CglibAopProxy.java index a21c64494b..769219f4de 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/CglibAopProxy.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/CglibAopProxy.java @@ -153,7 +153,7 @@ class CglibAopProxy implements AopProxy, Serializable { } @Override - public Object getProxy(ClassLoader classLoader) { + public Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isDebugEnabled()) { logger.debug("Creating CGLIB proxy: target source is " + this.advised.getTargetSource()); } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/DefaultAdvisorChainFactory.java b/spring-aop/src/main/java/org/springframework/aop/framework/DefaultAdvisorChainFactory.java index e629b7b6f9..decf2e55a3 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/DefaultAdvisorChainFactory.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/DefaultAdvisorChainFactory.java @@ -32,6 +32,7 @@ import org.springframework.aop.PointcutAdvisor; import org.springframework.aop.framework.adapter.AdvisorAdapterRegistry; import org.springframework.aop.framework.adapter.GlobalAdvisorAdapterRegistry; import org.springframework.aop.support.MethodMatchers; +import org.springframework.lang.Nullable; /** * A simple but definitive way of working out an advice chain for a Method, @@ -48,7 +49,7 @@ public class DefaultAdvisorChainFactory implements AdvisorChainFactory, Serializ @Override public List getInterceptorsAndDynamicInterceptionAdvice( - Advised config, Method method, Class targetClass) { + Advised config, Method method, @Nullable Class targetClass) { // This is somewhat tricky... We have to process introductions first, // but we need to preserve order in the ultimate list. diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/JdkDynamicAopProxy.java b/spring-aop/src/main/java/org/springframework/aop/framework/JdkDynamicAopProxy.java index c280830a14..240dc3decf 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/JdkDynamicAopProxy.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/JdkDynamicAopProxy.java @@ -31,6 +31,7 @@ import org.springframework.aop.RawTargetAccess; import org.springframework.aop.TargetSource; import org.springframework.aop.support.AopUtils; import org.springframework.core.DecoratingProxy; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -113,7 +114,7 @@ final class JdkDynamicAopProxy implements AopProxy, InvocationHandler, Serializa } @Override - public Object getProxy(ClassLoader classLoader) { + public Object getProxy(@Nullable ClassLoader classLoader) { if (logger.isDebugEnabled()) { logger.debug("Creating JDK dynamic proxy: target source is " + this.advised.getTargetSource()); } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java index af59b8147b..6dff81c794 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyFactoryBean.java @@ -45,6 +45,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.FactoryBeanNotInitializedException; import org.springframework.beans.factory.ListableBeanFactory; import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -213,13 +214,13 @@ public class ProxyFactoryBean extends ProxyCreatorSupport * containing BeanFactory for loading all bean classes. This can be * overridden here for specific proxies. */ - public void setProxyClassLoader(ClassLoader classLoader) { + public void setProxyClassLoader(@Nullable ClassLoader classLoader) { this.proxyClassLoader = classLoader; this.classLoaderConfigured = (classLoader != null); } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { if (!this.classLoaderConfigured) { this.proxyClassLoader = classLoader; } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyProcessorSupport.java b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyProcessorSupport.java index 7f7c027e1b..3919046b7e 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/ProxyProcessorSupport.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/ProxyProcessorSupport.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.Ordered; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -81,7 +82,7 @@ public class ProxyProcessorSupport extends ProxyConfig implements Ordered, BeanC } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { if (!this.classLoaderConfigured) { this.proxyClassLoader = classLoader; } diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/ReflectiveMethodInvocation.java b/spring-aop/src/main/java/org/springframework/aop/framework/ReflectiveMethodInvocation.java index a555d02168..917bd4a378 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/ReflectiveMethodInvocation.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/ReflectiveMethodInvocation.java @@ -28,6 +28,7 @@ import org.aopalliance.intercept.MethodInvocation; import org.springframework.aop.ProxyMethodInvocation; import org.springframework.aop.support.AopUtils; import org.springframework.core.BridgeMethodResolver; +import org.springframework.lang.Nullable; /** * Spring's implementation of the AOP Alliance @@ -240,7 +241,7 @@ public class ReflectiveMethodInvocation implements ProxyMethodInvocation, Clonea @Override - public void setUserAttribute(String key, Object value) { + public void setUserAttribute(String key, @Nullable Object value) { if (value != null) { if (this.userAttributes == null) { this.userAttributes = new HashMap<>(); diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java index d7a8d1168b..adc50355f4 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAdvisorAutoProxyCreator.java @@ -24,6 +24,7 @@ import org.springframework.aop.support.AopUtils; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.lang.Nullable; /** * Generic auto proxy creator that builds AOP proxies for specific beans @@ -66,7 +67,8 @@ public abstract class AbstractAdvisorAutoProxyCreator extends AbstractAutoProxyC @Override - protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String beanName, TargetSource targetSource) { + @Nullable + protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String beanName, @Nullable TargetSource targetSource) { List advisors = findEligibleAdvisors(beanClass, beanName); if (advisors.isEmpty()) { return DO_NOT_PROXY; diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java index 97a1e27b27..78f620ba56 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreator.java @@ -22,6 +22,7 @@ import java.util.List; import org.springframework.aop.TargetSource; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.FactoryBean; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.PatternMatchUtils; import org.springframework.util.StringUtils; @@ -73,7 +74,8 @@ public class BeanNameAutoProxyCreator extends AbstractAutoProxyCreator { * Identify as bean to proxy if the bean name is in the configured list of names. */ @Override - protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String beanName, TargetSource targetSource) { + @Nullable + protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String beanName, @Nullable TargetSource targetSource) { if (this.beanNames != null) { for (String mappedName : this.beanNames) { if (FactoryBean.class.isAssignableFrom(beanClass)) { diff --git a/spring-aop/src/main/java/org/springframework/aop/support/AbstractRegexpMethodPointcut.java b/spring-aop/src/main/java/org/springframework/aop/support/AbstractRegexpMethodPointcut.java index 537969b8ef..f6c7152796 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/AbstractRegexpMethodPointcut.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/AbstractRegexpMethodPointcut.java @@ -20,6 +20,7 @@ import java.io.Serializable; import java.lang.reflect.Method; import java.util.Arrays; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -129,7 +130,7 @@ public abstract class AbstractRegexpMethodPointcut extends StaticMethodMatcherPo * plus the name of the method. */ @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return ((targetClass != null && matchesPattern(ClassUtils.getQualifiedMethodName(method, targetClass))) || matchesPattern(ClassUtils.getQualifiedMethodName(method))); } diff --git a/spring-aop/src/main/java/org/springframework/aop/support/ControlFlowPointcut.java b/spring-aop/src/main/java/org/springframework/aop/support/ControlFlowPointcut.java index 1c339c0b66..4092f1f92c 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/ControlFlowPointcut.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/ControlFlowPointcut.java @@ -80,7 +80,7 @@ public class ControlFlowPointcut implements Pointcut, ClassFilter, MethodMatcher * some candidate classes. */ @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return true; } @@ -90,7 +90,7 @@ public class ControlFlowPointcut implements Pointcut, ClassFilter, MethodMatcher } @Override - public boolean matches(Method method, Class targetClass, Object... args) { + public boolean matches(Method method, @Nullable Class targetClass, Object... args) { this.evaluations++; for (StackTraceElement element : new Throwable().getStackTrace()) { diff --git a/spring-aop/src/main/java/org/springframework/aop/support/DynamicMethodMatcher.java b/spring-aop/src/main/java/org/springframework/aop/support/DynamicMethodMatcher.java index 78b230d8f0..b46b0e4912 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/DynamicMethodMatcher.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/DynamicMethodMatcher.java @@ -19,6 +19,7 @@ package org.springframework.aop.support; import java.lang.reflect.Method; import org.springframework.aop.MethodMatcher; +import org.springframework.lang.Nullable; /** * Convenient abstract superclass for dynamic method matchers, @@ -36,7 +37,7 @@ public abstract class DynamicMethodMatcher implements MethodMatcher { * always returns true. */ @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return true; } diff --git a/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java b/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java index 9fac123ee8..01672395bb 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/MethodMatchers.java @@ -114,13 +114,13 @@ public abstract class MethodMatchers { } @Override - public boolean matches(Method method, Class targetClass, boolean hasIntroductions) { + public boolean matches(Method method, @Nullable Class targetClass, boolean hasIntroductions) { return (matchesClass1(targetClass) && MethodMatchers.matches(this.mm1, method, targetClass, hasIntroductions)) || (matchesClass2(targetClass) && MethodMatchers.matches(this.mm2, method, targetClass, hasIntroductions)); } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return (matchesClass1(targetClass) && this.mm1.matches(method, targetClass)) || (matchesClass2(targetClass) && this.mm2.matches(method, targetClass)); } @@ -139,7 +139,7 @@ public abstract class MethodMatchers { } @Override - public boolean matches(Method method, Class targetClass, Object... args) { + public boolean matches(Method method, @Nullable Class targetClass, Object... args) { return this.mm1.matches(method, targetClass, args) || this.mm2.matches(method, targetClass, args); } @@ -230,13 +230,13 @@ public abstract class MethodMatchers { } @Override - public boolean matches(Method method, Class targetClass, boolean hasIntroductions) { + public boolean matches(Method method, @Nullable Class targetClass, boolean hasIntroductions) { return MethodMatchers.matches(this.mm1, method, targetClass, hasIntroductions) && MethodMatchers.matches(this.mm2, method, targetClass, hasIntroductions); } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return this.mm1.matches(method, targetClass) && this.mm2.matches(method, targetClass); } @@ -246,7 +246,7 @@ public abstract class MethodMatchers { } @Override - public boolean matches(Method method, Class targetClass, Object... args) { + public boolean matches(Method method, @Nullable Class targetClass, Object... args) { // Because a dynamic intersection may be composed of a static and dynamic part, // we must avoid calling the 3-arg matches method on a dynamic matcher, as // it will probably be an unsupported operation. diff --git a/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java b/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java index 0d64a896d5..7ac7f17480 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/NameMatchMethodPointcut.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.LinkedList; import java.util.List; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; import org.springframework.util.PatternMatchUtils; @@ -78,7 +79,7 @@ public class NameMatchMethodPointcut extends StaticMethodMatcherPointcut impleme @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { for (String mappedName : this.mappedNames) { if (mappedName.equals(method.getName()) || isMatch(method.getName(), mappedName)) { return true; diff --git a/spring-aop/src/main/java/org/springframework/aop/support/Pointcuts.java b/spring-aop/src/main/java/org/springframework/aop/support/Pointcuts.java index 0f0cf6e98c..ddc4495cd6 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/Pointcuts.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/Pointcuts.java @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import org.springframework.aop.MethodMatcher; import org.springframework.aop.Pointcut; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -97,7 +98,7 @@ public abstract class Pointcuts { public static SetterPointcut INSTANCE = new SetterPointcut(); @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return (method.getName().startsWith("set") && method.getParameterCount() == 1 && method.getReturnType() == Void.TYPE); @@ -118,7 +119,7 @@ public abstract class Pointcuts { public static GetterPointcut INSTANCE = new GetterPointcut(); @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return (method.getName().startsWith("get") && method.getParameterCount() == 0); } diff --git a/spring-aop/src/main/java/org/springframework/aop/support/StaticMethodMatcher.java b/spring-aop/src/main/java/org/springframework/aop/support/StaticMethodMatcher.java index 0627248ee9..76f89ab3eb 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/StaticMethodMatcher.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/StaticMethodMatcher.java @@ -19,6 +19,7 @@ package org.springframework.aop.support; import java.lang.reflect.Method; import org.springframework.aop.MethodMatcher; +import org.springframework.lang.Nullable; /** * Convenient abstract superclass for static method matchers, which don't care @@ -32,7 +33,7 @@ public abstract class StaticMethodMatcher implements MethodMatcher { } @Override - public final boolean matches(Method method, Class targetClass, Object... args) { + public final boolean matches(Method method, @Nullable Class targetClass, Object... args) { // should never be invoked because isRuntime() returns false throw new UnsupportedOperationException("Illegal MethodMatcher usage"); } diff --git a/spring-aop/src/main/java/org/springframework/aop/support/annotation/AnnotationMethodMatcher.java b/spring-aop/src/main/java/org/springframework/aop/support/annotation/AnnotationMethodMatcher.java index ec0c371bbe..90836d9af3 100644 --- a/spring-aop/src/main/java/org/springframework/aop/support/annotation/AnnotationMethodMatcher.java +++ b/spring-aop/src/main/java/org/springframework/aop/support/annotation/AnnotationMethodMatcher.java @@ -22,6 +22,7 @@ import java.lang.reflect.Method; import org.springframework.aop.support.AopUtils; import org.springframework.aop.support.StaticMethodMatcher; import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -66,7 +67,7 @@ public class AnnotationMethodMatcher extends StaticMethodMatcher { @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { if (matchesMethod(method)) { return true; } diff --git a/spring-aop/src/test/java/org/springframework/aop/aspectj/MethodInvocationProceedingJoinPointTests.java b/spring-aop/src/test/java/org/springframework/aop/aspectj/MethodInvocationProceedingJoinPointTests.java index ee772ee776..f547c026d9 100644 --- a/spring-aop/src/test/java/org/springframework/aop/aspectj/MethodInvocationProceedingJoinPointTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/aspectj/MethodInvocationProceedingJoinPointTests.java @@ -33,6 +33,7 @@ import org.springframework.aop.framework.AopContext; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.interceptor.ExposeInvocationInterceptor; import org.springframework.aop.support.AopUtils; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.ITestBean; import org.springframework.tests.sample.beans.TestBean; @@ -81,7 +82,7 @@ public class MethodInvocationProceedingJoinPointTests { private int depth; @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { JoinPoint jp = AbstractAspectJAdvice.currentJoinPoint(); assertTrue("Method named in toString", jp.toString().contains(method.getName())); // Ensure that these don't cause problems @@ -138,7 +139,7 @@ public class MethodInvocationProceedingJoinPointTests { pf.addAdvisor(ExposeInvocationInterceptor.ADVISOR); pf.addAdvice(new MethodBeforeAdvice() { @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { SourceLocation sloc = AbstractAspectJAdvice.currentJoinPoint().getSourceLocation(); assertEquals("Same source location must be returned on subsequent requests", sloc, AbstractAspectJAdvice.currentJoinPoint().getSourceLocation()); assertEquals(TestBean.class, sloc.getWithinType()); @@ -171,7 +172,7 @@ public class MethodInvocationProceedingJoinPointTests { pf.addAdvisor(ExposeInvocationInterceptor.ADVISOR); pf.addAdvice(new MethodBeforeAdvice() { @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { StaticPart staticPart = AbstractAspectJAdvice.currentJoinPoint().getStaticPart(); assertEquals("Same static part must be returned on subsequent requests", staticPart, AbstractAspectJAdvice.currentJoinPoint().getStaticPart()); assertEquals(ProceedingJoinPoint.METHOD_EXECUTION, staticPart.getKind()); @@ -191,7 +192,7 @@ public class MethodInvocationProceedingJoinPointTests { pf.addAdvisor(ExposeInvocationInterceptor.ADVISOR); pf.addAdvice(new MethodBeforeAdvice() { @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { // makeEncSJP, although meant for computing the enclosing join point, // it serves our purpose here JoinPoint.StaticPart aspectJVersionJp = Factory.makeEncSJP(method); diff --git a/spring-aop/src/test/java/org/springframework/aop/aspectj/TrickyAspectJPointcutExpressionTests.java b/spring-aop/src/test/java/org/springframework/aop/aspectj/TrickyAspectJPointcutExpressionTests.java index 8a9d63a4b9..dd57aef3b2 100644 --- a/spring-aop/src/test/java/org/springframework/aop/aspectj/TrickyAspectJPointcutExpressionTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/aspectj/TrickyAspectJPointcutExpressionTests.java @@ -32,6 +32,7 @@ import org.springframework.aop.ThrowsAdvice; import org.springframework.aop.framework.ProxyFactory; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.core.OverridingClassLoader; +import org.springframework.lang.Nullable; import static org.junit.Assert.*; @@ -174,7 +175,7 @@ public class TrickyAspectJPointcutExpressionTests { private int countThrows = 0; @Override - public void before(Method method, Object[] objects, Object o) throws Throwable { + public void before(Method method, Object[] objects, @Nullable Object o) throws Throwable { countBefore++; } diff --git a/spring-aop/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparatorTests.java b/spring-aop/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparatorTests.java index 96313821a3..752ae46777 100644 --- a/spring-aop/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparatorTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJPrecedenceComparatorTests.java @@ -33,6 +33,7 @@ import org.springframework.aop.aspectj.AspectJExpressionPointcut; import org.springframework.aop.aspectj.AspectJMethodBeforeAdvice; import org.springframework.aop.aspectj.AspectJPointcutAdvisor; import org.springframework.aop.support.DefaultPointcutAdvisor; +import org.springframework.lang.Nullable; import static org.junit.Assert.*; @@ -196,7 +197,7 @@ public class AspectJPrecedenceComparatorTests { private Advisor createSpringAOPAfterAdvice(int order) { AfterReturningAdvice advice = new AfterReturningAdvice() { @Override - public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable { + public void afterReturning(@Nullable Object returnValue, Method method, Object[] args, @Nullable Object target) throws Throwable { } }; DefaultPointcutAdvisor advisor = new DefaultPointcutAdvisor(this.anyOldPointcut, advice); diff --git a/spring-aop/src/test/java/org/springframework/aop/support/AopUtilsTests.java b/spring-aop/src/test/java/org/springframework/aop/support/AopUtilsTests.java index 670845229c..2290c25dd2 100644 --- a/spring-aop/src/test/java/org/springframework/aop/support/AopUtilsTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/support/AopUtilsTests.java @@ -25,6 +25,7 @@ import org.springframework.aop.MethodMatcher; import org.springframework.aop.Pointcut; import org.springframework.aop.interceptor.ExposeInvocationInterceptor; import org.springframework.aop.target.EmptyTargetSource; +import org.springframework.lang.Nullable; import org.springframework.tests.aop.interceptor.NopInterceptor; import org.springframework.tests.sample.beans.TestBean; import org.springframework.util.SerializationTestUtils; @@ -41,7 +42,7 @@ public class AopUtilsTests { public void testPointcutCanNeverApply() { class TestPointcut extends StaticMethodMatcherPointcut { @Override - public boolean matches(Method method, Class clazzy) { + public boolean matches(Method method, @Nullable Class clazzy) { return false; } } @@ -60,7 +61,7 @@ public class AopUtilsTests { public void testPointcutAppliesToOneMethodOnObject() { class TestPointcut extends StaticMethodMatcherPointcut { @Override - public boolean matches(Method method, Class clazz) { + public boolean matches(Method method, @Nullable Class clazz) { return method.getName().equals("hashCode"); } } diff --git a/spring-aop/src/test/java/org/springframework/aop/support/ComposablePointcutTests.java b/spring-aop/src/test/java/org/springframework/aop/support/ComposablePointcutTests.java index b34438ee3d..78deeefce9 100644 --- a/spring-aop/src/test/java/org/springframework/aop/support/ComposablePointcutTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/support/ComposablePointcutTests.java @@ -24,6 +24,7 @@ import org.springframework.aop.ClassFilter; import org.springframework.aop.MethodMatcher; import org.springframework.aop.Pointcut; import org.springframework.core.NestedRuntimeException; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.TestBean; import static org.junit.Assert.*; @@ -36,28 +37,28 @@ public class ComposablePointcutTests { public static MethodMatcher GETTER_METHOD_MATCHER = new StaticMethodMatcher() { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("get"); } }; public static MethodMatcher GET_AGE_METHOD_MATCHER = new StaticMethodMatcher() { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().equals("getAge"); } }; public static MethodMatcher ABSQUATULATE_METHOD_MATCHER = new StaticMethodMatcher() { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().equals("absquatulate"); } }; public static MethodMatcher SETTER_METHOD_MATCHER = new StaticMethodMatcher() { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("set"); } }; diff --git a/spring-aop/src/test/java/org/springframework/aop/support/MethodMatchersTests.java b/spring-aop/src/test/java/org/springframework/aop/support/MethodMatchersTests.java index 5b12fa19e9..f7364f99c6 100644 --- a/spring-aop/src/test/java/org/springframework/aop/support/MethodMatchersTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/support/MethodMatchersTests.java @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import org.junit.Test; import org.springframework.aop.MethodMatcher; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.IOther; import org.springframework.tests.sample.beans.ITestBean; import org.springframework.tests.sample.beans.TestBean; @@ -120,7 +121,7 @@ public class MethodMatchersTests { } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith(prefix); } } @@ -129,7 +130,7 @@ public class MethodMatchersTests { private static class TestDynamicMethodMatcherWhichMatches extends DynamicMethodMatcher { @Override - public boolean matches(Method m, Class targetClass, Object... args) { + public boolean matches(Method m, @Nullable Class targetClass, Object... args) { return true; } } @@ -138,7 +139,7 @@ public class MethodMatchersTests { private static class TestDynamicMethodMatcherWhichDoesNotMatch extends DynamicMethodMatcher { @Override - public boolean matches(Method m, Class targetClass, Object... args) { + public boolean matches(Method m, @Nullable Class targetClass, Object... args) { return false; } } diff --git a/spring-aop/src/test/java/org/springframework/aop/support/PointcutsTests.java b/spring-aop/src/test/java/org/springframework/aop/support/PointcutsTests.java index 5e5569a949..1d2943729a 100644 --- a/spring-aop/src/test/java/org/springframework/aop/support/PointcutsTests.java +++ b/spring-aop/src/test/java/org/springframework/aop/support/PointcutsTests.java @@ -22,6 +22,7 @@ import org.junit.Test; import org.springframework.aop.ClassFilter; import org.springframework.aop.Pointcut; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.TestBean; import static org.junit.Assert.*; @@ -64,7 +65,7 @@ public class PointcutsTests { } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return true; } }; @@ -82,7 +83,7 @@ public class PointcutsTests { } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("set"); } }; @@ -95,7 +96,7 @@ public class PointcutsTests { } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("get"); } }; @@ -111,7 +112,7 @@ public class PointcutsTests { } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("get"); } }; diff --git a/spring-beans/src/main/java/org/springframework/beans/BeanMetadataAttributeAccessor.java b/spring-beans/src/main/java/org/springframework/beans/BeanMetadataAttributeAccessor.java index 9f75cfef3c..175338f1e9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/BeanMetadataAttributeAccessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/BeanMetadataAttributeAccessor.java @@ -67,7 +67,7 @@ public class BeanMetadataAttributeAccessor extends AttributeAccessorSupport impl } @Override - public void setAttribute(String name, Object value) { + public void setAttribute(String name, @Nullable Object value) { super.setAttribute(name, new BeanMetadataAttribute(name, value)); } diff --git a/spring-beans/src/main/java/org/springframework/beans/PropertyEditorRegistrySupport.java b/spring-beans/src/main/java/org/springframework/beans/PropertyEditorRegistrySupport.java index ef70b224f3..a44512fd81 100644 --- a/spring-beans/src/main/java/org/springframework/beans/PropertyEditorRegistrySupport.java +++ b/spring-beans/src/main/java/org/springframework/beans/PropertyEditorRegistrySupport.java @@ -284,7 +284,7 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry { } @Override - public void registerCustomEditor(Class requiredType, String propertyPath, PropertyEditor propertyEditor) { + public void registerCustomEditor(@Nullable Class requiredType, @Nullable String propertyPath, PropertyEditor propertyEditor) { if (requiredType == null && propertyPath == null) { throw new IllegalArgumentException("Either requiredType or propertyPath is required"); } @@ -304,7 +304,8 @@ public class PropertyEditorRegistrySupport implements PropertyEditorRegistry { } @Override - public PropertyEditor findCustomEditor(Class requiredType, String propertyPath) { + @Nullable + public PropertyEditor findCustomEditor(@Nullable Class requiredType, @Nullable String propertyPath) { Class requiredTypeToUse = requiredType; if (propertyPath != null) { if (this.customEditorsForPath != null) { diff --git a/spring-beans/src/main/java/org/springframework/beans/TypeConverterSupport.java b/spring-beans/src/main/java/org/springframework/beans/TypeConverterSupport.java index 9be206c694..e45d8ef084 100644 --- a/spring-beans/src/main/java/org/springframework/beans/TypeConverterSupport.java +++ b/spring-beans/src/main/java/org/springframework/beans/TypeConverterSupport.java @@ -21,6 +21,7 @@ import java.lang.reflect.Field; import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionException; import org.springframework.core.convert.ConverterNotFoundException; +import org.springframework.lang.Nullable; /** * Base implementation of the {@link TypeConverter} interface, using a package-private delegate. @@ -36,25 +37,25 @@ public abstract class TypeConverterSupport extends PropertyEditorRegistrySupport @Override - public T convertIfNecessary(Object value, Class requiredType) throws TypeMismatchException { + public T convertIfNecessary(Object value, @Nullable Class requiredType) throws TypeMismatchException { return doConvert(value, requiredType, null, null); } @Override - public T convertIfNecessary(Object value, Class requiredType, MethodParameter methodParam) + public T convertIfNecessary(Object value, @Nullable Class requiredType, @Nullable MethodParameter methodParam) throws TypeMismatchException { return doConvert(value, requiredType, methodParam, null); } @Override - public T convertIfNecessary(Object value, Class requiredType, Field field) + public T convertIfNecessary(Object value, @Nullable Class requiredType, @Nullable Field field) throws TypeMismatchException { return doConvert(value, requiredType, null, field); } - private T doConvert(Object value, Class requiredType, MethodParameter methodParam, Field field) + private T doConvert(Object value, Class requiredType, @Nullable MethodParameter methodParam, @Nullable Field field) throws TypeMismatchException { try { if (field != null) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.java index 51dd04a8d6..3e1ffe6a53 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/CustomAutowireConfigurer.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.config.BeanFactoryPostProcessor; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.core.Ordered; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -65,7 +66,7 @@ public class CustomAutowireConfigurer implements BeanFactoryPostProcessor, BeanC } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/AbstractFactoryBean.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/AbstractFactoryBean.java index 625bb2cd5f..087eb91373 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/AbstractFactoryBean.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/AbstractFactoryBean.java @@ -91,7 +91,7 @@ public abstract class AbstractFactoryBean } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/CustomScopeConfigurer.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/CustomScopeConfigurer.java index 02141ce098..d5844fd82b 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/CustomScopeConfigurer.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/CustomScopeConfigurer.java @@ -23,6 +23,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.core.Ordered; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -86,7 +87,7 @@ public class CustomScopeConfigurer implements BeanFactoryPostProcessor, BeanClas } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/EmbeddedValueResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/EmbeddedValueResolver.java index bd8c1666e0..2f44edeb55 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/EmbeddedValueResolver.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/EmbeddedValueResolver.java @@ -16,6 +16,7 @@ package org.springframework.beans.factory.config; +import org.springframework.lang.Nullable; import org.springframework.util.StringValueResolver; /** @@ -47,7 +48,7 @@ public class EmbeddedValueResolver implements StringValueResolver { @Override - public String resolveStringValue(String strVal) { + public String resolveStringValue(@Nullable String strVal) { String value = this.exprContext.getBeanFactory().resolveEmbeddedValue(strVal); if (this.exprResolver != null && value != null) { Object evaluated = this.exprResolver.evaluate(value, this.exprContext); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.java index 6f035c1732..de5221e978 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/FieldRetrievingFactoryBean.java @@ -24,6 +24,7 @@ import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.FactoryBeanNotInitializedException; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; import org.springframework.util.StringUtils; @@ -148,7 +149,7 @@ public class FieldRetrievingFactoryBean } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/MethodInvokingBean.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/MethodInvokingBean.java index cd1ad28708..e0c49ba7d2 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/MethodInvokingBean.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/MethodInvokingBean.java @@ -24,6 +24,7 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.support.ArgumentConvertingMethodInvoker; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -72,7 +73,7 @@ public class MethodInvokingBean extends ArgumentConvertingMethodInvoker @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.java index 6a21805217..aa0848a86c 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.java @@ -238,7 +238,8 @@ public class PropertyPlaceholderConfigurer extends PlaceholderConfigurerSupport } @Override - public String resolveStringValue(String strVal) throws BeansException { + @Nullable + public String resolveStringValue(@Nullable String strVal) throws BeansException { String resolved = this.helper.replacePlaceholders(strVal, this.resolver); if (trimValues) { resolved = resolved.trim(); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/NullSourceExtractor.java b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/NullSourceExtractor.java index 3e3fa62524..44042b0496 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/NullSourceExtractor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/NullSourceExtractor.java @@ -17,6 +17,7 @@ package org.springframework.beans.factory.parsing; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; /** * Simple implementation of {@link SourceExtractor} that returns {@code null} @@ -34,7 +35,8 @@ public class NullSourceExtractor implements SourceExtractor { * This implementation simply returns {@code null} for any input. */ @Override - public Object extractSource(Object sourceCandidate, Resource definitionResource) { + @Nullable + public Object extractSource(Object sourceCandidate, @Nullable Resource definitionResource) { return null; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/PassThroughSourceExtractor.java b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/PassThroughSourceExtractor.java index a9f56dbfbb..33e5da65b1 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/PassThroughSourceExtractor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/PassThroughSourceExtractor.java @@ -17,6 +17,7 @@ package org.springframework.beans.factory.parsing; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; /** * Simple {@link SourceExtractor} implementation that just passes @@ -40,7 +41,7 @@ public class PassThroughSourceExtractor implements SourceExtractor { * @return the supplied {@code sourceCandidate} */ @Override - public Object extractSource(Object sourceCandidate, Resource definingResource) { + public Object extractSource(Object sourceCandidate, @Nullable Resource definingResource) { return sourceCandidate; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/serviceloader/AbstractServiceLoaderBasedFactoryBean.java b/spring-beans/src/main/java/org/springframework/beans/factory/serviceloader/AbstractServiceLoaderBasedFactoryBean.java index a7e03dd429..483e0dcc68 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/serviceloader/AbstractServiceLoaderBasedFactoryBean.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/serviceloader/AbstractServiceLoaderBasedFactoryBean.java @@ -20,6 +20,7 @@ import java.util.ServiceLoader; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.config.AbstractFactoryBean; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -54,7 +55,7 @@ public abstract class AbstractServiceLoaderBasedFactoryBean extends AbstractFact } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index 3e43d826ff..8e0317c729 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -195,7 +195,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp } @Override - public T getBean(String name, Class requiredType) throws BeansException { + public T getBean(String name, @Nullable Class requiredType) throws BeansException { return doGetBean(name, requiredType, null, false); } @@ -698,7 +698,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = (beanClassLoader != null ? beanClassLoader : ClassUtils.getDefaultClassLoader()); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/ChildBeanDefinition.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/ChildBeanDefinition.java index a6204ae216..465a884cd9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/ChildBeanDefinition.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/ChildBeanDefinition.java @@ -18,6 +18,7 @@ package org.springframework.beans.factory.support; import org.springframework.beans.MutablePropertyValues; import org.springframework.beans.factory.config.ConstructorArgumentValues; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; /** @@ -129,7 +130,7 @@ public class ChildBeanDefinition extends AbstractBeanDefinition { @Override - public void setParentName(String parentName) { + public void setParentName(@Nullable String parentName) { this.parentName = parentName; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index d0f14b96df..e1666ed6fa 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -373,17 +373,17 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto } @Override - public String[] getBeanNamesForType(ResolvableType type) { + public String[] getBeanNamesForType(@Nullable ResolvableType type) { return doGetBeanNamesForType(type, true, true); } @Override - public String[] getBeanNamesForType(Class type) { + public String[] getBeanNamesForType(@Nullable Class type) { return getBeanNamesForType(type, true, true); } @Override - public String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit) { + public String[] getBeanNamesForType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) { if (!isConfigurationFrozen() || type == null || !allowEagerInit) { return doGetBeanNamesForType(ResolvableType.forRawClass(type), includeNonSingletons, allowEagerInit); } @@ -497,12 +497,12 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto } @Override - public Map getBeansOfType(Class type) throws BeansException { + public Map getBeansOfType(@Nullable Class type) throws BeansException { return getBeansOfType(type, true, true); } @Override - public Map getBeansOfType(Class type, boolean includeNonSingletons, boolean allowEagerInit) + public Map getBeansOfType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException { String[] beanNames = getBeanNamesForType(type, includeNonSingletons, allowEagerInit); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/GenericBeanDefinition.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/GenericBeanDefinition.java index 04ec986dec..ab404a9e52 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/GenericBeanDefinition.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/GenericBeanDefinition.java @@ -17,6 +17,7 @@ package org.springframework.beans.factory.support; import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.lang.Nullable; /** * GenericBeanDefinition is a one-stop shop for standard bean definition purposes. @@ -64,7 +65,7 @@ public class GenericBeanDefinition extends AbstractBeanDefinition { @Override - public void setParentName(String parentName) { + public void setParentName(@Nullable String parentName) { this.parentName = parentName; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedList.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedList.java index 1d9e745076..321a72101d 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedList.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedList.java @@ -21,6 +21,7 @@ import java.util.List; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.Mergeable; +import org.springframework.lang.Nullable; /** * Tag collection class used to hold managed List elements, which may @@ -91,7 +92,7 @@ public class ManagedList extends ArrayList implements Mergeable, BeanMetad @Override @SuppressWarnings("unchecked") - public List merge(Object parent) { + public List merge(@Nullable Object parent) { if (!this.mergeEnabled) { throw new IllegalStateException("Not allowed to merge when the 'mergeEnabled' property is set to 'false'"); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedMap.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedMap.java index 444fe4fec6..573796d0a8 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedMap.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedMap.java @@ -21,6 +21,7 @@ import java.util.Map; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.Mergeable; +import org.springframework.lang.Nullable; /** * Tag collection class used to hold managed Map values, which may @@ -106,7 +107,7 @@ public class ManagedMap extends LinkedHashMap implements Mergeable, @Override @SuppressWarnings("unchecked") - public Object merge(Object parent) { + public Object merge(@Nullable Object parent) { if (!this.mergeEnabled) { throw new IllegalStateException("Not allowed to merge when the 'mergeEnabled' property is set to 'false'"); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedProperties.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedProperties.java index dadaac3e0c..e6f7cf7952 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedProperties.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedProperties.java @@ -20,6 +20,7 @@ import java.util.Properties; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.Mergeable; +import org.springframework.lang.Nullable; /** * Tag class which represents a Spring-managed {@link Properties} instance @@ -65,7 +66,7 @@ public class ManagedProperties extends Properties implements Mergeable, BeanMeta @Override - public Object merge(Object parent) { + public Object merge(@Nullable Object parent) { if (!this.mergeEnabled) { throw new IllegalStateException("Not allowed to merge when the 'mergeEnabled' property is set to 'false'"); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedSet.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedSet.java index c50b70810c..ff0b888b68 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedSet.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/ManagedSet.java @@ -21,6 +21,7 @@ import java.util.Set; import org.springframework.beans.BeanMetadataElement; import org.springframework.beans.Mergeable; +import org.springframework.lang.Nullable; /** * Tag collection class used to hold managed Set values, which may @@ -90,7 +91,7 @@ public class ManagedSet extends LinkedHashSet implements Mergeable, BeanMe @Override @SuppressWarnings("unchecked") - public Set merge(Object parent) { + public Set merge(@Nullable Object parent) { if (!this.mergeEnabled) { throw new IllegalStateException("Not allowed to merge when the 'mergeEnabled' property is set to 'false'"); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/RootBeanDefinition.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/RootBeanDefinition.java index 32704c2cc7..f36eec10b3 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/RootBeanDefinition.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/RootBeanDefinition.java @@ -236,7 +236,7 @@ public class RootBeanDefinition extends AbstractBeanDefinition { } @Override - public void setParentName(String parentName) { + public void setParentName(@Nullable String parentName) { if (parentName != null) { throw new IllegalArgumentException("Root bean cannot be changed into a child bean with parent reference"); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java index 7393fd5aa5..653109a8a8 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/SimpleInstantiationStrategy.java @@ -58,7 +58,7 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy { @Override - public Object instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner) { + public Object instantiate(RootBeanDefinition bd, @Nullable String beanName, BeanFactory owner) { // Don't override the class with CGLIB if no overrides. if (bd.getMethodOverrides().isEmpty()) { Constructor constructorToUse; @@ -107,7 +107,7 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy { } @Override - public Object instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner, + public Object instantiate(RootBeanDefinition bd, @Nullable String beanName, BeanFactory owner, final Constructor ctor, Object... args) { if (bd.getMethodOverrides().isEmpty()) { @@ -141,8 +141,8 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy { } @Override - public Object instantiate(RootBeanDefinition bd, String beanName, BeanFactory owner, - Object factoryBean, final Method factoryMethod, Object... args) { + public Object instantiate(RootBeanDefinition bd, @Nullable String beanName, BeanFactory owner, + @Nullable Object factoryBean, final Method factoryMethod, Object... args) { try { if (System.getSecurityManager() != null) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/StaticListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/StaticListableBeanFactory.java index 26cece3f12..b39f08c2c6 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/StaticListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/StaticListableBeanFactory.java @@ -34,6 +34,7 @@ import org.springframework.beans.factory.NoUniqueBeanDefinitionException; import org.springframework.beans.factory.SmartFactoryBean; import org.springframework.core.ResolvableType; import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -132,7 +133,7 @@ public class StaticListableBeanFactory implements ListableBeanFactory { @Override @SuppressWarnings("unchecked") - public T getBean(String name, Class requiredType) throws BeansException { + public T getBean(String name, @Nullable Class requiredType) throws BeansException { Object bean = getBean(name); if (requiredType != null && !requiredType.isAssignableFrom(bean.getClass())) { throw new BeanNotOfRequiredTypeException(name, requiredType, bean.getClass()); @@ -247,7 +248,7 @@ public class StaticListableBeanFactory implements ListableBeanFactory { } @Override - public String[] getBeanNamesForType(ResolvableType type) { + public String[] getBeanNamesForType(@Nullable ResolvableType type) { boolean isFactoryType = false; if (type != null) { Class resolved = type.resolve(); @@ -275,23 +276,23 @@ public class StaticListableBeanFactory implements ListableBeanFactory { } @Override - public String[] getBeanNamesForType(Class type) { + public String[] getBeanNamesForType(@Nullable Class type) { return getBeanNamesForType(ResolvableType.forClass(type)); } @Override - public String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit) { + public String[] getBeanNamesForType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) { return getBeanNamesForType(ResolvableType.forClass(type)); } @Override - public Map getBeansOfType(Class type) throws BeansException { + public Map getBeansOfType(@Nullable Class type) throws BeansException { return getBeansOfType(type, true, true); } @Override @SuppressWarnings("unchecked") - public Map getBeansOfType(Class type, boolean includeNonSingletons, boolean allowEagerInit) + public Map getBeansOfType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException { boolean isFactoryType = (type != null && FactoryBean.class.isAssignableFrom(type)); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java index ad6c6e2f2e..f40a4b34df 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractBeanDefinitionParser.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.parsing.BeanComponentDefinition; import org.springframework.beans.factory.support.AbstractBeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -147,7 +148,7 @@ public abstract class AbstractBeanDefinitionParser implements BeanDefinitionPars * @see #parse(org.w3c.dom.Element, ParserContext) * @see #postProcessComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) */ - protected abstract AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext); + protected abstract AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext); /** * Should an ID be generated instead of read from the passed in {@link Element}? diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractSingleBeanDefinitionParser.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractSingleBeanDefinitionParser.java index 1310fc513b..92324acd4e 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractSingleBeanDefinitionParser.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/AbstractSingleBeanDefinitionParser.java @@ -58,7 +58,7 @@ public abstract class AbstractSingleBeanDefinitionParser extends AbstractBeanDef * @see #doParse */ @Override - protected final AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + protected final AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(); String parentName = getParentName(element); if (parentName != null) { diff --git a/spring-beans/src/test/java/org/springframework/beans/AbstractPropertyAccessorTests.java b/spring-beans/src/test/java/org/springframework/beans/AbstractPropertyAccessorTests.java index b19c29419f..da802f68c9 100644 --- a/spring-beans/src/test/java/org/springframework/beans/AbstractPropertyAccessorTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/AbstractPropertyAccessorTests.java @@ -49,6 +49,7 @@ import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.convert.support.GenericConversionService; +import org.springframework.lang.Nullable; import org.springframework.tests.Assume; import org.springframework.tests.TestGroup; import org.springframework.tests.sample.beans.BooleanTestBean; @@ -461,7 +462,7 @@ public abstract class AbstractPropertyAccessorTests { AbstractPropertyAccessor accessor = createAccessor(target); accessor.setConversionService(new GenericConversionService() { @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType) { throw new ConversionFailedException(sourceType, targetType, source, null); } }); diff --git a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java index 4d6207deab..a69ee9606d 100644 --- a/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/factory/DefaultListableBeanFactoryTests.java @@ -83,6 +83,7 @@ import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.core.convert.support.GenericConversionService; import org.springframework.core.io.Resource; import org.springframework.core.io.UrlResource; +import org.springframework.lang.Nullable; import org.springframework.tests.Assume; import org.springframework.tests.TestGroup; import org.springframework.tests.sample.beans.DependenciesBean; @@ -3120,7 +3121,7 @@ public class DefaultListableBeanFactoryTests { @Override @SuppressWarnings("unchecked") - public Object convertIfNecessary(Object value, Class requiredType) { + public Object convertIfNecessary(Object value, @Nullable Class requiredType) { if (value instanceof String && Float.class.isAssignableFrom(requiredType)) { try { return new Float(this.numberFormat.parse((String) value).floatValue()); @@ -3139,13 +3140,13 @@ public class DefaultListableBeanFactoryTests { @Override @SuppressWarnings("unchecked") - public Object convertIfNecessary(Object value, Class requiredType, MethodParameter methodParam) { + public Object convertIfNecessary(Object value, @Nullable Class requiredType, @Nullable MethodParameter methodParam) { return convertIfNecessary(value, requiredType); } @Override @SuppressWarnings("unchecked") - public Object convertIfNecessary(Object value, Class requiredType, Field field) { + public Object convertIfNecessary(Object value, @Nullable Class requiredType, @Nullable Field field) { return convertIfNecessary(value, requiredType); } } diff --git a/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java b/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java index 2fff82889c..01c0acd75e 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java +++ b/spring-context-support/src/main/java/org/springframework/cache/caffeine/CaffeineCache.java @@ -22,6 +22,7 @@ import java.util.function.Function; import com.github.benmanes.caffeine.cache.LoadingCache; import org.springframework.cache.support.AbstractValueAdaptingCache; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -82,7 +83,7 @@ public class CaffeineCache extends AbstractValueAdaptingCache { } @Override - public ValueWrapper get(Object key) { + public ValueWrapper get(@Nullable Object key) { if (this.cache instanceof LoadingCache) { Object value = ((LoadingCache) this.cache).get(key); return toValueWrapper(value); @@ -92,7 +93,8 @@ public class CaffeineCache extends AbstractValueAdaptingCache { @SuppressWarnings("unchecked") @Override - public T get(Object key, final Callable valueLoader) { + @Nullable + public T get(@Nullable Object key, final Callable valueLoader) { return (T) fromStoreValue(this.cache.get(key, new LoadFunction(valueLoader))); } @@ -102,19 +104,20 @@ public class CaffeineCache extends AbstractValueAdaptingCache { } @Override - public void put(Object key, Object value) { + public void put(@Nullable Object key, @Nullable Object value) { this.cache.put(key, toStoreValue(value)); } @Override - public ValueWrapper putIfAbsent(Object key, final Object value) { + @Nullable + public ValueWrapper putIfAbsent(@Nullable Object key, @Nullable final Object value) { PutIfAbsentFunction callable = new PutIfAbsentFunction(value); Object result = this.cache.get(key, callable); return (callable.called ? null : toValueWrapper(result)); } @Override - public void evict(Object key) { + public void evict(@Nullable Object key) { this.cache.invalidate(key); } diff --git a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java index 38a93b8827..6e6fd01aeb 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java +++ b/spring-context-support/src/main/java/org/springframework/cache/ehcache/EhCacheCache.java @@ -24,6 +24,7 @@ import net.sf.ehcache.Status; import org.springframework.cache.Cache; import org.springframework.cache.support.SimpleValueWrapper; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -63,14 +64,15 @@ public class EhCacheCache implements Cache { } @Override - public ValueWrapper get(Object key) { + public ValueWrapper get(@Nullable Object key) { Element element = lookup(key); return toValueWrapper(element); } @SuppressWarnings("unchecked") @Override - public T get(Object key, Callable valueLoader) { + @Nullable + public T get(@Nullable Object key, Callable valueLoader) { Element element = lookup(key); if (element != null) { return (T) element.getObjectValue(); @@ -107,7 +109,8 @@ public class EhCacheCache implements Cache { @Override @SuppressWarnings("unchecked") - public T get(Object key, Class type) { + @Nullable + public T get(@Nullable Object key, Class type) { Element element = this.cache.get(key); Object value = (element != null ? element.getObjectValue() : null); if (value != null && type != null && !type.isInstance(value)) { @@ -117,18 +120,18 @@ public class EhCacheCache implements Cache { } @Override - public void put(Object key, Object value) { + public void put(@Nullable Object key, @Nullable Object value) { this.cache.put(new Element(key, value)); } @Override - public ValueWrapper putIfAbsent(Object key, Object value) { + public ValueWrapper putIfAbsent(@Nullable Object key, @Nullable Object value) { Element existingElement = this.cache.putIfAbsent(new Element(key, value)); return toValueWrapper(existingElement); } @Override - public void evict(Object key) { + public void evict(@Nullable Object key) { this.cache.remove(key); } diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCache.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCache.java index c80330846e..2499ad4aa5 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCache.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCache.java @@ -22,6 +22,7 @@ import javax.cache.processor.EntryProcessorException; import javax.cache.processor.MutableEntry; import org.springframework.cache.support.AbstractValueAdaptingCache; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -75,7 +76,7 @@ public class JCacheCache extends AbstractValueAdaptingCache { } @Override - public T get(Object key, Callable valueLoader) { + public T get(@Nullable Object key, Callable valueLoader) { try { return this.cache.invoke(key, new ValueLoaderEntryProcessor(), valueLoader); } @@ -85,18 +86,18 @@ public class JCacheCache extends AbstractValueAdaptingCache { } @Override - public void put(Object key, Object value) { + public void put(@Nullable Object key, @Nullable Object value) { this.cache.put(key, toStoreValue(value)); } @Override - public ValueWrapper putIfAbsent(Object key, Object value) { + public ValueWrapper putIfAbsent(@Nullable Object key, @Nullable Object value) { boolean set = this.cache.putIfAbsent(key, toStoreValue(value)); return (set ? null : get(key)); } @Override - public void evict(Object key) { + public void evict(@Nullable Object key) { this.cache.remove(key); } diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheManagerFactoryBean.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheManagerFactoryBean.java index 1b58aa9da3..9fa6325ab5 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheManagerFactoryBean.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheManagerFactoryBean.java @@ -69,7 +69,7 @@ public class JCacheManagerFactoryBean } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/config/AbstractJCacheConfiguration.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/config/AbstractJCacheConfiguration.java index 74fe3f946f..3b34cdb79a 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/config/AbstractJCacheConfiguration.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/config/AbstractJCacheConfiguration.java @@ -25,6 +25,7 @@ import org.springframework.cache.jcache.interceptor.JCacheOperationSource; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Role; +import org.springframework.lang.Nullable; /** * Abstract JSR-107 specific {@code @Configuration} class providing common @@ -40,7 +41,7 @@ public class AbstractJCacheConfiguration extends AbstractCachingConfiguration { protected CacheResolver exceptionCacheResolver; @Override - protected void useCachingConfigurer(CachingConfigurer config) { + protected void useCachingConfigurer(@Nullable CachingConfigurer config) { super.useCachingConfigurer(config); if (config instanceof JCacheConfigurer) { this.exceptionCacheResolver = ((JCacheConfigurer) config).exceptionCacheResolver(); diff --git a/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java b/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java index a7c843ddb6..ab94524111 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java +++ b/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java @@ -19,6 +19,7 @@ package org.springframework.cache.transaction; import java.util.concurrent.Callable; import org.springframework.cache.Cache; +import org.springframework.lang.Nullable; import org.springframework.transaction.support.TransactionSynchronizationAdapter; import org.springframework.transaction.support.TransactionSynchronizationManager; import org.springframework.util.Assert; @@ -71,22 +72,22 @@ public class TransactionAwareCacheDecorator implements Cache { } @Override - public ValueWrapper get(Object key) { + public ValueWrapper get(@Nullable Object key) { return this.targetCache.get(key); } @Override - public T get(Object key, Class type) { + public T get(@Nullable Object key, Class type) { return this.targetCache.get(key, type); } @Override - public T get(Object key, Callable valueLoader) { + public T get(@Nullable Object key, Callable valueLoader) { return this.targetCache.get(key, valueLoader); } @Override - public void put(final Object key, final Object value) { + public void put(@Nullable final Object key, @Nullable final Object value) { if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override @@ -101,12 +102,12 @@ public class TransactionAwareCacheDecorator implements Cache { } @Override - public ValueWrapper putIfAbsent(final Object key, final Object value) { + public ValueWrapper putIfAbsent(@Nullable final Object key, @Nullable final Object value) { return this.targetCache.putIfAbsent(key, value); } @Override - public void evict(final Object key) { + public void evict(@Nullable final Object key) { if (TransactionSynchronizationManager.isSynchronizationActive()) { TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() { @Override diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java index 4252316ca4..1410f2f685 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java @@ -35,6 +35,7 @@ import org.springframework.beans.factory.BeanNameAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.support.ArgumentConvertingMethodInvoker; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.MethodInvoker; @@ -141,7 +142,7 @@ public class MethodInvokingJobDetailFactoryBean extends ArgumentConvertingMethod } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/cache/annotation/AbstractCachingConfiguration.java b/spring-context/src/main/java/org/springframework/cache/annotation/AbstractCachingConfiguration.java index 6ef7b0d95d..fa2421a04c 100644 --- a/spring-context/src/main/java/org/springframework/cache/annotation/AbstractCachingConfiguration.java +++ b/spring-context/src/main/java/org/springframework/cache/annotation/AbstractCachingConfiguration.java @@ -27,6 +27,7 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportAware; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; /** @@ -80,7 +81,7 @@ public abstract class AbstractCachingConfiguration implements ImportAware { /** * Extract the configuration from the nominated {@link CachingConfigurer}. */ - protected void useCachingConfigurer(CachingConfigurer config) { + protected void useCachingConfigurer(@Nullable CachingConfigurer config) { this.cacheManager = config.cacheManager(); this.cacheResolver = config.cacheResolver(); this.keyGenerator = config.keyGenerator(); diff --git a/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java b/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java index 4ea72404b1..29da9de8a5 100644 --- a/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java +++ b/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java @@ -137,7 +137,8 @@ public class ConcurrentMapCache extends AbstractValueAdaptingCache { @SuppressWarnings("unchecked") @Override - public T get(Object key, Callable valueLoader) { + @Nullable + public T get(@Nullable Object key, Callable valueLoader) { if (this.store.containsKey(key)) { return (T) get(key).get(); } @@ -154,18 +155,19 @@ public class ConcurrentMapCache extends AbstractValueAdaptingCache { } @Override - public void put(Object key, Object value) { + public void put(@Nullable Object key, @Nullable Object value) { this.store.put(key, toStoreValue(value)); } @Override - public ValueWrapper putIfAbsent(Object key, Object value) { + @Nullable + public ValueWrapper putIfAbsent(@Nullable Object key, @Nullable Object value) { Object existing = this.store.putIfAbsent(key, toStoreValue(value)); return toValueWrapper(existing); } @Override - public void evict(Object key) { + public void evict(@Nullable Object key) { this.store.remove(key); } @@ -175,7 +177,7 @@ public class ConcurrentMapCache extends AbstractValueAdaptingCache { } @Override - protected Object toStoreValue(Object userValue) { + protected Object toStoreValue(@Nullable Object userValue) { Object storeValue = super.toStoreValue(userValue); if (this.serialization != null) { try { @@ -203,7 +205,7 @@ public class ConcurrentMapCache extends AbstractValueAdaptingCache { } @Override - protected Object fromStoreValue(Object storeValue) { + protected Object fromStoreValue(@Nullable Object storeValue) { if (this.serialization != null) { try { return super.fromStoreValue(deserializeValue(storeValue)); diff --git a/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCacheManager.java b/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCacheManager.java index 781448b7c9..4b70c79cc8 100644 --- a/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCacheManager.java +++ b/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCacheManager.java @@ -146,7 +146,7 @@ public class ConcurrentMapCacheManager implements CacheManager, BeanClassLoaderA } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.serialization = new SerializationDelegate(classLoader); // Need to recreate all Cache instances with new ClassLoader in store-by-value mode... if (isStoreByValue()) { diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractCacheResolver.java b/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractCacheResolver.java index e54fe17eab..86ca64486d 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractCacheResolver.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractCacheResolver.java @@ -95,6 +95,6 @@ public abstract class AbstractCacheResolver implements CacheResolver, Initializi * @return the cache name(s) to resolve or {@code null} if no cache should be resolved */ @Nullable - protected abstract Collection getCacheNames(CacheOperationInvocationContext context); + protected abstract Collection getCacheNames(@Nullable CacheOperationInvocationContext context); } diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractFallbackCacheOperationSource.java b/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractFallbackCacheOperationSource.java index 2a7fe44356..df4c16a29d 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractFallbackCacheOperationSource.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/AbstractFallbackCacheOperationSource.java @@ -83,7 +83,7 @@ public abstract class AbstractFallbackCacheOperationSource implements CacheOpera * is not cacheable */ @Override - public Collection getCacheOperations(Method method, Class targetClass) { + public Collection getCacheOperations(Method method, @Nullable Class targetClass) { if (method.getDeclaringClass() == Object.class) { return null; } diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperationSourcePointcut.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperationSourcePointcut.java index 6a245b055b..87b8aaecc0 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperationSourcePointcut.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheOperationSourcePointcut.java @@ -35,7 +35,7 @@ import org.springframework.util.ObjectUtils; abstract class CacheOperationSourcePointcut extends StaticMethodMatcherPointcut implements Serializable { @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { CacheOperationSource cas = getCacheOperationSource(); return (cas != null && !CollectionUtils.isEmpty(cas.getCacheOperations(method, targetClass))); } diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CompositeCacheOperationSource.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CompositeCacheOperationSource.java index 4bf1abe3fa..a4fe20c588 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CompositeCacheOperationSource.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CompositeCacheOperationSource.java @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -54,7 +55,7 @@ public class CompositeCacheOperationSource implements CacheOperationSource, Seri } @Override - public Collection getCacheOperations(Method method, Class targetClass) { + public Collection getCacheOperations(Method method, @Nullable Class targetClass) { Collection ops = null; for (CacheOperationSource source : this.cacheOperationSources) { diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/NameMatchCacheOperationSource.java b/spring-context/src/main/java/org/springframework/cache/interceptor/NameMatchCacheOperationSource.java index c4371e49cf..c525caf436 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/NameMatchCacheOperationSource.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/NameMatchCacheOperationSource.java @@ -25,6 +25,7 @@ import java.util.Map; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; import org.springframework.util.PatternMatchUtils; @@ -76,7 +77,7 @@ public class NameMatchCacheOperationSource implements CacheOperationSource, Seri } @Override - public Collection getCacheOperations(Method method, Class targetClass) { + public Collection getCacheOperations(Method method, @Nullable Class targetClass) { // look for direct name match String methodName = method.getName(); Collection ops = this.nameMap.get(methodName); diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java b/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java index 06673979bb..a854c70d0d 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.Collection; import org.springframework.cache.CacheManager; +import org.springframework.lang.Nullable; /** * A {@link CacheResolver} that forces the resolution to a configurable @@ -50,7 +51,7 @@ public class NamedCacheResolver extends AbstractCacheResolver { } @Override - protected Collection getCacheNames(CacheOperationInvocationContext context) { + protected Collection getCacheNames(@Nullable CacheOperationInvocationContext context) { return this.cacheNames; } diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/SimpleCacheResolver.java b/spring-context/src/main/java/org/springframework/cache/interceptor/SimpleCacheResolver.java index 1b40d2d121..4145bbc7da 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/SimpleCacheResolver.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/SimpleCacheResolver.java @@ -20,6 +20,7 @@ import java.util.Collection; import org.springframework.cache.Cache; import org.springframework.cache.CacheManager; +import org.springframework.lang.Nullable; /** * A simple {@link CacheResolver} that resolves the {@link Cache} instance(s) @@ -40,7 +41,7 @@ public class SimpleCacheResolver extends AbstractCacheResolver { } @Override - protected Collection getCacheNames(CacheOperationInvocationContext context) { + protected Collection getCacheNames(@Nullable CacheOperationInvocationContext context) { return context.getOperation().getCacheNames(); } diff --git a/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java b/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java index d70b9ed94a..e1129eca24 100644 --- a/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java +++ b/spring-context/src/main/java/org/springframework/cache/support/AbstractValueAdaptingCache.java @@ -53,14 +53,16 @@ public abstract class AbstractValueAdaptingCache implements Cache { } @Override - public ValueWrapper get(Object key) { + @Nullable + public ValueWrapper get(@Nullable Object key) { Object value = lookup(key); return toValueWrapper(value); } @Override @SuppressWarnings("unchecked") - public T get(Object key, Class type) { + @Nullable + public T get(@Nullable Object key, Class type) { Object value = fromStoreValue(lookup(key)); if (value != null && type != null && !type.isInstance(value)) { throw new IllegalStateException("Cached value is not of required type [" + type.getName() + "]: " + value); @@ -115,6 +117,7 @@ public abstract class AbstractValueAdaptingCache implements Cache { * @param storeValue the original value * @return the wrapped value */ + @Nullable protected Cache.ValueWrapper toValueWrapper(Object storeValue) { return (storeValue != null ? new SimpleValueWrapper(fromStoreValue(storeValue)) : null); } diff --git a/spring-context/src/main/java/org/springframework/cache/support/NoOpCache.java b/spring-context/src/main/java/org/springframework/cache/support/NoOpCache.java index eab581da25..edd2d6dbb5 100644 --- a/spring-context/src/main/java/org/springframework/cache/support/NoOpCache.java +++ b/spring-context/src/main/java/org/springframework/cache/support/NoOpCache.java @@ -19,6 +19,7 @@ package org.springframework.cache.support; import java.util.concurrent.Callable; import org.springframework.cache.Cache; +import org.springframework.lang.Nullable; /** * A no operation {@link Cache} implementation suitable @@ -47,21 +48,21 @@ public class NoOpCache implements Cache { } @Override - public void evict(Object key) { + public void evict(@Nullable Object key) { } @Override - public ValueWrapper get(Object key) { + public ValueWrapper get(@Nullable Object key) { return null; } @Override - public T get(Object key, Class type) { + public T get(@Nullable Object key, Class type) { return null; } @Override - public T get(Object key, Callable valueLoader) { + public T get(@Nullable Object key, Callable valueLoader) { try { return valueLoader.call(); } @@ -81,11 +82,12 @@ public class NoOpCache implements Cache { } @Override - public void put(Object key, Object value) { + public void put(@Nullable Object key, @Nullable Object value) { } @Override - public ValueWrapper putIfAbsent(Object key, Object value) { + @Nullable + public ValueWrapper putIfAbsent(@Nullable Object key, @Nullable Object value) { return null; } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java index 1f67a31a58..13375daf72 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotationConfigApplicationContext.java @@ -214,7 +214,7 @@ public class AnnotationConfigApplicationContext extends GenericApplicationContex } @Override - public void registerBean(String beanName, Class beanClass, Supplier supplier, + public void registerBean(@Nullable String beanName, @Nullable Class beanClass, Supplier supplier, BeanDefinitionCustomizer... customizers) { this.reader.doRegisterBean(beanClass, supplier, beanName, null, customizers); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java index 45fbd2f76d..dbfe835a07 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassPostProcessor.java @@ -61,6 +61,7 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; import org.springframework.core.type.classreading.CachingMetadataReaderFactory; import org.springframework.core.type.classreading.MetadataReaderFactory; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -201,7 +202,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; if (!this.setMetadataReaderFactoryCalled) { this.metadataReaderFactory = new CachingMetadataReaderFactory(beanClassLoader); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/LoadTimeWeavingConfiguration.java b/spring-context/src/main/java/org/springframework/context/annotation/LoadTimeWeavingConfiguration.java index 5cab2a7eee..b01feb0d51 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/LoadTimeWeavingConfiguration.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/LoadTimeWeavingConfiguration.java @@ -26,6 +26,7 @@ import org.springframework.context.weaving.DefaultContextLoadTimeWeaver; import org.springframework.core.annotation.AnnotationAttributes; import org.springframework.core.type.AnnotationMetadata; import org.springframework.instrument.classloading.LoadTimeWeaver; +import org.springframework.lang.Nullable; /** * {@code @Configuration} class that registers a {@link LoadTimeWeaver} bean. @@ -64,7 +65,7 @@ public class LoadTimeWeavingConfiguration implements ImportAware, BeanClassLoade } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java index 51291a4236..135ea76bc9 100644 --- a/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/context/config/MBeanExportBeanDefinitionParser.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.jmx.export.annotation.AnnotationMBeanExporter; import org.springframework.jmx.support.RegistrationPolicy; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -60,7 +61,7 @@ class MBeanExportBeanDefinitionParser extends AbstractBeanDefinitionParser { } @Override - protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + protected AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(AnnotationMBeanExporter.class); // Mark as infrastructure bean and attach source location. diff --git a/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java index f9dc36848c..b57ed44692 100644 --- a/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/context/config/MBeanServerBeanDefinitionParser.java @@ -63,7 +63,7 @@ class MBeanServerBeanDefinitionParser extends AbstractBeanDefinitionParser { } @Override - protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + protected AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext) { String agentId = element.getAttribute(AGENT_ID_ATTRIBUTE); if (StringUtils.hasText(agentId)) { RootBeanDefinition bd = new RootBeanDefinition(MBeanServerFactoryBean.class); diff --git a/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java b/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java index 81577cb77f..a10a76876b 100644 --- a/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java +++ b/spring-context/src/main/java/org/springframework/context/event/AbstractApplicationEventMulticaster.java @@ -33,6 +33,7 @@ import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.ResolvableType; import org.springframework.core.annotation.AnnotationAwareOrderComparator; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -71,7 +72,7 @@ public abstract class AbstractApplicationEventMulticaster @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java b/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java index 72ae81ec5a..c2984020ea 100644 --- a/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java +++ b/spring-context/src/main/java/org/springframework/context/event/SimpleApplicationEventMulticaster.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.core.ResolvableType; +import org.springframework.lang.Nullable; import org.springframework.util.ErrorHandler; /** @@ -123,7 +124,7 @@ public class SimpleApplicationEventMulticaster extends AbstractApplicationEventM } @Override - public void multicastEvent(final ApplicationEvent event, ResolvableType eventType) { + public void multicastEvent(final ApplicationEvent event, @Nullable ResolvableType eventType) { ResolvableType type = (eventType != null ? eventType : resolveDefaultEventType(event)); for (final ApplicationListener listener : getApplicationListeners(event, type)) { Executor executor = getTaskExecutor(); diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java index f08e59ab2c..db16a5567a 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractApplicationContext.java @@ -76,6 +76,7 @@ import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.ReflectionUtils; @@ -461,7 +462,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader * @see ConfigurableEnvironment#merge(ConfigurableEnvironment) */ @Override - public void setParent(ApplicationContext parent) { + public void setParent(@Nullable ApplicationContext parent) { this.parent = parent; if (parent != null) { Environment parentEnvironment = parent.getEnvironment(); @@ -844,7 +845,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader if (!beanFactory.hasEmbeddedValueResolver()) { beanFactory.addEmbeddedValueResolver(new StringValueResolver() { @Override - public String resolveStringValue(String strVal) { + public String resolveStringValue(@Nullable String strVal) { return getEnvironment().resolvePlaceholders(strVal); } }); @@ -1081,7 +1082,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader } @Override - public T getBean(String name, Class requiredType) throws BeansException { + public T getBean(String name, @Nullable Class requiredType) throws BeansException { assertBeanFactoryActive(); return getBeanFactory().getBean(name, requiredType); } @@ -1165,31 +1166,31 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader } @Override - public String[] getBeanNamesForType(ResolvableType type) { + public String[] getBeanNamesForType(@Nullable ResolvableType type) { assertBeanFactoryActive(); return getBeanFactory().getBeanNamesForType(type); } @Override - public String[] getBeanNamesForType(Class type) { + public String[] getBeanNamesForType(@Nullable Class type) { assertBeanFactoryActive(); return getBeanFactory().getBeanNamesForType(type); } @Override - public String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit) { + public String[] getBeanNamesForType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) { assertBeanFactoryActive(); return getBeanFactory().getBeanNamesForType(type, includeNonSingletons, allowEagerInit); } @Override - public Map getBeansOfType(Class type) throws BeansException { + public Map getBeansOfType(@Nullable Class type) throws BeansException { assertBeanFactoryActive(); return getBeanFactory().getBeansOfType(type); } @Override - public Map getBeansOfType(Class type, boolean includeNonSingletons, boolean allowEagerInit) + public Map getBeansOfType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException { assertBeanFactoryActive(); @@ -1249,12 +1250,12 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader //--------------------------------------------------------------------- @Override - public String getMessage(String code, Object args[], String defaultMessage, Locale locale) { + public String getMessage(String code, @Nullable Object args[], String defaultMessage, Locale locale) { return getMessageSource().getMessage(code, args, defaultMessage, locale); } @Override - public String getMessage(String code, Object args[], Locale locale) throws NoSuchMessageException { + public String getMessage(String code, @Nullable Object args[], Locale locale) throws NoSuchMessageException { return getMessageSource().getMessage(code, args, locale); } diff --git a/spring-context/src/main/java/org/springframework/context/support/AbstractMessageSource.java b/spring-context/src/main/java/org/springframework/context/support/AbstractMessageSource.java index 307cd0b23a..ff663059bf 100644 --- a/spring-context/src/main/java/org/springframework/context/support/AbstractMessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/support/AbstractMessageSource.java @@ -72,7 +72,7 @@ public abstract class AbstractMessageSource extends MessageSourceSupport impleme @Override - public void setParentMessageSource(MessageSource parent) { + public void setParentMessageSource(@Nullable MessageSource parent) { this.parentMessageSource = parent; } @@ -134,7 +134,7 @@ public abstract class AbstractMessageSource extends MessageSourceSupport impleme @Override - public final String getMessage(String code, Object[] args, String defaultMessage, Locale locale) { + public final String getMessage(String code, @Nullable Object[] args, String defaultMessage, Locale locale) { String msg = getMessageInternal(code, args, locale); if (msg != null) { return msg; @@ -149,7 +149,7 @@ public abstract class AbstractMessageSource extends MessageSourceSupport impleme } @Override - public final String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException { + public final String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException { String msg = getMessageInternal(code, args, locale); if (msg != null) { return msg; diff --git a/spring-context/src/main/java/org/springframework/context/support/DelegatingMessageSource.java b/spring-context/src/main/java/org/springframework/context/support/DelegatingMessageSource.java index 6526cc957a..c34b118a9c 100644 --- a/spring-context/src/main/java/org/springframework/context/support/DelegatingMessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/support/DelegatingMessageSource.java @@ -22,6 +22,7 @@ import org.springframework.context.HierarchicalMessageSource; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceResolvable; import org.springframework.context.NoSuchMessageException; +import org.springframework.lang.Nullable; /** * Empty {@link MessageSource} that delegates all calls to the parent MessageSource. @@ -40,7 +41,7 @@ public class DelegatingMessageSource extends MessageSourceSupport implements Hie @Override - public void setParentMessageSource(MessageSource parent) { + public void setParentMessageSource(@Nullable MessageSource parent) { this.parentMessageSource = parent; } @@ -51,7 +52,7 @@ public class DelegatingMessageSource extends MessageSourceSupport implements Hie @Override - public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) { + public String getMessage(String code, @Nullable Object[] args, String defaultMessage, Locale locale) { if (this.parentMessageSource != null) { return this.parentMessageSource.getMessage(code, args, defaultMessage, locale); } @@ -61,7 +62,7 @@ public class DelegatingMessageSource extends MessageSourceSupport implements Hie } @Override - public String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException { + public String getMessage(String code, @Nullable Object[] args, Locale locale) throws NoSuchMessageException { if (this.parentMessageSource != null) { return this.parentMessageSource.getMessage(code, args, locale); } diff --git a/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java index a8ef05ed80..f02d4f8ced 100644 --- a/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/GenericApplicationContext.java @@ -150,7 +150,7 @@ public class GenericApplicationContext extends AbstractApplicationContext implem * @see org.springframework.beans.factory.config.ConfigurableBeanFactory#setParentBeanFactory */ @Override - public void setParent(ApplicationContext parent) { + public void setParent(@Nullable ApplicationContext parent) { super.setParent(parent); this.beanFactory.setParentBeanFactory(getInternalParentBeanFactory()); } @@ -238,7 +238,7 @@ public class GenericApplicationContext extends AbstractApplicationContext implem } @Override - public void setClassLoader(ClassLoader classLoader) { + public void setClassLoader(@Nullable ClassLoader classLoader) { super.setClassLoader(classLoader); this.customClassLoader = true; } diff --git a/spring-context/src/main/java/org/springframework/context/support/PropertySourcesPlaceholderConfigurer.java b/spring-context/src/main/java/org/springframework/context/support/PropertySourcesPlaceholderConfigurer.java index 4a12a31e66..70b3c4f2d8 100644 --- a/spring-context/src/main/java/org/springframework/context/support/PropertySourcesPlaceholderConfigurer.java +++ b/spring-context/src/main/java/org/springframework/context/support/PropertySourcesPlaceholderConfigurer.java @@ -31,6 +31,7 @@ import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.env.PropertySource; import org.springframework.core.env.PropertySources; import org.springframework.core.env.PropertySourcesPropertyResolver; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringValueResolver; @@ -166,7 +167,8 @@ public class PropertySourcesPlaceholderConfigurer extends PlaceholderConfigurerS StringValueResolver valueResolver = new StringValueResolver() { @Override - public String resolveStringValue(String strVal) { + @Nullable + public String resolveStringValue(@Nullable String strVal) { String resolved = (ignoreUnresolvablePlaceholders ? propertyResolver.resolvePlaceholders(strVal) : propertyResolver.resolveRequiredPlaceholders(strVal)); diff --git a/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java b/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java index d70b21b633..fc15d5f0f1 100644 --- a/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java @@ -114,7 +114,7 @@ public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSou } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = (classLoader != null ? classLoader : ClassUtils.getDefaultClassLoader()); } diff --git a/spring-context/src/main/java/org/springframework/context/weaving/AspectJWeavingEnabler.java b/spring-context/src/main/java/org/springframework/context/weaving/AspectJWeavingEnabler.java index ec5627bf07..fb9a92a0e3 100644 --- a/spring-context/src/main/java/org/springframework/context/weaving/AspectJWeavingEnabler.java +++ b/spring-context/src/main/java/org/springframework/context/weaving/AspectJWeavingEnabler.java @@ -53,7 +53,7 @@ public class AspectJWeavingEnabler @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java b/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java index 1299a21652..b599b10e4e 100644 --- a/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java +++ b/spring-context/src/main/java/org/springframework/context/weaving/DefaultContextLoadTimeWeaver.java @@ -69,7 +69,7 @@ public class DefaultContextLoadTimeWeaver implements LoadTimeWeaver, BeanClassLo } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { LoadTimeWeaver serverSpecificLoadTimeWeaver = createServerSpecificLoadTimeWeaver(classLoader); if (serverSpecificLoadTimeWeaver != null) { if (logger.isInfoEnabled()) { diff --git a/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java index 601e7632d1..723417556f 100644 --- a/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/ejb/access/LocalStatelessSessionProxyFactoryBean.java @@ -21,6 +21,7 @@ import javax.naming.NamingException; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.FactoryBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -78,7 +79,7 @@ public class LocalStatelessSessionProxyFactoryBean extends LocalSlsbInvokerInter } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java index f556f209a5..e3122c9c92 100644 --- a/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/ejb/access/SimpleRemoteStatelessSessionProxyFactoryBean.java @@ -21,6 +21,7 @@ import javax.naming.NamingException; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.FactoryBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -92,7 +93,7 @@ public class SimpleRemoteStatelessSessionProxyFactoryBean extends SimpleRemoteSl } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/format/support/FormattingConversionService.java b/spring-context/src/main/java/org/springframework/format/support/FormattingConversionService.java index 464078a5a8..55fd7e638b 100644 --- a/spring-context/src/main/java/org/springframework/format/support/FormattingConversionService.java +++ b/spring-context/src/main/java/org/springframework/format/support/FormattingConversionService.java @@ -36,6 +36,7 @@ import org.springframework.format.Formatter; import org.springframework.format.FormatterRegistry; import org.springframework.format.Parser; import org.springframework.format.Printer; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; import org.springframework.util.StringValueResolver; @@ -145,7 +146,7 @@ public class FormattingConversionService extends GenericConversionService @Override @SuppressWarnings("unchecked") - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return ""; } @@ -186,7 +187,7 @@ public class FormattingConversionService extends GenericConversionService } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { String text = (String) source; if (!StringUtils.hasText(text)) { return null; @@ -247,7 +248,7 @@ public class FormattingConversionService extends GenericConversionService @Override @SuppressWarnings("unchecked") - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { Annotation ann = sourceType.getAnnotation(this.annotationType); if (ann == null) { throw new IllegalStateException( @@ -301,7 +302,7 @@ public class FormattingConversionService extends GenericConversionService @Override @SuppressWarnings("unchecked") - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { Annotation ann = targetType.getAnnotation(this.annotationType); if (ann == null) { throw new IllegalStateException( diff --git a/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java b/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java index 329c3dc5a3..241d7e141d 100644 --- a/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java +++ b/spring-context/src/main/java/org/springframework/jmx/access/MBeanClientInterceptor.java @@ -231,7 +231,7 @@ public class MBeanClientInterceptor } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java index fff2885f8f..2a5b900f5c 100644 --- a/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java @@ -21,6 +21,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.jmx.MBeanServerNotFoundException; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -67,7 +68,7 @@ public class MBeanProxyFactoryBean extends MBeanClientInterceptor } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java b/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java index 32e09d9d35..3f177f08e6 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/MBeanExporter.java @@ -386,7 +386,7 @@ public class MBeanExporter extends MBeanRegistrationSupport implements MBeanExpo } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/jmx/export/assembler/InterfaceBasedMBeanInfoAssembler.java b/spring-context/src/main/java/org/springframework/jmx/export/assembler/InterfaceBasedMBeanInfoAssembler.java index c39dd3c4d6..7a5bf98d87 100644 --- a/spring-context/src/main/java/org/springframework/jmx/export/assembler/InterfaceBasedMBeanInfoAssembler.java +++ b/spring-context/src/main/java/org/springframework/jmx/export/assembler/InterfaceBasedMBeanInfoAssembler.java @@ -26,6 +26,7 @@ import java.util.Properties; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.StringUtils; @@ -110,7 +111,7 @@ public class InterfaceBasedMBeanInfoAssembler extends AbstractConfigurableMBeanI } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-context/src/main/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBean.java b/spring-context/src/main/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBean.java index 0872fc3052..633111dfe4 100644 --- a/spring-context/src/main/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/jmx/support/MBeanServerConnectionFactoryBean.java @@ -33,6 +33,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.DisposableBean; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; @@ -102,7 +103,7 @@ public class MBeanServerConnectionFactoryBean } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java b/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java index dc22f0fb2d..da9f4eda52 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java @@ -33,6 +33,7 @@ import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -178,7 +179,7 @@ public class JndiObjectFactoryBean extends JndiObjectLocator } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java index 76d9f3cffc..94c28f2f9d 100644 --- a/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java +++ b/spring-context/src/main/java/org/springframework/jndi/support/SimpleJndiBeanFactory.java @@ -32,6 +32,7 @@ import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.core.ResolvableType; import org.springframework.jndi.JndiLocatorSupport; import org.springframework.jndi.TypeMismatchNamingException; +import org.springframework.lang.Nullable; /** * Simple JNDI-based implementation of Spring's @@ -106,7 +107,7 @@ public class SimpleJndiBeanFactory extends JndiLocatorSupport implements BeanFac } @Override - public T getBean(String name, Class requiredType) throws BeansException { + public T getBean(String name, @Nullable Class requiredType) throws BeansException { try { if (isSingleton(name)) { return doGetSingleton(name, requiredType); diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/MethodInvokingRunnable.java b/spring-context/src/main/java/org/springframework/scheduling/support/MethodInvokingRunnable.java index d835c37be3..d32365f743 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/MethodInvokingRunnable.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/MethodInvokingRunnable.java @@ -24,6 +24,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.support.ArgumentConvertingMethodInvoker; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -46,7 +47,7 @@ public class MethodInvokingRunnable extends ArgumentConvertingMethodInvoker @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptEvaluator.java b/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptEvaluator.java index e1ff67f686..875a7db15f 100644 --- a/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptEvaluator.java +++ b/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptEvaluator.java @@ -24,6 +24,7 @@ import bsh.EvalError; import bsh.Interpreter; import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.lang.Nullable; import org.springframework.scripting.ScriptCompilationException; import org.springframework.scripting.ScriptEvaluator; import org.springframework.scripting.ScriptSource; @@ -56,18 +57,20 @@ public class BshScriptEvaluator implements ScriptEvaluator, BeanClassLoaderAware @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.classLoader = classLoader; } @Override + @Nullable public Object evaluate(ScriptSource script) { return evaluate(script, null); } @Override - public Object evaluate(ScriptSource script, Map arguments) { + @Nullable + public Object evaluate(ScriptSource script, @Nullable Map arguments) { try { Interpreter interpreter = new Interpreter(); interpreter.setClassLoader(this.classLoader); diff --git a/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptFactory.java b/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptFactory.java index 4f4b7710e0..638c853de4 100644 --- a/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptFactory.java +++ b/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptFactory.java @@ -90,7 +90,7 @@ public class BshScriptFactory implements ScriptFactory, BeanClassLoaderAware { @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } @@ -118,7 +118,7 @@ public class BshScriptFactory implements ScriptFactory, BeanClassLoaderAware { * @see BshScriptUtils#createBshObject(String, Class[], ClassLoader) */ @Override - public Object getScriptedObject(ScriptSource scriptSource, Class... actualInterfaces) + public Object getScriptedObject(ScriptSource scriptSource, @Nullable Class... actualInterfaces) throws IOException, ScriptCompilationException { Class clazz; diff --git a/spring-context/src/main/java/org/springframework/scripting/config/ScriptBeanDefinitionParser.java b/spring-context/src/main/java/org/springframework/scripting/config/ScriptBeanDefinitionParser.java index 70f026bf00..850324788c 100644 --- a/spring-context/src/main/java/org/springframework/scripting/config/ScriptBeanDefinitionParser.java +++ b/spring-context/src/main/java/org/springframework/scripting/config/ScriptBeanDefinitionParser.java @@ -104,7 +104,7 @@ class ScriptBeanDefinitionParser extends AbstractBeanDefinitionParser { */ @Override @SuppressWarnings("deprecation") - protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + protected AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext) { // Engine attribute only supported for String engine = element.getAttribute(ENGINE_ATTRIBUTE); diff --git a/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptEvaluator.java b/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptEvaluator.java index e94b9d400a..d50b8c451d 100644 --- a/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptEvaluator.java +++ b/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptEvaluator.java @@ -26,6 +26,7 @@ import org.codehaus.groovy.control.CompilerConfiguration; import org.codehaus.groovy.control.customizers.CompilationCustomizer; import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.lang.Nullable; import org.springframework.scripting.ScriptCompilationException; import org.springframework.scripting.ScriptEvaluator; import org.springframework.scripting.ScriptSource; @@ -90,18 +91,20 @@ public class GroovyScriptEvaluator implements ScriptEvaluator, BeanClassLoaderAw } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.classLoader = classLoader; } @Override + @Nullable public Object evaluate(ScriptSource script) { return evaluate(script, null); } @Override - public Object evaluate(ScriptSource script, Map arguments) { + @Nullable + public Object evaluate(ScriptSource script, @Nullable Map arguments) { GroovyShell groovyShell = new GroovyShell( this.classLoader, new Binding(arguments), this.compilerConfiguration); try { diff --git a/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptFactory.java b/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptFactory.java index ba9faf6408..c026b5455d 100644 --- a/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptFactory.java +++ b/spring-context/src/main/java/org/springframework/scripting/groovy/GroovyScriptFactory.java @@ -151,7 +151,7 @@ public class GroovyScriptFactory implements ScriptFactory, BeanFactoryAware, Bea } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.groovyClassLoader = buildGroovyClassLoader(classLoader); } @@ -208,7 +208,7 @@ public class GroovyScriptFactory implements ScriptFactory, BeanFactoryAware, Bea * @see groovy.lang.GroovyClassLoader */ @Override - public Object getScriptedObject(ScriptSource scriptSource, Class... actualInterfaces) + public Object getScriptedObject(ScriptSource scriptSource, @Nullable Class... actualInterfaces) throws IOException, ScriptCompilationException { synchronized (this.scriptClassMonitor) { diff --git a/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java b/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java index 034b84c8be..b808f1be8d 100644 --- a/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/scripting/support/ScriptFactoryPostProcessor.java @@ -200,7 +200,7 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptEvaluator.java b/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptEvaluator.java index ee4c0f3163..da03e7a44d 100644 --- a/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptEvaluator.java +++ b/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptEvaluator.java @@ -25,6 +25,7 @@ import javax.script.ScriptException; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.scripting.ScriptCompilationException; import org.springframework.scripting.ScriptEvaluator; import org.springframework.scripting.ScriptSource; @@ -108,7 +109,7 @@ public class StandardScriptEvaluator implements ScriptEvaluator, BeanClassLoader } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { if (this.scriptEngineManager == null) { this.scriptEngineManager = new ScriptEngineManager(classLoader); } @@ -121,7 +122,7 @@ public class StandardScriptEvaluator implements ScriptEvaluator, BeanClassLoader } @Override - public Object evaluate(ScriptSource script, Map argumentBindings) { + public Object evaluate(ScriptSource script, @Nullable Map argumentBindings) { ScriptEngine engine = getScriptEngine(script); try { if (CollectionUtils.isEmpty(argumentBindings)) { diff --git a/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptFactory.java b/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptFactory.java index a823c54f3d..06a004ecd4 100644 --- a/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptFactory.java +++ b/spring-context/src/main/java/org/springframework/scripting/support/StandardScriptFactory.java @@ -23,6 +23,7 @@ import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import org.springframework.beans.factory.BeanClassLoaderAware; +import org.springframework.lang.Nullable; import org.springframework.scripting.ScriptCompilationException; import org.springframework.scripting.ScriptFactory; import org.springframework.scripting.ScriptSource; @@ -107,7 +108,7 @@ public class StandardScriptFactory implements ScriptFactory, BeanClassLoaderAwar @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } @@ -131,7 +132,7 @@ public class StandardScriptFactory implements ScriptFactory, BeanClassLoaderAwar * Load and parse the script via JSR-223's ScriptEngine. */ @Override - public Object getScriptedObject(ScriptSource scriptSource, Class... actualInterfaces) + public Object getScriptedObject(ScriptSource scriptSource, @Nullable Class... actualInterfaces) throws IOException, ScriptCompilationException { Object script = evaluateScript(scriptSource); diff --git a/spring-context/src/main/java/org/springframework/ui/ConcurrentModel.java b/spring-context/src/main/java/org/springframework/ui/ConcurrentModel.java index d564b396f8..d216bf2453 100644 --- a/spring-context/src/main/java/org/springframework/ui/ConcurrentModel.java +++ b/spring-context/src/main/java/org/springframework/ui/ConcurrentModel.java @@ -85,7 +85,7 @@ public class ConcurrentModel extends ConcurrentHashMap implement * than for empty collections as is already done by JSTL tags. * @param attributeValue the model attribute value (never {@code null}) */ - public ConcurrentModel addAttribute(Object attributeValue) { + public ConcurrentModel addAttribute(@Nullable Object attributeValue) { Assert.notNull(attributeValue, "Model object must not be null"); if (attributeValue instanceof Collection && ((Collection) attributeValue).isEmpty()) { return this; diff --git a/spring-context/src/main/java/org/springframework/ui/ExtendedModelMap.java b/spring-context/src/main/java/org/springframework/ui/ExtendedModelMap.java index e65e2589b4..6d33f8baeb 100644 --- a/spring-context/src/main/java/org/springframework/ui/ExtendedModelMap.java +++ b/spring-context/src/main/java/org/springframework/ui/ExtendedModelMap.java @@ -19,6 +19,8 @@ package org.springframework.ui; import java.util.Collection; import java.util.Map; +import org.springframework.lang.Nullable; + /** * Subclass of {@link ModelMap} that implements the {@link Model} interface. * Java 5 specific like the {@code Model} interface itself. @@ -35,13 +37,13 @@ import java.util.Map; public class ExtendedModelMap extends ModelMap implements Model { @Override - public ExtendedModelMap addAttribute(String attributeName, Object attributeValue) { + public ExtendedModelMap addAttribute(String attributeName, @Nullable Object attributeValue) { super.addAttribute(attributeName, attributeValue); return this; } @Override - public ExtendedModelMap addAttribute(Object attributeValue) { + public ExtendedModelMap addAttribute(@Nullable Object attributeValue) { super.addAttribute(attributeValue); return this; } diff --git a/spring-context/src/main/java/org/springframework/ui/context/support/DelegatingThemeSource.java b/spring-context/src/main/java/org/springframework/ui/context/support/DelegatingThemeSource.java index 290754c719..fcd9fbe06c 100644 --- a/spring-context/src/main/java/org/springframework/ui/context/support/DelegatingThemeSource.java +++ b/spring-context/src/main/java/org/springframework/ui/context/support/DelegatingThemeSource.java @@ -16,6 +16,7 @@ package org.springframework.ui.context.support; +import org.springframework.lang.Nullable; import org.springframework.ui.context.HierarchicalThemeSource; import org.springframework.ui.context.Theme; import org.springframework.ui.context.ThemeSource; @@ -37,7 +38,7 @@ public class DelegatingThemeSource implements HierarchicalThemeSource { @Override - public void setParentThemeSource(ThemeSource parentThemeSource) { + public void setParentThemeSource(@Nullable ThemeSource parentThemeSource) { this.parentThemeSource = parentThemeSource; } diff --git a/spring-context/src/main/java/org/springframework/ui/context/support/ResourceBundleThemeSource.java b/spring-context/src/main/java/org/springframework/ui/context/support/ResourceBundleThemeSource.java index f91ec21f52..0b21003bae 100644 --- a/spring-context/src/main/java/org/springframework/ui/context/support/ResourceBundleThemeSource.java +++ b/spring-context/src/main/java/org/springframework/ui/context/support/ResourceBundleThemeSource.java @@ -26,6 +26,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.context.HierarchicalMessageSource; import org.springframework.context.MessageSource; import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.lang.Nullable; import org.springframework.ui.context.HierarchicalThemeSource; import org.springframework.ui.context.Theme; import org.springframework.ui.context.ThemeSource; @@ -61,7 +62,7 @@ public class ResourceBundleThemeSource implements HierarchicalThemeSource, BeanC @Override - public void setParentThemeSource(ThemeSource parent) { + public void setParentThemeSource(@Nullable ThemeSource parent) { this.parentThemeSource = parent; // Update existing Theme objects. @@ -115,7 +116,7 @@ public class ResourceBundleThemeSource implements HierarchicalThemeSource, BeanC } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } diff --git a/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java b/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java index 36ac77b9a7..649f746ced 100644 --- a/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java +++ b/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java @@ -27,6 +27,7 @@ import java.util.Map; import java.util.Set; import org.springframework.beans.PropertyEditorRegistry; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -91,12 +92,12 @@ public abstract class AbstractBindingResult extends AbstractErrors implements Bi @Override - public void reject(String errorCode, Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { addError(new ObjectError(getObjectName(), resolveMessageCodes(errorCode), errorArgs, defaultMessage)); } @Override - public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { if ("".equals(getNestedPath()) && !StringUtils.hasLength(field)) { // We're at the top of the nested object hierarchy, // so the present level is not a field but rather the top object. @@ -241,7 +242,7 @@ public abstract class AbstractBindingResult extends AbstractErrors implements Bi * @see #getActualFieldValue */ @Override - public Class getFieldType(String field) { + public Class getFieldType(@Nullable String field) { Object value = getActualFieldValue(fixedField(field)); if (value != null) { return value.getClass(); @@ -289,7 +290,7 @@ public abstract class AbstractBindingResult extends AbstractErrors implements Bi * editor lookup facility, if available. */ @Override - public PropertyEditor findEditor(String field, Class valueType) { + public PropertyEditor findEditor(@Nullable String field, @Nullable Class valueType) { PropertyEditorRegistry editorRegistry = getPropertyEditorRegistry(); if (editorRegistry != null) { Class valueTypeToUse = valueType; diff --git a/spring-context/src/main/java/org/springframework/validation/AbstractErrors.java b/spring-context/src/main/java/org/springframework/validation/AbstractErrors.java index 1881e18885..1718fcd873 100644 --- a/spring-context/src/main/java/org/springframework/validation/AbstractErrors.java +++ b/spring-context/src/main/java/org/springframework/validation/AbstractErrors.java @@ -23,6 +23,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Stack; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -43,7 +44,7 @@ public abstract class AbstractErrors implements Errors, Serializable { @Override - public void setNestedPath(String nestedPath) { + public void setNestedPath(@Nullable String nestedPath) { doSetNestedPath(nestedPath); this.nestedPathStack.clear(); } @@ -122,12 +123,12 @@ public abstract class AbstractErrors implements Errors, Serializable { } @Override - public void rejectValue(String field, String errorCode) { + public void rejectValue(@Nullable String field, String errorCode) { rejectValue(field, errorCode, null, null); } @Override - public void rejectValue(String field, String errorCode, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, String defaultMessage) { rejectValue(field, errorCode, null, defaultMessage); } @@ -213,7 +214,7 @@ public abstract class AbstractErrors implements Errors, Serializable { @Override - public Class getFieldType(String field) { + public Class getFieldType(@Nullable String field) { Object value = getFieldValue(field); return (value != null ? value.getClass() : null); } diff --git a/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java b/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java index e87b0df468..3e5b0bc9a5 100644 --- a/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java +++ b/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java @@ -87,7 +87,7 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul * @see #getPropertyAccessor() */ @Override - public Class getFieldType(String field) { + public Class getFieldType(@Nullable String field) { return getPropertyAccessor().getPropertyType(fixedField(field)); } @@ -149,7 +149,7 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul * if applicable. */ @Override - public PropertyEditor findEditor(String field, Class valueType) { + public PropertyEditor findEditor(@Nullable String field, @Nullable Class valueType) { Class valueTypeForLookup = valueType; if (valueTypeForLookup == null) { valueTypeForLookup = getFieldType(field); diff --git a/spring-context/src/main/java/org/springframework/validation/BindException.java b/spring-context/src/main/java/org/springframework/validation/BindException.java index fc3e8e00fa..6428455a09 100644 --- a/spring-context/src/main/java/org/springframework/validation/BindException.java +++ b/spring-context/src/main/java/org/springframework/validation/BindException.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.Map; import org.springframework.beans.PropertyEditorRegistry; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -83,7 +84,7 @@ public class BindException extends Exception implements BindingResult { } @Override - public void setNestedPath(String nestedPath) { + public void setNestedPath(@Nullable String nestedPath) { this.bindingResult.setNestedPath(nestedPath); } @@ -114,22 +115,22 @@ public class BindException extends Exception implements BindingResult { } @Override - public void reject(String errorCode, Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { this.bindingResult.reject(errorCode, errorArgs, defaultMessage); } @Override - public void rejectValue(String field, String errorCode) { + public void rejectValue(@Nullable String field, String errorCode) { this.bindingResult.rejectValue(field, errorCode); } @Override - public void rejectValue(String field, String errorCode, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, String defaultMessage) { this.bindingResult.rejectValue(field, errorCode, defaultMessage); } @Override - public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { this.bindingResult.rejectValue(field, errorCode, errorArgs, defaultMessage); } @@ -220,7 +221,7 @@ public class BindException extends Exception implements BindingResult { } @Override - public Class getFieldType(String field) { + public Class getFieldType(@Nullable String field) { return this.bindingResult.getFieldType(field); } @@ -241,11 +242,13 @@ public class BindException extends Exception implements BindingResult { @Override @SuppressWarnings("rawtypes") - public PropertyEditor findEditor(String field, Class valueType) { + @Nullable + public PropertyEditor findEditor(@Nullable String field, @Nullable Class valueType) { return this.bindingResult.findEditor(field, valueType); } @Override + @Nullable public PropertyEditorRegistry getPropertyEditorRegistry() { return this.bindingResult.getPropertyEditorRegistry(); } diff --git a/spring-context/src/main/java/org/springframework/validation/DataBinder.java b/spring-context/src/main/java/org/springframework/validation/DataBinder.java index b5199d314e..2c35d3a59e 100644 --- a/spring-context/src/main/java/org/springframework/validation/DataBinder.java +++ b/spring-context/src/main/java/org/springframework/validation/DataBinder.java @@ -661,29 +661,29 @@ public class DataBinder implements PropertyEditorRegistry, TypeConverter { } @Override - public void registerCustomEditor(Class requiredType, String field, PropertyEditor propertyEditor) { + public void registerCustomEditor(@Nullable Class requiredType, @Nullable String field, PropertyEditor propertyEditor) { getPropertyEditorRegistry().registerCustomEditor(requiredType, field, propertyEditor); } @Override - public PropertyEditor findCustomEditor(Class requiredType, String propertyPath) { + public PropertyEditor findCustomEditor(@Nullable Class requiredType, @Nullable String propertyPath) { return getPropertyEditorRegistry().findCustomEditor(requiredType, propertyPath); } @Override - public T convertIfNecessary(Object value, Class requiredType) throws TypeMismatchException { + public T convertIfNecessary(Object value, @Nullable Class requiredType) throws TypeMismatchException { return getTypeConverter().convertIfNecessary(value, requiredType); } @Override - public T convertIfNecessary(Object value, Class requiredType, MethodParameter methodParam) + public T convertIfNecessary(Object value, @Nullable Class requiredType, @Nullable MethodParameter methodParam) throws TypeMismatchException { return getTypeConverter().convertIfNecessary(value, requiredType, methodParam); } @Override - public T convertIfNecessary(Object value, Class requiredType, Field field) + public T convertIfNecessary(Object value, @Nullable Class requiredType, @Nullable Field field) throws TypeMismatchException { return getTypeConverter().convertIfNecessary(value, requiredType, field); diff --git a/spring-context/src/main/java/org/springframework/validation/DefaultMessageCodesResolver.java b/spring-context/src/main/java/org/springframework/validation/DefaultMessageCodesResolver.java index e41270dba8..3370f05fbb 100644 --- a/spring-context/src/main/java/org/springframework/validation/DefaultMessageCodesResolver.java +++ b/spring-context/src/main/java/org/springframework/validation/DefaultMessageCodesResolver.java @@ -23,6 +23,7 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Set; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -146,7 +147,7 @@ public class DefaultMessageCodesResolver implements MessageCodesResolver, Serial * @return the list of codes */ @Override - public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class fieldType) { + public String[] resolveMessageCodes(String errorCode, String objectName, String field, @Nullable Class fieldType) { Set codeList = new LinkedHashSet<>(); List fieldList = new ArrayList<>(); buildFieldList(field, fieldList); diff --git a/spring-context/src/main/java/org/springframework/validation/Errors.java b/spring-context/src/main/java/org/springframework/validation/Errors.java index 42c7094e2a..5e1332e183 100644 --- a/spring-context/src/main/java/org/springframework/validation/Errors.java +++ b/spring-context/src/main/java/org/springframework/validation/Errors.java @@ -167,7 +167,7 @@ public interface Errors { * @param defaultMessage fallback default message * @see #getNestedPath() */ - void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, String defaultMessage); + void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage); /** * Add all errors from the given {@code Errors} instance to this diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java index 5ede486869..8a3b9a3270 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java @@ -32,6 +32,7 @@ import javax.validation.metadata.ConstraintDescriptor; import org.springframework.beans.NotReadablePropertyException; import org.springframework.context.MessageSourceResolvable; import org.springframework.context.support.DefaultMessageSourceResolvable; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.validation.BindingResult; import org.springframework.validation.Errors; @@ -93,14 +94,14 @@ public class SpringValidatorAdapter implements SmartValidator, javax.validation. } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { if (this.targetValidator != null) { processConstraintViolations(this.targetValidator.validate(target), errors); } } @Override - public void validate(Object target, Errors errors, Object... validationHints) { + public void validate(@Nullable Object target, Errors errors, Object... validationHints) { if (this.targetValidator != null) { Set> groups = new LinkedHashSet<>(); if (validationHints != null) { diff --git a/spring-context/src/test/java/org/springframework/aop/aspectj/AspectAndAdvicePrecedenceTests.java b/spring-context/src/test/java/org/springframework/aop/aspectj/AspectAndAdvicePrecedenceTests.java index 8ab66af077..c1c68d5335 100644 --- a/spring-context/src/test/java/org/springframework/aop/aspectj/AspectAndAdvicePrecedenceTests.java +++ b/spring-context/src/test/java/org/springframework/aop/aspectj/AspectAndAdvicePrecedenceTests.java @@ -26,6 +26,7 @@ import org.springframework.aop.MethodBeforeAdvice; import org.springframework.beans.factory.BeanNameAware; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.core.Ordered; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.ITestBean; import static org.junit.Assert.*; @@ -237,7 +238,7 @@ class SimpleSpringBeforeAdvice implements MethodBeforeAdvice, BeanNameAware { * @see org.springframework.aop.MethodBeforeAdvice#before(java.lang.reflect.Method, java.lang.Object[], java.lang.Object) */ @Override - public void before(Method method, Object[] args, Object target) + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { this.collaborator.beforeAdviceOne(this.name); } diff --git a/spring-context/src/test/java/org/springframework/aop/aspectj/BeanNamePointcutTests.java b/spring-context/src/test/java/org/springframework/aop/aspectj/BeanNamePointcutTests.java index b2f7b59689..cf6e831d96 100644 --- a/spring-context/src/test/java/org/springframework/aop/aspectj/BeanNamePointcutTests.java +++ b/spring-context/src/test/java/org/springframework/aop/aspectj/BeanNamePointcutTests.java @@ -26,6 +26,7 @@ import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.framework.Advised; import org.springframework.beans.factory.FactoryBean; import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.ITestBean; import static org.junit.Assert.*; @@ -129,7 +130,7 @@ public class BeanNamePointcutTests { private int interceptionCount; @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { interceptionCount++; } } diff --git a/spring-context/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJAutoProxyCreatorTests.java b/spring-context/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJAutoProxyCreatorTests.java index 180840f4e4..799d0eba05 100644 --- a/spring-context/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJAutoProxyCreatorTests.java +++ b/spring-context/src/test/java/org/springframework/aop/aspectj/autoproxy/AspectJAutoProxyCreatorTests.java @@ -48,6 +48,7 @@ import org.springframework.core.NestedRuntimeException; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.core.io.ClassPathResource; +import org.springframework.lang.Nullable; import org.springframework.tests.Assume; import org.springframework.tests.TestGroup; import org.springframework.tests.sample.beans.INestedTestBean; @@ -574,14 +575,14 @@ class TestBeanAdvisor extends StaticMethodMatcherPointcutAdvisor { public TestBeanAdvisor() { setAdvice(new MethodBeforeAdvice() { @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { ++count; } }); } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return ITestBean.class.isAssignableFrom(targetClass); } diff --git a/spring-context/src/test/java/org/springframework/aop/framework/AbstractAopProxyTests.java b/spring-context/src/test/java/org/springframework/aop/framework/AbstractAopProxyTests.java index 827b38cb29..94ff6c5c8a 100644 --- a/spring-context/src/test/java/org/springframework/aop/framework/AbstractAopProxyTests.java +++ b/spring-context/src/test/java/org/springframework/aop/framework/AbstractAopProxyTests.java @@ -57,6 +57,7 @@ import org.springframework.aop.support.Pointcuts; import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor; import org.springframework.aop.target.HotSwappableTargetSource; import org.springframework.aop.target.SingletonTargetSource; +import org.springframework.lang.Nullable; import org.springframework.tests.Assume; import org.springframework.tests.TestGroup; import org.springframework.tests.TimeStamped; @@ -1137,7 +1138,7 @@ public abstract class AbstractAopProxyTests { @SuppressWarnings("serial") StaticMethodMatcherPointcutAdvisor advisor = new StaticMethodMatcherPointcutAdvisor(twoBirthdayInterceptor) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return "haveBirthday".equals(m.getName()); } }; @@ -1216,7 +1217,7 @@ public abstract class AbstractAopProxyTests { NopInterceptor overLoadVoids = new NopInterceptor(); pc.addAdvisor(new StaticMethodMatcherPointcutAdvisor(overLoadVoids) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().equals("overload") && m.getParameterCount() == 0; } }); @@ -1224,7 +1225,7 @@ public abstract class AbstractAopProxyTests { NopInterceptor overLoadInts = new NopInterceptor(); pc.addAdvisor(new StaticMethodMatcherPointcutAdvisor(overLoadInts) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().equals("overload") && m.getParameterCount() == 1 && m.getParameterTypes()[0].equals(int.class); } @@ -1313,7 +1314,7 @@ public abstract class AbstractAopProxyTests { @SuppressWarnings("serial") Advisor matchesNoArgs = new StaticMethodMatcherPointcutAdvisor(cba) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getParameterCount() == 0; } }; @@ -1394,7 +1395,7 @@ public abstract class AbstractAopProxyTests { @SuppressWarnings("serial") Advisor matchesNoArgs = new StaticMethodMatcherPointcutAdvisor(cca) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getParameterCount() == 0 || "exceptional".equals(m.getName()); } }; @@ -1477,7 +1478,7 @@ public abstract class AbstractAopProxyTests { class SummingAfterAdvice implements AfterReturningAdvice { public int sum; @Override - public void afterReturning(Object returnValue, Method m, Object[] args, Object target) throws Throwable { + public void afterReturning(@Nullable Object returnValue, Method m, Object[] args, @Nullable Object target) throws Throwable { sum += ((Integer) returnValue).intValue(); } } @@ -1485,7 +1486,7 @@ public abstract class AbstractAopProxyTests { @SuppressWarnings("serial") Advisor matchesInt = new StaticMethodMatcherPointcutAdvisor(aa) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getReturnType() == int.class; } }; @@ -1543,7 +1544,7 @@ public abstract class AbstractAopProxyTests { @SuppressWarnings("serial") Advisor matchesEchoInvocations = new StaticMethodMatcherPointcutAdvisor(th) { @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("echo"); } }; @@ -1688,11 +1689,11 @@ public abstract class AbstractAopProxyTests { super(cleaner); setPointcut(new DynamicMethodMatcherPointcut() { @Override - public boolean matches(Method m, Class targetClass, Object... args) { + public boolean matches(Method m, @Nullable Class targetClass, Object... args) { return args[0] == null; } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().startsWith("set") && m.getParameterCount() == 1 && m.getParameterTypes()[0].equals(String.class); @@ -1711,7 +1712,7 @@ public abstract class AbstractAopProxyTests { super(mi); setPointcut(new DynamicMethodMatcherPointcut() { @Override - public boolean matches(Method m, Class targetClass, Object... args) { + public boolean matches(Method m, @Nullable Class targetClass, Object... args) { boolean run = m.getName().contains(pattern); if (run) ++count; return run; @@ -1730,13 +1731,13 @@ public abstract class AbstractAopProxyTests { super(mi); setPointcut(new DynamicMethodMatcherPointcut() { @Override - public boolean matches(Method m, Class targetClass, Object... args) { + public boolean matches(Method m, @Nullable Class targetClass, Object... args) { boolean run = m.getName().contains(pattern); if (run) ++count; return run; } @Override - public boolean matches(Method m, Class clazz) { + public boolean matches(Method m, @Nullable Class clazz) { return m.getName().startsWith("set"); } }); @@ -1754,7 +1755,7 @@ public abstract class AbstractAopProxyTests { this.pattern = pattern; } @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return m.getName().contains(pattern); } } @@ -1947,12 +1948,12 @@ public abstract class AbstractAopProxyTests { AfterReturningAdvice, ThrowsAdvice { @Override - public void before(Method m, Object[] args, Object target) throws Throwable { + public void before(Method m, Object[] args, @Nullable Object target) throws Throwable { count(m); } @Override - public void afterReturning(Object o, Method m, Object[] args, Object target) + public void afterReturning(@Nullable Object o, Method m, Object[] args, @Nullable Object target) throws Throwable { count(m); } diff --git a/spring-context/src/test/java/org/springframework/aop/framework/ProxyFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/aop/framework/ProxyFactoryBeanTests.java index 3a30ff9a84..b908195db3 100644 --- a/spring-context/src/test/java/org/springframework/aop/framework/ProxyFactoryBeanTests.java +++ b/spring-context/src/test/java/org/springframework/aop/framework/ProxyFactoryBeanTests.java @@ -49,6 +49,7 @@ import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.context.ApplicationListener; import org.springframework.context.TestListener; import org.springframework.core.io.ClassPathResource; +import org.springframework.lang.Nullable; import org.springframework.tests.TimeStamped; import org.springframework.tests.aop.advice.CountingBeforeAdvice; import org.springframework.tests.aop.advice.MyThrowsHandler; @@ -730,7 +731,7 @@ public class ProxyFactoryBeanTests { }); setPointcut(new DynamicMethodMatcherPointcut() { @Override - public boolean matches(Method m, Class targetClass, Object... args) { + public boolean matches(Method m, @Nullable Class targetClass, Object... args) { return m.getReturnType() == Void.TYPE; } }); diff --git a/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/AutoProxyCreatorTests.java b/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/AutoProxyCreatorTests.java index 5ed2091c24..c65c107822 100644 --- a/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/AutoProxyCreatorTests.java +++ b/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/AutoProxyCreatorTests.java @@ -42,6 +42,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.context.MessageSource; import org.springframework.context.support.StaticApplicationContext; import org.springframework.context.support.StaticMessageSource; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.ITestBean; import org.springframework.tests.sample.beans.IndexedTestBean; import org.springframework.tests.sample.beans.TestBean; @@ -395,7 +396,8 @@ public class AutoProxyCreatorTests { } @Override - protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String name, TargetSource customTargetSource) { + @Nullable + protected Object[] getAdvicesAndAdvisorsForBean(Class beanClass, String name, @Nullable TargetSource customTargetSource) { if (StaticMessageSource.class.equals(beanClass)) { return DO_NOT_PROXY; } diff --git a/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreatorInitTests.java b/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreatorInitTests.java index cdce70b33e..c223fe7aed 100644 --- a/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreatorInitTests.java +++ b/spring-context/src/test/java/org/springframework/aop/framework/autoproxy/BeanNameAutoProxyCreatorInitTests.java @@ -22,6 +22,7 @@ import org.junit.Test; import org.springframework.aop.MethodBeforeAdvice; import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.TestBean; import static org.junit.Assert.*; @@ -49,7 +50,7 @@ public class BeanNameAutoProxyCreatorInitTests { class NullChecker implements MethodBeforeAdvice { @Override - public void before(Method method, Object[] args, Object target) throws Throwable { + public void before(Method method, Object[] args, @Nullable Object target) throws Throwable { check(args); } diff --git a/spring-context/src/test/java/org/springframework/cache/CacheReproTests.java b/spring-context/src/test/java/org/springframework/cache/CacheReproTests.java index 27ef6f3c03..ce4da9ffb7 100644 --- a/spring-context/src/test/java/org/springframework/cache/CacheReproTests.java +++ b/spring-context/src/test/java/org/springframework/cache/CacheReproTests.java @@ -40,6 +40,7 @@ import org.springframework.cache.support.SimpleCacheManager; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.TestBean; import static org.junit.Assert.*; @@ -331,7 +332,8 @@ public class CacheReproTests { } @Override - protected Collection getCacheNames(CacheOperationInvocationContext context) { + @Nullable + protected Collection getCacheNames(@Nullable CacheOperationInvocationContext context) { String cacheName = (String) context.getArgs()[0]; if (cacheName != null) { return Collections.singleton(cacheName); diff --git a/spring-context/src/test/java/org/springframework/cache/interceptor/CacheResolverCustomizationTests.java b/spring-context/src/test/java/org/springframework/cache/interceptor/CacheResolverCustomizationTests.java index 23b391dfbc..b013ba829a 100644 --- a/spring-context/src/test/java/org/springframework/cache/interceptor/CacheResolverCustomizationTests.java +++ b/spring-context/src/test/java/org/springframework/cache/interceptor/CacheResolverCustomizationTests.java @@ -36,6 +36,7 @@ import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.lang.Nullable; import org.springframework.util.ReflectionUtils; import static org.junit.Assert.*; @@ -261,7 +262,8 @@ public class CacheResolverCustomizationTests { } @Override - protected Collection getCacheNames(CacheOperationInvocationContext context) { + @Nullable + protected Collection getCacheNames(@Nullable CacheOperationInvocationContext context) { String cacheName = (String) context.getArgs()[1]; return Collections.singleton(cacheName); } @@ -275,7 +277,8 @@ public class CacheResolverCustomizationTests { } @Override - protected Collection getCacheNames(CacheOperationInvocationContext context) { + @Nullable + protected Collection getCacheNames(@Nullable CacheOperationInvocationContext context) { return null; } } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ComponentScanAnnotationIntegrationTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ComponentScanAnnotationIntegrationTests.java index 2c51a7c8a6..026e8cf866 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ComponentScanAnnotationIntegrationTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ComponentScanAnnotationIntegrationTests.java @@ -58,6 +58,7 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.classreading.MetadataReader; import org.springframework.core.type.classreading.MetadataReaderFactory; import org.springframework.core.type.filter.TypeFilter; +import org.springframework.lang.Nullable; import org.springframework.tests.context.SimpleMapScope; import org.springframework.util.SerializationTestUtils; @@ -291,7 +292,7 @@ public class ComponentScanAnnotationIntegrationTests { } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.classLoader = classLoader; } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ImportBeanDefinitionRegistrarTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ImportBeanDefinitionRegistrarTests.java index f81ac3b616..6eba889829 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ImportBeanDefinitionRegistrarTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ImportBeanDefinitionRegistrarTests.java @@ -34,6 +34,7 @@ import org.springframework.context.ResourceLoaderAware; import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.lang.Nullable; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @@ -80,7 +81,7 @@ public class ImportBeanDefinitionRegistrarTests { static Environment environment; @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { SampleRegistrar.classLoader = classLoader; } diff --git a/spring-context/src/test/java/org/springframework/context/annotation/ImportSelectorTests.java b/spring-context/src/test/java/org/springframework/context/annotation/ImportSelectorTests.java index e877917d8f..a5b6538e05 100644 --- a/spring-context/src/test/java/org/springframework/context/annotation/ImportSelectorTests.java +++ b/spring-context/src/test/java/org/springframework/context/annotation/ImportSelectorTests.java @@ -41,6 +41,7 @@ import org.springframework.core.annotation.Order; import org.springframework.core.env.Environment; import org.springframework.core.io.ResourceLoader; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.lang.Nullable; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; @@ -112,7 +113,7 @@ public class ImportSelectorTests { static Environment environment; @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { SampleRegistrar.classLoader = classLoader; } diff --git a/spring-context/src/test/java/org/springframework/context/support/ConversionServiceFactoryBeanTests.java b/spring-context/src/test/java/org/springframework/context/support/ConversionServiceFactoryBeanTests.java index e93d33165d..8704a7ce01 100644 --- a/spring-context/src/test/java/org/springframework/context/support/ConversionServiceFactoryBeanTests.java +++ b/spring-context/src/test/java/org/springframework/context/support/ConversionServiceFactoryBeanTests.java @@ -31,6 +31,7 @@ import org.springframework.core.convert.converter.ConverterFactory; import org.springframework.core.convert.converter.GenericConverter; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.FileSystemResource; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.ResourceTestBean; import static org.hamcrest.Matchers.*; @@ -78,7 +79,8 @@ public class ConversionServiceFactoryBeanTests { return Collections.singleton(new ConvertiblePair(String.class, Baz.class)); } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return new Baz(); } }); diff --git a/spring-context/src/test/java/org/springframework/context/support/StaticApplicationContextMulticasterTests.java b/spring-context/src/test/java/org/springframework/context/support/StaticApplicationContextMulticasterTests.java index 31fa4cbeab..98e35db8d0 100644 --- a/spring-context/src/test/java/org/springframework/context/support/StaticApplicationContextMulticasterTests.java +++ b/spring-context/src/test/java/org/springframework/context/support/StaticApplicationContextMulticasterTests.java @@ -34,6 +34,7 @@ import org.springframework.core.ResolvableType; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource; import org.springframework.core.io.support.EncodedResource; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.TestBean; import static org.junit.Assert.*; @@ -97,7 +98,7 @@ public class StaticApplicationContextMulticasterTests extends AbstractApplicatio private static int counter = 0; @Override - public void multicastEvent(ApplicationEvent event, ResolvableType eventType) { + public void multicastEvent(ApplicationEvent event, @Nullable ResolvableType eventType) { super.multicastEvent(event, eventType); counter++; } diff --git a/spring-context/src/test/java/org/springframework/format/number/NumberFormattingTests.java b/spring-context/src/test/java/org/springframework/format/number/NumberFormattingTests.java index d5032deff6..87ba3266de 100644 --- a/spring-context/src/test/java/org/springframework/format/number/NumberFormattingTests.java +++ b/spring-context/src/test/java/org/springframework/format/number/NumberFormattingTests.java @@ -30,6 +30,7 @@ import org.springframework.core.convert.support.DefaultConversionService; import org.springframework.format.annotation.NumberFormat; import org.springframework.format.annotation.NumberFormat.Style; import org.springframework.format.support.FormattingConversionService; +import org.springframework.lang.Nullable; import org.springframework.util.StringValueResolver; import org.springframework.validation.DataBinder; @@ -51,7 +52,7 @@ public class NumberFormattingTests { DefaultConversionService.addDefaultConverters(conversionService); conversionService.setEmbeddedValueResolver(new StringValueResolver() { @Override - public String resolveStringValue(String strVal) { + public String resolveStringValue(@Nullable String strVal) { if ("${pattern}".equals(strVal)) { return "#,##.00"; } diff --git a/spring-context/src/test/java/org/springframework/scripting/groovy/LogUserAdvice.java b/spring-context/src/test/java/org/springframework/scripting/groovy/LogUserAdvice.java index f7b774a8bc..a824a5424b 100644 --- a/spring-context/src/test/java/org/springframework/scripting/groovy/LogUserAdvice.java +++ b/spring-context/src/test/java/org/springframework/scripting/groovy/LogUserAdvice.java @@ -20,6 +20,7 @@ import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.ThrowsAdvice; +import org.springframework.lang.Nullable; public class LogUserAdvice implements MethodBeforeAdvice, ThrowsAdvice { @@ -28,7 +29,7 @@ public class LogUserAdvice implements MethodBeforeAdvice, ThrowsAdvice { private int countThrows = 0; @Override - public void before(Method method, Object[] objects, Object o) throws Throwable { + public void before(Method method, Object[] objects, @Nullable Object o) throws Throwable { countBefore++; // System.out.println("Method:" + method.getName()); } diff --git a/spring-context/src/test/java/org/springframework/validation/DataBinderTests.java b/spring-context/src/test/java/org/springframework/validation/DataBinderTests.java index 337d93f429..5748415841 100644 --- a/spring-context/src/test/java/org/springframework/validation/DataBinderTests.java +++ b/spring-context/src/test/java/org/springframework/validation/DataBinderTests.java @@ -57,6 +57,7 @@ import org.springframework.format.Formatter; import org.springframework.format.number.NumberStyleFormatter; import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.format.support.FormattingConversionService; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.BeanWithObjectProperty; import org.springframework.tests.sample.beans.DerivedTestBean; import org.springframework.tests.sample.beans.ITestBean; @@ -2167,7 +2168,7 @@ public class DataBinderTests { } @Override - public void validate(Object obj, Errors errors) { + public void validate(@Nullable Object obj, Errors errors) { TestBean tb = (TestBean) obj; if (tb.getAge() < 32) { errors.rejectValue("age", "TOO_YOUNG", "simply too young"); @@ -2196,7 +2197,7 @@ public class DataBinderTests { } @Override - public void validate(Object obj, Errors errors) { + public void validate(@Nullable Object obj, Errors errors) { TestBean tb = (TestBean) obj; if (tb == null || "XXX".equals(tb.getName())) { errors.rejectValue("", "SPOUSE_NOT_AVAILABLE"); diff --git a/spring-context/src/test/java/org/springframework/validation/ValidationUtilsTests.java b/spring-context/src/test/java/org/springframework/validation/ValidationUtilsTests.java index a22c5dff8a..1f146cdfa7 100644 --- a/spring-context/src/test/java/org/springframework/validation/ValidationUtilsTests.java +++ b/spring-context/src/test/java/org/springframework/validation/ValidationUtilsTests.java @@ -18,6 +18,7 @@ package org.springframework.validation; import org.junit.Test; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.TestBean; import static org.junit.Assert.*; @@ -168,7 +169,7 @@ public class ValidationUtilsTests { } @Override - public void validate(Object obj, Errors errors) { + public void validate(@Nullable Object obj, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "name", "EMPTY", "You must enter a name!"); } } @@ -182,7 +183,7 @@ public class ValidationUtilsTests { } @Override - public void validate(Object obj, Errors errors) { + public void validate(@Nullable Object obj, Errors errors) { ValidationUtils.rejectIfEmptyOrWhitespace(errors, "name", "EMPTY_OR_WHITESPACE", "You must enter a name!"); } } diff --git a/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java b/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java index 10017c658b..6b72f9262a 100644 --- a/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java +++ b/spring-core/src/main/java/org/springframework/core/AttributeAccessorSupport.java @@ -20,6 +20,7 @@ import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -40,7 +41,7 @@ public abstract class AttributeAccessorSupport implements AttributeAccessor, Ser @Override - public void setAttribute(String name, Object value) { + public void setAttribute(String name, @Nullable Object value) { Assert.notNull(name, "Name must not be null"); if (value != null) { this.attributes.put(name, value); diff --git a/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java b/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java index 18582f5039..cc2cf9175d 100644 --- a/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java +++ b/spring-core/src/main/java/org/springframework/core/annotation/AnnotatedElementUtils.java @@ -189,7 +189,8 @@ public class AnnotatedElementUtils { final Set types = new LinkedHashSet<>(); searchWithGetSemantics(composed.annotationType(), null, null, null, new SimpleAnnotationProcessor(true) { @Override - public Object process(AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { + @Nullable + public Object process(@Nullable AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { types.add(annotation.annotationType().getName()); return CONTINUE; } @@ -247,7 +248,8 @@ public class AnnotatedElementUtils { searchWithGetSemantics(element, annotationType, annotationName, new SimpleAnnotationProcessor() { @Override - public Boolean process(AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { + @Nullable + public Boolean process(@Nullable AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { return (metaDepth > 0 ? Boolean.TRUE : CONTINUE); } })); @@ -573,7 +575,8 @@ public class AnnotatedElementUtils { searchWithGetSemantics(element, null, annotationName, new SimpleAnnotationProcessor() { @Override - public Object process(AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { + @Nullable + public Object process(@Nullable AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { AnnotationAttributes annotationAttributes = AnnotationUtils.getAnnotationAttributes( annotation, classValuesAsString, nestedAnnotationsAsMap); for (Map.Entry entry : annotationAttributes.entrySet()) { @@ -1459,7 +1462,7 @@ public class AnnotatedElementUtils { } @Override - public final void postProcess(AnnotatedElement annotatedElement, Annotation annotation, T result) { + public final void postProcess(@Nullable AnnotatedElement annotatedElement, Annotation annotation, T result) { // no-op } @@ -1484,7 +1487,8 @@ public class AnnotatedElementUtils { static class AlwaysTrueBooleanAnnotationProcessor extends SimpleAnnotationProcessor { @Override - public final Boolean process(AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { + @Nullable + public final Boolean process(@Nullable AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { return Boolean.TRUE; } } @@ -1544,13 +1548,14 @@ public class AnnotatedElementUtils { } @Override - public AnnotationAttributes process(AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { + @Nullable + public AnnotationAttributes process(@Nullable AnnotatedElement annotatedElement, Annotation annotation, int metaDepth) { return AnnotationUtils.retrieveAnnotationAttributes(annotatedElement, annotation, this.classValuesAsString, this.nestedAnnotationsAsMap); } @Override - public void postProcess(AnnotatedElement element, Annotation annotation, AnnotationAttributes attributes) { + public void postProcess(@Nullable AnnotatedElement element, Annotation annotation, AnnotationAttributes attributes) { annotation = AnnotationUtils.synthesizeAnnotation(annotation, element); Class targetAnnotationType = attributes.annotationType(); diff --git a/spring-core/src/main/java/org/springframework/core/codec/AbstractDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/AbstractDecoder.java index 8ec6e5a1ee..638a7c48d9 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/AbstractDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/AbstractDecoder.java @@ -25,6 +25,7 @@ import reactor.core.publisher.Mono; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; /** @@ -50,7 +51,7 @@ public abstract class AbstractDecoder implements Decoder { } @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { if (mimeType == null) { return true; } @@ -59,7 +60,7 @@ public abstract class AbstractDecoder implements Decoder { @Override public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { throw new UnsupportedOperationException(); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/AbstractEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/AbstractEncoder.java index 5313c3a354..10242e9a70 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/AbstractEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/AbstractEncoder.java @@ -20,6 +20,7 @@ import java.util.Arrays; import java.util.List; import org.springframework.core.ResolvableType; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; /** @@ -45,7 +46,7 @@ public abstract class AbstractEncoder implements Encoder { } @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { if (mimeType == null) { return true; } diff --git a/spring-core/src/main/java/org/springframework/core/codec/AbstractSingleValueEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/AbstractSingleValueEncoder.java index 286cd4acde..9aa8f411e7 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/AbstractSingleValueEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/AbstractSingleValueEncoder.java @@ -24,6 +24,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; /** @@ -43,7 +44,7 @@ public abstract class AbstractSingleValueEncoder extends AbstractEncoder { @Override public final Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, - ResolvableType elementType, MimeType mimeType, Map hints) { + ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream). take(1). diff --git a/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java index 7112dfa793..e63bb50437 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ByteArrayDecoder.java @@ -24,6 +24,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -41,14 +42,14 @@ public class ByteArrayDecoder extends AbstractDecoder { @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.getRawClass(); return (super.canDecode(elementType, mimeType) && byte[].class == clazz); } @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream).map((dataBuffer) -> { byte[] result = new byte[dataBuffer.readableByteCount()]; diff --git a/spring-core/src/main/java/org/springframework/core/codec/ByteArrayEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/ByteArrayEncoder.java index 473152225f..8dc9322d9a 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ByteArrayEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ByteArrayEncoder.java @@ -24,6 +24,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -41,15 +42,15 @@ public class ByteArrayEncoder extends AbstractEncoder { @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); return super.canEncode(elementType, mimeType) && byte[].class.isAssignableFrom(clazz); } @Override public Flux encode(Publisher inputStream, - DataBufferFactory bufferFactory, ResolvableType elementType, MimeType mimeType, - Map hints) { + DataBufferFactory bufferFactory, ResolvableType elementType, @Nullable MimeType mimeType, + @Nullable Map hints) { return Flux.from(inputStream).map(bufferFactory::wrap); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java index a58f09594e..b4d8cd9ff7 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ByteBufferDecoder.java @@ -25,6 +25,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -43,14 +44,14 @@ public class ByteBufferDecoder extends AbstractDecoder { @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.getRawClass(); return (super.canDecode(elementType, mimeType) && ByteBuffer.class.isAssignableFrom(clazz)); } @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream).map((dataBuffer) -> { ByteBuffer copy = ByteBuffer.allocate(dataBuffer.readableByteCount()); diff --git a/spring-core/src/main/java/org/springframework/core/codec/ByteBufferEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/ByteBufferEncoder.java index 8e077beb61..27f1410c26 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ByteBufferEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ByteBufferEncoder.java @@ -25,6 +25,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -42,15 +43,15 @@ public class ByteBufferEncoder extends AbstractEncoder { @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); return super.canEncode(elementType, mimeType) && ByteBuffer.class.isAssignableFrom(clazz); } @Override public Flux encode(Publisher inputStream, - DataBufferFactory bufferFactory, ResolvableType elementType, MimeType mimeType, - Map hints) { + DataBufferFactory bufferFactory, ResolvableType elementType, @Nullable MimeType mimeType, + @Nullable Map hints) { return Flux.from(inputStream).map(bufferFactory::wrap); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java index a4e4be4a20..ffda0dd1fa 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/CharSequenceEncoder.java @@ -28,6 +28,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -51,7 +52,7 @@ public class CharSequenceEncoder extends AbstractEncoder { @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); return super.canEncode(elementType, mimeType) && CharSequence.class.isAssignableFrom(clazz); } @@ -59,7 +60,7 @@ public class CharSequenceEncoder extends AbstractEncoder { @Override public Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { Charset charset; if (mimeType != null && mimeType.getCharset() != null) { diff --git a/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java index dbb1bed32c..6cdcdeb518 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/DataBufferDecoder.java @@ -23,6 +23,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -43,14 +44,14 @@ public class DataBufferDecoder extends AbstractDecoder { @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.getRawClass(); return (super.canDecode(elementType, mimeType) && DataBuffer.class.isAssignableFrom(clazz)); } @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/DataBufferEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/DataBufferEncoder.java index 4fa1aa7559..dd2d25207d 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/DataBufferEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/DataBufferEncoder.java @@ -24,6 +24,7 @@ import reactor.core.publisher.Flux; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -41,15 +42,15 @@ public class DataBufferEncoder extends AbstractEncoder { @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); return super.canEncode(elementType, mimeType) && DataBuffer.class.isAssignableFrom(clazz); } @Override public Flux encode(Publisher inputStream, - DataBufferFactory bufferFactory, ResolvableType elementType, MimeType mimeType, - Map hints) { + DataBufferFactory bufferFactory, ResolvableType elementType, @Nullable MimeType mimeType, + @Nullable Map hints) { return Flux.from(inputStream); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/Decoder.java b/spring-core/src/main/java/org/springframework/core/codec/Decoder.java index 4f8583ef64..200896e298 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/Decoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/Decoder.java @@ -59,7 +59,7 @@ public interface Decoder { * @return the output stream with decoded elements */ Flux decode(Publisher inputStream, ResolvableType elementType, - @Nullable MimeType mimeType, Map hints); + @Nullable MimeType mimeType, @Nullable Map hints); /** * Decode a {@link DataBuffer} input stream into a Mono of {@code T}. @@ -72,7 +72,7 @@ public interface Decoder { * @return the output stream with the decoded element */ Mono decodeToMono(Publisher inputStream, ResolvableType elementType, - @Nullable MimeType mimeType, Map hints); + @Nullable MimeType mimeType, @Nullable Map hints); /** * Return the list of MIME types this decoder supports. diff --git a/spring-core/src/main/java/org/springframework/core/codec/Encoder.java b/spring-core/src/main/java/org/springframework/core/codec/Encoder.java index 65773e4a4e..3e2d5f933b 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/Encoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/Encoder.java @@ -64,7 +64,7 @@ public interface Encoder { * @return the output stream */ Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, - ResolvableType elementType, @Nullable MimeType mimeType, Map hints); + ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints); /** * Return the list of mime types this encoder supports. diff --git a/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java index 86114a3fa3..640f741008 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ResourceDecoder.java @@ -29,6 +29,7 @@ import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -46,7 +47,7 @@ public class ResourceDecoder extends AbstractDecoder { @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.getRawClass(); return (InputStreamResource.class.equals(clazz) || clazz.isAssignableFrom(ByteArrayResource.class)) && @@ -55,14 +56,14 @@ public class ResourceDecoder extends AbstractDecoder { @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(decodeToMono(inputStream, elementType, mimeType, hints)); } @Override public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { Class clazz = elementType.getRawClass(); diff --git a/spring-core/src/main/java/org/springframework/core/codec/ResourceEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/ResourceEncoder.java index 4020a1c258..809f4aaec0 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ResourceEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ResourceEncoder.java @@ -30,6 +30,7 @@ import org.springframework.core.io.Resource; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -60,7 +61,7 @@ public class ResourceEncoder extends AbstractSingleValueEncoder { @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); return (super.canEncode(elementType, mimeType) && Resource.class.isAssignableFrom(clazz)); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/ResourceRegionEncoder.java b/spring-core/src/main/java/org/springframework/core/codec/ResourceRegionEncoder.java index 8e1bbf8e51..be2d36331d 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/ResourceRegionEncoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/ResourceRegionEncoder.java @@ -37,6 +37,7 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.support.ResourceRegion; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -68,7 +69,7 @@ public class ResourceRegionEncoder extends AbstractEncoder { } @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { return super.canEncode(elementType, mimeType) && ResourceRegion.class.isAssignableFrom(elementType.resolve(Object.class)); } @@ -76,7 +77,7 @@ public class ResourceRegionEncoder extends AbstractEncoder { @Override @SuppressWarnings("unchecked") public Flux encode(Publisher inputStream, - DataBufferFactory bufferFactory, ResolvableType elementType, MimeType mimeType, Map hints) { + DataBufferFactory bufferFactory, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { Assert.notNull(inputStream, "'inputStream' must not be null"); Assert.notNull(bufferFactory, "'bufferFactory' must not be null"); diff --git a/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java b/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java index 3f37933727..8c759930df 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java +++ b/spring-core/src/main/java/org/springframework/core/codec/StringDecoder.java @@ -31,6 +31,7 @@ import reactor.core.publisher.Mono; import org.springframework.core.ResolvableType; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -70,14 +71,14 @@ public class StringDecoder extends AbstractDecoder { @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { return (super.canDecode(elementType, mimeType) && String.class.equals(elementType.getRawClass())); } @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { Flux inputFlux = Flux.from(inputStream); if (this.splitOnNewline) { @@ -88,7 +89,7 @@ public class StringDecoder extends AbstractDecoder { @Override public Mono decodeToMono(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream) .reduce(DataBuffer::write) diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToArrayConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToArrayConverter.java index df3b730d11..fd4a221dc2 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToArrayConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToArrayConverter.java @@ -24,6 +24,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; /** @@ -59,7 +60,7 @@ final class ArrayToArrayConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (this.conversionService instanceof GenericConversionService && ((GenericConversionService) this.conversionService).canBypassConvert( sourceType.getElementTypeDescriptor(), targetType.getElementTypeDescriptor())) { diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java index 2237371269..8e66fd318e 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToCollectionConverter.java @@ -25,6 +25,7 @@ import org.springframework.core.CollectionFactory; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts an array to a Collection. @@ -60,7 +61,8 @@ final class ArrayToCollectionConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToObjectConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToObjectConverter.java index ef92f0bd12..db711590ec 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToObjectConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToObjectConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts an array to an Object by returning the first array element @@ -52,7 +53,8 @@ final class ArrayToObjectConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToStringConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToStringConverter.java index 80f986a6e4..297a64c562 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToStringConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ArrayToStringConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; /** @@ -54,7 +55,8 @@ final class ArrayToStringConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return this.helperConverter.convert(Arrays.asList(ObjectUtils.toObjectArray(source)), sourceType, targetType); } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java index 5db79a9403..1b842d5730 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ByteBufferConverter.java @@ -25,6 +25,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts a {@link ByteBuffer} directly to and from {@code byte[]}s and indirectly @@ -85,7 +86,8 @@ final class ByteBufferConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { boolean byteBufferTarget = targetType.isAssignableTo(BYTE_BUFFER_TYPE); if (source instanceof ByteBuffer) { ByteBuffer buffer = (ByteBuffer) source; diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java index ea79a065b6..c0cd5a71d7 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToArrayConverter.java @@ -24,6 +24,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts a Collection to an array. @@ -55,7 +56,8 @@ final class CollectionToArrayConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java index f5addb2ae4..a0a2f03b1b 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToCollectionConverter.java @@ -24,6 +24,7 @@ import org.springframework.core.CollectionFactory; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts from a Collection to another Collection. @@ -59,7 +60,8 @@ final class CollectionToCollectionConverter implements ConditionalGenericConvert } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java index 052105e6ef..5cfbbbefe8 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToObjectConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts a Collection to an Object by returning the first collection element after converting it to the desired targetType. @@ -49,7 +50,8 @@ final class CollectionToObjectConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java index 1cd142fd61..bf8d93b580 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/CollectionToStringConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts a Collection to a comma-delimited String. @@ -54,7 +55,8 @@ final class CollectionToStringConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/FallbackObjectToStringConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/FallbackObjectToStringConverter.java index 8a6183eae4..3a26b8f8e1 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/FallbackObjectToStringConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/FallbackObjectToStringConverter.java @@ -22,6 +22,7 @@ import java.util.Set; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Simply calls {@link Object#toString()} to convert any supported object @@ -60,7 +61,8 @@ final class FallbackObjectToStringConverter implements ConditionalGenericConvert } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return (source != null ? source.toString() : null); } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java index d657bea97a..e6cd52b7cb 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/GenericConversionService.java @@ -131,14 +131,14 @@ public class GenericConversionService implements ConfigurableConversionService { // ConversionService implementation @Override - public boolean canConvert(Class sourceType, Class targetType) { + public boolean canConvert(@Nullable Class sourceType, Class targetType) { Assert.notNull(targetType, "Target type to convert to cannot be null"); return canConvert((sourceType != null ? TypeDescriptor.valueOf(sourceType) : null), TypeDescriptor.valueOf(targetType)); } @Override - public boolean canConvert(TypeDescriptor sourceType, TypeDescriptor targetType) { + public boolean canConvert(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType) { Assert.notNull(targetType, "Target type to convert to cannot be null"); if (sourceType == null) { return true; @@ -169,13 +169,13 @@ public class GenericConversionService implements ConfigurableConversionService { @Override @SuppressWarnings("unchecked") - public T convert(Object source, Class targetType) { + public T convert(@Nullable Object source, Class targetType) { Assert.notNull(targetType, "Target type to convert to cannot be null"); return (T) convert(source, TypeDescriptor.forObject(source), TypeDescriptor.valueOf(targetType)); } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, @Nullable TypeDescriptor sourceType, TypeDescriptor targetType) { Assert.notNull(targetType, "Target type to convert to cannot be null"); if (sourceType == null) { Assert.isTrue(source == null, "Source must be [null] if source type == [null]"); @@ -372,7 +372,8 @@ public class GenericConversionService implements ConfigurableConversionService { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return convertNullSource(sourceType, targetType); } @@ -422,7 +423,7 @@ public class GenericConversionService implements ConfigurableConversionService { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return convertNullSource(sourceType, targetType); } @@ -691,7 +692,7 @@ public class GenericConversionService implements ConfigurableConversionService { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return source; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/IdToEntityConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/IdToEntityConverter.java index 0f37a38379..9ad1c732fe 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/IdToEntityConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/IdToEntityConverter.java @@ -62,7 +62,8 @@ final class IdToEntityConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java index bbe611f4ca..29388e3339 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/MapToMapConverter.java @@ -26,6 +26,7 @@ import org.springframework.core.CollectionFactory; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts a Map to another Map. @@ -61,7 +62,7 @@ final class MapToMapConverter implements ConditionalGenericConverter { @Override @SuppressWarnings("unchecked") - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java index 1531926a9e..4d11bf0733 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToArrayConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts an Object to a single-element array containing the Object. @@ -52,7 +53,8 @@ final class ObjectToArrayConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java index 5c07346321..650a17e3a6 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToCollectionConverter.java @@ -24,6 +24,7 @@ import org.springframework.core.CollectionFactory; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts an Object to a single-element Collection containing the Object. @@ -54,7 +55,8 @@ final class ObjectToCollectionConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java index bd9a1d64cd..f6b9d27b41 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToObjectConverter.java @@ -28,6 +28,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionFailedException; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ConcurrentReferenceHashMap; import org.springframework.util.ReflectionUtils; @@ -81,7 +82,8 @@ final class ObjectToObjectConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java index 0555adbfda..0885da3503 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/ObjectToOptionalConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Convert an Object to {@code java.util.Optional} if necessary using the @@ -59,7 +60,8 @@ final class ObjectToOptionalConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return Optional.empty(); } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/StreamConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/StreamConverter.java index 93274976c8..8d379c7ffc 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/StreamConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/StreamConverter.java @@ -26,6 +26,7 @@ import java.util.stream.Stream; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; /** * Converts a {@link Stream} to and from a collection or array, converting the @@ -87,7 +88,8 @@ class StreamConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (sourceType.isAssignableTo(STREAM_TYPE)) { return convertFromStream((Stream) source, sourceType, targetType); } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/StringToArrayConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/StringToArrayConverter.java index af209148c8..ef98bcb32f 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/StringToArrayConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/StringToArrayConverter.java @@ -23,6 +23,7 @@ import java.util.Set; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -51,7 +52,8 @@ final class StringToArrayConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/convert/support/StringToCollectionConverter.java b/spring-core/src/main/java/org/springframework/core/convert/support/StringToCollectionConverter.java index 8311e46379..e982efa51f 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/support/StringToCollectionConverter.java +++ b/spring-core/src/main/java/org/springframework/core/convert/support/StringToCollectionConverter.java @@ -24,6 +24,7 @@ import org.springframework.core.CollectionFactory; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.ConditionalGenericConverter; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -57,7 +58,8 @@ final class StringToCollectionConverter implements ConditionalGenericConverter { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { if (source == null) { return null; } diff --git a/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java b/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java index f52cd925f6..4516f5633f 100644 --- a/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java +++ b/spring-core/src/main/java/org/springframework/core/env/AbstractEnvironment.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.core.SpringProperties; import org.springframework.core.convert.support.ConfigurableConversionService; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -496,7 +497,7 @@ public abstract class AbstractEnvironment implements ConfigurableEnvironment { } @Override - public void setValueSeparator(String valueSeparator) { + public void setValueSeparator(@Nullable String valueSeparator) { this.propertyResolver.setValueSeparator(valueSeparator); } diff --git a/spring-core/src/main/java/org/springframework/core/env/AbstractPropertyResolver.java b/spring-core/src/main/java/org/springframework/core/env/AbstractPropertyResolver.java index 4521011e18..20f96b2281 100644 --- a/spring-core/src/main/java/org/springframework/core/env/AbstractPropertyResolver.java +++ b/spring-core/src/main/java/org/springframework/core/env/AbstractPropertyResolver.java @@ -109,7 +109,7 @@ public abstract class AbstractPropertyResolver implements ConfigurablePropertyRe * @see org.springframework.util.SystemPropertyUtils#VALUE_SEPARATOR */ @Override - public void setValueSeparator(String valueSeparator) { + public void setValueSeparator(@Nullable String valueSeparator) { this.valueSeparator = valueSeparator; } diff --git a/spring-core/src/main/java/org/springframework/core/style/DefaultValueStyler.java b/spring-core/src/main/java/org/springframework/core/style/DefaultValueStyler.java index e32986f629..91b937bac7 100644 --- a/spring-core/src/main/java/org/springframework/core/style/DefaultValueStyler.java +++ b/spring-core/src/main/java/org/springframework/core/style/DefaultValueStyler.java @@ -23,6 +23,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -49,7 +50,7 @@ public class DefaultValueStyler implements ValueStyler { @Override - public String style(Object value) { + public String style(@Nullable Object value) { if (value == null) { return NULL; } diff --git a/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java b/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java index 794f64c3db..12a8a092d1 100644 --- a/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java +++ b/spring-core/src/main/java/org/springframework/util/ConcurrentReferenceHashMap.java @@ -263,7 +263,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen private V put(final K key, final V value, final boolean overwriteExisting) { return doTask(key, new Task(TaskOption.RESTRUCTURE_BEFORE, TaskOption.RESIZE) { @Override - protected V execute(Reference reference, Entry entry, Entries entries) { + @Nullable + protected V execute(@Nullable Reference reference, @Nullable Entry entry, Entries entries) { if (entry != null) { V previousValue = entry.getValue(); if (overwriteExisting) { @@ -281,7 +282,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen public V remove(Object key) { return doTask(key, new Task(TaskOption.RESTRUCTURE_AFTER, TaskOption.SKIP_IF_EMPTY) { @Override - protected V execute(Reference reference, Entry entry) { + @Nullable + protected V execute(@Nullable Reference reference, @Nullable Entry entry) { if (entry != null) { reference.release(); return entry.value; @@ -295,7 +297,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen public boolean remove(Object key, final Object value) { return doTask(key, new Task(TaskOption.RESTRUCTURE_AFTER, TaskOption.SKIP_IF_EMPTY) { @Override - protected Boolean execute(Reference reference, Entry entry) { + @Nullable + protected Boolean execute(@Nullable Reference reference, @Nullable Entry entry) { if (entry != null && ObjectUtils.nullSafeEquals(entry.getValue(), value)) { reference.release(); return true; @@ -309,7 +312,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen public boolean replace(K key, final V oldValue, final V newValue) { return doTask(key, new Task(TaskOption.RESTRUCTURE_BEFORE, TaskOption.SKIP_IF_EMPTY) { @Override - protected Boolean execute(Reference reference, Entry entry) { + @Nullable + protected Boolean execute(@Nullable Reference reference, @Nullable Entry entry) { if (entry != null && ObjectUtils.nullSafeEquals(entry.getValue(), oldValue)) { entry.setValue(newValue); return true; @@ -324,7 +328,8 @@ public class ConcurrentReferenceHashMap extends AbstractMap implemen public V replace(K key, final V value) { return doTask(key, new Task(TaskOption.RESTRUCTURE_BEFORE, TaskOption.SKIP_IF_EMPTY) { @Override - protected V execute(Reference reference, Entry entry) { + @Nullable + protected V execute(@Nullable Reference reference, @Nullable Entry entry) { if (entry != null) { V previousValue = entry.getValue(); entry.setValue(value); diff --git a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java index b6655ba2b9..976b997148 100644 --- a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java @@ -119,8 +119,7 @@ public abstract class ReflectionUtils { * @param target the target object on which to set the field * @param value the value to set (may be {@code null}) */ - @Nullable - public static void setField(Field field, Object target, Object value) { + public static void setField(Field field, Object target, @Nullable Object value) { try { field.set(target, value); } diff --git a/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java b/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java index aba06c0ac4..b04d1412e9 100644 --- a/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java +++ b/spring-core/src/test/java/org/springframework/core/convert/support/GenericConversionServiceTests.java @@ -43,6 +43,7 @@ import org.springframework.core.convert.converter.ConverterFactory; import org.springframework.core.convert.converter.GenericConverter; import org.springframework.core.io.DescriptiveResource; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.tests.Assume; import org.springframework.tests.TestGroup; import org.springframework.util.StopWatch; @@ -761,7 +762,8 @@ public class GenericConversionServiceTests { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return null; } } @@ -783,7 +785,8 @@ public class GenericConversionServiceTests { } @Override - public Object convert(Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { + @Nullable + public Object convert(@Nullable Object source, TypeDescriptor sourceType, TypeDescriptor targetType) { return null; } diff --git a/spring-core/src/test/java/org/springframework/util/ConcurrentReferenceHashMapTests.java b/spring-core/src/test/java/org/springframework/util/ConcurrentReferenceHashMapTests.java index 74dc6f59a0..00d59848b7 100644 --- a/spring-core/src/test/java/org/springframework/util/ConcurrentReferenceHashMapTests.java +++ b/spring-core/src/test/java/org/springframework/util/ConcurrentReferenceHashMapTests.java @@ -34,6 +34,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.springframework.lang.Nullable; import org.springframework.util.ConcurrentReferenceHashMap.Entry; import org.springframework.util.ConcurrentReferenceHashMap.Reference; import org.springframework.util.ConcurrentReferenceHashMap.Restructure; @@ -588,7 +589,7 @@ public class ConcurrentReferenceHashMapTests { } @Override - protected int getHash(Object o) { + protected int getHash(@Nullable Object o) { if (this.disableTestHooks) { return super.getHash(o); } @@ -606,7 +607,7 @@ public class ConcurrentReferenceHashMapTests { return new ReferenceManager() { @Override public Reference createReference(Entry entry, int hash, - Reference next) { + @Nullable Reference next) { if (TestWeakConcurrentCache.this.disableTestHooks) { return super.createReference(entry, hash, next); } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java b/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java index ef7843a90f..bc5f0798eb 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/support/ReflectionHelper.java @@ -260,7 +260,6 @@ public class ReflectionHelper { * @return {@code true} if some kind of conversion occurred on an argument * @throws EvaluationException if a problem occurs during conversion */ - @Nullable static boolean convertArguments(TypeConverter converter, Object[] arguments, Executable executable, @Nullable Integer varargsPosition) throws EvaluationException { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/config/EmbeddedDatabaseBeanDefinitionParser.java b/spring-jdbc/src/main/java/org/springframework/jdbc/config/EmbeddedDatabaseBeanDefinitionParser.java index 5f7abbe080..25a4b1b957 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/config/EmbeddedDatabaseBeanDefinitionParser.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/config/EmbeddedDatabaseBeanDefinitionParser.java @@ -23,6 +23,7 @@ import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryBean; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; import org.w3c.dom.Element; @@ -55,7 +56,7 @@ class EmbeddedDatabaseBeanDefinitionParser extends AbstractBeanDefinitionParser @Override - protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + protected AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(EmbeddedDatabaseFactoryBean.class); setGenerateUniqueDatabaseNameFlag(element, builder); setDatabaseName(element, builder); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/config/InitializeDatabaseBeanDefinitionParser.java b/spring-jdbc/src/main/java/org/springframework/jdbc/config/InitializeDatabaseBeanDefinitionParser.java index 8f7c7fd82b..004972ffa8 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/config/InitializeDatabaseBeanDefinitionParser.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/config/InitializeDatabaseBeanDefinitionParser.java @@ -25,6 +25,7 @@ import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; import org.springframework.jdbc.datasource.init.DataSourceInitializer; import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; +import org.springframework.lang.Nullable; /** * {@link org.springframework.beans.factory.xml.BeanDefinitionParser} that parses an {@code initialize-database} @@ -38,7 +39,7 @@ import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; class InitializeDatabaseBeanDefinitionParser extends AbstractBeanDefinitionParser { @Override - protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) { + protected AbstractBeanDefinition parseInternal(@Nullable Element element, @Nullable ParserContext parserContext) { BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(DataSourceInitializer.class); builder.addPropertyReference("dataSource", element.getAttribute("data-source")); builder.addPropertyValue("enabled", element.getAttribute("enabled")); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java index 3ec3998315..43ff3fb182 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java @@ -660,7 +660,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public T query(String sql, PreparedStatementSetter pss, ResultSetExtractor rse) throws DataAccessException { + public T query(String sql, @Nullable PreparedStatementSetter pss, ResultSetExtractor rse) throws DataAccessException { return query(new SimplePreparedStatementCreator(sql), pss, rse); } @@ -675,7 +675,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public T query(String sql, ResultSetExtractor rse, Object... args) throws DataAccessException { + public T query(String sql, ResultSetExtractor rse, @Nullable Object... args) throws DataAccessException { return query(sql, newArgPreparedStatementSetter(args), rse); } @@ -685,7 +685,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) throws DataAccessException { + public void query(String sql, @Nullable PreparedStatementSetter pss, RowCallbackHandler rch) throws DataAccessException { query(sql, pss, new RowCallbackHandlerResultSetExtractor(rch)); } @@ -700,7 +700,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public void query(String sql, RowCallbackHandler rch, Object... args) throws DataAccessException { + public void query(String sql, RowCallbackHandler rch, @Nullable Object... args) throws DataAccessException { query(sql, newArgPreparedStatementSetter(args), rch); } @@ -710,7 +710,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public List query(String sql, PreparedStatementSetter pss, RowMapper rowMapper) throws DataAccessException { + public List query(String sql, @Nullable PreparedStatementSetter pss, RowMapper rowMapper) throws DataAccessException { return query(sql, pss, new RowMapperResultSetExtractor<>(rowMapper)); } @@ -725,7 +725,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public List query(String sql, RowMapper rowMapper, Object... args) throws DataAccessException { + public List query(String sql, RowMapper rowMapper, @Nullable Object... args) throws DataAccessException { return query(sql, args, new RowMapperResultSetExtractor<>(rowMapper)); } @@ -744,7 +744,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public T queryForObject(String sql, RowMapper rowMapper, Object... args) throws DataAccessException { + public T queryForObject(String sql, RowMapper rowMapper, @Nullable Object... args) throws DataAccessException { List results = query(sql, args, new RowMapperResultSetExtractor<>(rowMapper, 1)); return DataAccessUtils.requiredSingleResult(results); } @@ -762,7 +762,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public T queryForObject(String sql, Class requiredType, Object... args) throws DataAccessException { + public T queryForObject(String sql, Class requiredType, @Nullable Object... args) throws DataAccessException { return queryForObject(sql, args, getSingleColumnRowMapper(requiredType)); } @@ -772,7 +772,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public Map queryForMap(String sql, Object... args) throws DataAccessException { + public Map queryForMap(String sql, @Nullable Object... args) throws DataAccessException { return queryForObject(sql, args, getColumnMapRowMapper()); } @@ -787,7 +787,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public List queryForList(String sql, Class elementType, Object... args) throws DataAccessException { + public List queryForList(String sql, Class elementType, @Nullable Object... args) throws DataAccessException { return query(sql, args, getSingleColumnRowMapper(elementType)); } @@ -797,7 +797,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public List> queryForList(String sql, Object... args) throws DataAccessException { + public List> queryForList(String sql, @Nullable Object... args) throws DataAccessException { return query(sql, args, getColumnMapRowMapper()); } @@ -807,7 +807,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public SqlRowSet queryForRowSet(String sql, Object... args) throws DataAccessException { + public SqlRowSet queryForRowSet(String sql, @Nullable Object... args) throws DataAccessException { return query(sql, args, new SqlRowSetResultSetExtractor()); } @@ -875,7 +875,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public int update(String sql, PreparedStatementSetter pss) throws DataAccessException { + public int update(String sql, @Nullable PreparedStatementSetter pss) throws DataAccessException { return update(new SimplePreparedStatementCreator(sql), pss); } @@ -885,7 +885,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { } @Override - public int update(String sql, Object... args) throws DataAccessException { + public int update(String sql, @Nullable Object... args) throws DataAccessException { return update(sql, newArgPreparedStatementSetter(args)); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java index 3182c6dfc8..6df560a971 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/StatementCreatorUtils.java @@ -110,9 +110,8 @@ public abstract class StatementCreatorUtils { /** * Derive a default SQL type from the given Java type. * @param javaType the Java type to translate - * @return the corresponding SQL type, or {@code null} if none found + * @return the corresponding SQL type, or {@link SqlTypeValue#TYPE_UNKNOWN} if none found */ - @Nullable public static int javaTypeToSqlParameterType(Class javaType) { Integer sqlType = javaTypeToSqlTypeMap.get(javaType); if (sqlType != null) { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java index 94fc7ce2cd..8d5e121cc1 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericCallMetaDataProvider.java @@ -30,6 +30,7 @@ import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.jdbc.core.SqlInOutParameter; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -105,8 +106,8 @@ public class GenericCallMetaDataProvider implements CallMetaDataProvider { } @Override - public void initializeWithProcedureColumnMetaData(DatabaseMetaData databaseMetaData, String catalogName, - String schemaName, String procedureName) throws SQLException { + public void initializeWithProcedureColumnMetaData(DatabaseMetaData databaseMetaData, @Nullable String catalogName, + @Nullable String schemaName, String procedureName) throws SQLException { this.procedureColumnMetaDataUsed = true; processProcedureColumns(databaseMetaData, catalogName, schemaName, procedureName); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java index dca39ff8dc..02cf92dda4 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/GenericTableMetaDataProvider.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.jdbc.support.JdbcUtils; +import org.springframework.lang.Nullable; /** * A generic implementation of the {@link TableMetaDataProvider} that should provide @@ -212,8 +213,8 @@ public class GenericTableMetaDataProvider implements TableMetaDataProvider { } @Override - public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData, String catalogName, - String schemaName, String tableName) throws SQLException { + public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData, @Nullable String catalogName, + @Nullable String schemaName, String tableName) throws SQLException { this.tableColumnMetaDataUsed = true; locateTableAndProcessMetaData(databaseMetaData, catalogName, schemaName, tableName); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/OracleTableMetaDataProvider.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/OracleTableMetaDataProvider.java index 41035336be..93ebbba666 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/OracleTableMetaDataProvider.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/metadata/OracleTableMetaDataProvider.java @@ -24,6 +24,7 @@ import java.sql.SQLException; import java.sql.Types; import org.springframework.dao.InvalidDataAccessApiUsageException; +import org.springframework.lang.Nullable; import org.springframework.util.ReflectionUtils; /** @@ -103,7 +104,7 @@ public class OracleTableMetaDataProvider extends GenericTableMetaDataProvider { @Override public void initializeWithTableColumnMetaData(DatabaseMetaData databaseMetaData, - String catalogName, String schemaName, String tableName) throws SQLException { + @Nullable String catalogName, @Nullable String schemaName, String tableName) throws SQLException { if (!this.includeSynonyms) { logger.debug("Defaulting to no synonyms in table metadata lookup"); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/object/GenericSqlQuery.java b/spring-jdbc/src/main/java/org/springframework/jdbc/object/GenericSqlQuery.java index dbbfd5c1e0..84d7066b58 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/object/GenericSqlQuery.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/object/GenericSqlQuery.java @@ -20,6 +20,7 @@ import java.util.Map; import org.springframework.beans.BeanUtils; import org.springframework.jdbc.core.RowMapper; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -67,7 +68,7 @@ public class GenericSqlQuery extends SqlQuery { @Override @SuppressWarnings("unchecked") - protected RowMapper newRowMapper(Object[] parameters, Map context) { + protected RowMapper newRowMapper(@Nullable Object[] parameters, Map context) { return (this.rowMapper != null ? this.rowMapper : BeanUtils.instantiateClass(this.rowMapperClass)); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQuery.java b/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQuery.java index e88a9c82a1..d598e48ed6 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQuery.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQuery.java @@ -21,6 +21,8 @@ import java.sql.SQLException; import java.util.Map; import javax.sql.DataSource; +import org.springframework.lang.Nullable; + /** * Reusable query in which concrete subclasses must implement the abstract * mapRow(ResultSet, int) method to convert each row of the JDBC ResultSet @@ -59,7 +61,7 @@ public abstract class MappingSqlQuery extends MappingSqlQueryWithParameters context) + protected final T mapRow(ResultSet rs, int rowNum, @Nullable Object[] parameters, @Nullable Map context) throws SQLException { return mapRow(rs, rowNum); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQueryWithParameters.java b/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQueryWithParameters.java index f6fd55637b..ef18805bd9 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQueryWithParameters.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/object/MappingSqlQueryWithParameters.java @@ -72,7 +72,7 @@ public abstract class MappingSqlQueryWithParameters extends SqlQuery { * implementation of the mapRow() method. */ @Override - protected RowMapper newRowMapper(Object[] parameters, Map context) { + protected RowMapper newRowMapper(@Nullable Object[] parameters, Map context) { return new RowMapperImpl(parameters, context); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/object/UpdatableSqlQuery.java b/spring-jdbc/src/main/java/org/springframework/jdbc/object/UpdatableSqlQuery.java index 326b2eaf18..655005973b 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/object/UpdatableSqlQuery.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/object/UpdatableSqlQuery.java @@ -61,7 +61,7 @@ public abstract class UpdatableSqlQuery extends SqlQuery { * implementation of the {@code updateRow()} method. */ @Override - protected RowMapper newRowMapper(Object[] parameters, Map context) { + protected RowMapper newRowMapper(@Nullable Object[] parameters, Map context) { return new RowMapperImpl(context); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/AbstractFallbackSQLExceptionTranslator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/AbstractFallbackSQLExceptionTranslator.java index 639f374f0a..1997cdc4f0 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/AbstractFallbackSQLExceptionTranslator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/AbstractFallbackSQLExceptionTranslator.java @@ -63,7 +63,7 @@ public abstract class AbstractFallbackSQLExceptionTranslator implements SQLExcep * {@link #getFallbackTranslator() fallback translator} if necessary. */ @Override - public DataAccessException translate(String task, String sql, SQLException ex) { + public DataAccessException translate(String task, @Nullable String sql, SQLException ex) { Assert.notNull(ex, "Cannot translate a null SQLException"); if (task == null) { task = ""; diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslator.java index 77b54ba5ce..798fa0d179 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslator.java @@ -167,7 +167,7 @@ public class SQLErrorCodeSQLExceptionTranslator extends AbstractFallbackSQLExcep @Override - protected DataAccessException doTranslate(String task, String sql, SQLException ex) { + protected DataAccessException doTranslate(String task, @Nullable String sql, SQLException ex) { SQLException sqlEx = ex; if (sqlEx instanceof BatchUpdateException && sqlEx.getNextException() != null) { SQLException nestedSqlEx = sqlEx.getNextException(); @@ -297,6 +297,7 @@ public class SQLErrorCodeSQLExceptionTranslator extends AbstractFallbackSQLExcep * as a nested root cause. This implementation always returns null, meaning that * the translator always falls back to the default error codes. */ + @Nullable protected DataAccessException customTranslate(String task, @Nullable String sql, SQLException sqlEx) { return null; } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLExceptionSubclassTranslator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLExceptionSubclassTranslator.java index 78455c1865..0e2acb7c6c 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLExceptionSubclassTranslator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLExceptionSubclassTranslator.java @@ -40,6 +40,7 @@ import org.springframework.dao.QueryTimeoutException; import org.springframework.dao.RecoverableDataAccessException; import org.springframework.dao.TransientDataAccessResourceException; import org.springframework.jdbc.BadSqlGrammarException; +import org.springframework.lang.Nullable; /** * {@link SQLExceptionTranslator} implementation which analyzes the specific @@ -62,7 +63,8 @@ public class SQLExceptionSubclassTranslator extends AbstractFallbackSQLException } @Override - protected DataAccessException doTranslate(String task, String sql, SQLException ex) { + @Nullable + protected DataAccessException doTranslate(String task, @Nullable String sql, SQLException ex) { if (ex instanceof SQLTransientException) { if (ex instanceof SQLTransientConnectionException) { return new TransientDataAccessResourceException(buildMessage(task, sql, ex), ex); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java index 30f4f582e8..9d8ea69588 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java @@ -27,6 +27,7 @@ import org.springframework.dao.DataIntegrityViolationException; import org.springframework.dao.QueryTimeoutException; import org.springframework.dao.TransientDataAccessResourceException; import org.springframework.jdbc.BadSqlGrammarException; +import org.springframework.lang.Nullable; /** * {@link SQLExceptionTranslator} implementation that analyzes the SQL state in @@ -87,7 +88,7 @@ public class SQLStateSQLExceptionTranslator extends AbstractFallbackSQLException @Override - protected DataAccessException doTranslate(String task, String sql, SQLException ex) { + protected DataAccessException doTranslate(String task, @Nullable String sql, SQLException ex) { // First, the getSQLState check... String sqlState = getSqlState(ex); if (sqlState != null && sqlState.length() >= 2) { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java index 7c4b047d6e..1aed141222 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/DefaultLobHandler.java @@ -31,6 +31,8 @@ import java.sql.SQLException; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.lang.Nullable; + /** * Default implementation of the {@link LobHandler} interface. * Invokes the direct accessor methods that {@code java.sql.ResultSet} @@ -218,7 +220,7 @@ public class DefaultLobHandler extends AbstractLobHandler { protected class DefaultLobCreator implements LobCreator { @Override - public void setBlobAsBytes(PreparedStatement ps, int paramIndex, byte[] content) + public void setBlobAsBytes(PreparedStatement ps, int paramIndex, @Nullable byte[] content) throws SQLException { if (streamAsLob) { @@ -248,7 +250,7 @@ public class DefaultLobHandler extends AbstractLobHandler { @Override public void setBlobAsBinaryStream( - PreparedStatement ps, int paramIndex, InputStream binaryStream, int contentLength) + PreparedStatement ps, int paramIndex, @Nullable InputStream binaryStream, int contentLength) throws SQLException { if (streamAsLob) { @@ -285,7 +287,7 @@ public class DefaultLobHandler extends AbstractLobHandler { } @Override - public void setClobAsString(PreparedStatement ps, int paramIndex, String content) + public void setClobAsString(PreparedStatement ps, int paramIndex, @Nullable String content) throws SQLException { if (streamAsLob) { @@ -315,7 +317,7 @@ public class DefaultLobHandler extends AbstractLobHandler { @Override public void setClobAsAsciiStream( - PreparedStatement ps, int paramIndex, InputStream asciiStream, int contentLength) + PreparedStatement ps, int paramIndex, @Nullable InputStream asciiStream, int contentLength) throws SQLException { if (streamAsLob) { @@ -359,7 +361,7 @@ public class DefaultLobHandler extends AbstractLobHandler { @Override public void setClobAsCharacterStream( - PreparedStatement ps, int paramIndex, Reader characterStream, int contentLength) + PreparedStatement ps, int paramIndex, @Nullable Reader characterStream, int contentLength) throws SQLException { if (streamAsLob) { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/TemporaryLobCreator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/TemporaryLobCreator.java index e41154b7b1..93b1b67e7d 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/TemporaryLobCreator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/lob/TemporaryLobCreator.java @@ -30,6 +30,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.lang.Nullable; import org.springframework.util.FileCopyUtils; /** @@ -56,7 +57,7 @@ public class TemporaryLobCreator implements LobCreator { @Override - public void setBlobAsBytes(PreparedStatement ps, int paramIndex, byte[] content) + public void setBlobAsBytes(PreparedStatement ps, int paramIndex, @Nullable byte[] content) throws SQLException { Blob blob = ps.getConnection().createBlob(); @@ -73,7 +74,7 @@ public class TemporaryLobCreator implements LobCreator { @Override public void setBlobAsBinaryStream( - PreparedStatement ps, int paramIndex, InputStream binaryStream, int contentLength) + PreparedStatement ps, int paramIndex, @Nullable InputStream binaryStream, int contentLength) throws SQLException { Blob blob = ps.getConnection().createBlob(); @@ -95,7 +96,7 @@ public class TemporaryLobCreator implements LobCreator { } @Override - public void setClobAsString(PreparedStatement ps, int paramIndex, String content) + public void setClobAsString(PreparedStatement ps, int paramIndex, @Nullable String content) throws SQLException { Clob clob = ps.getConnection().createClob(); @@ -112,7 +113,7 @@ public class TemporaryLobCreator implements LobCreator { @Override public void setClobAsAsciiStream( - PreparedStatement ps, int paramIndex, InputStream asciiStream, int contentLength) + PreparedStatement ps, int paramIndex, @Nullable InputStream asciiStream, int contentLength) throws SQLException { Clob clob = ps.getConnection().createClob(); @@ -135,7 +136,7 @@ public class TemporaryLobCreator implements LobCreator { @Override public void setClobAsCharacterStream( - PreparedStatement ps, int paramIndex, Reader characterStream, int contentLength) + PreparedStatement ps, int paramIndex, @Nullable Reader characterStream, int contentLength) throws SQLException { Clob clob = ps.getConnection().createClob(); diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlQueryTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlQueryTests.java index 60e79cd3b9..dfcd8d62a2 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlQueryTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/object/SqlQueryTests.java @@ -38,6 +38,7 @@ import org.springframework.dao.IncorrectResultSizeDataAccessException; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.jdbc.Customer; import org.springframework.jdbc.core.SqlParameter; +import org.springframework.lang.Nullable; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; @@ -106,7 +107,7 @@ public class SqlQueryTests { SqlQuery query = new MappingSqlQueryWithParameters() { @Override - protected Integer mapRow(ResultSet rs, int rownum, Object[] params, Map context) + protected Integer mapRow(ResultSet rs, int rownum, @Nullable Object[] params, @Nullable Map context) throws SQLException { assertTrue("params were null", params == null); assertTrue("context was null", context == null); @@ -729,7 +730,7 @@ public class SqlQueryTests { } @Override - protected Customer updateRow(ResultSet rs, int rownum, Map context) + protected Customer updateRow(ResultSet rs, int rownum, @Nullable Map context) throws SQLException { rs.updateString(2, "" + context.get(rs.getInt(COLUMN_NAMES[0]))); return null; diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/object/StoredProcedureTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/object/StoredProcedureTests.java index 573fe14ef3..9668204f59 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/object/StoredProcedureTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/object/StoredProcedureTests.java @@ -49,6 +49,7 @@ import org.springframework.jdbc.core.support.AbstractSqlTypeValue; import org.springframework.jdbc.datasource.ConnectionHolder; import org.springframework.jdbc.support.SQLExceptionTranslator; import org.springframework.jdbc.support.SQLStateSQLExceptionTranslator; +import org.springframework.lang.Nullable; import org.springframework.transaction.support.TransactionSynchronizationManager; import static org.junit.Assert.*; @@ -689,7 +690,8 @@ public class StoredProcedureTests { getJdbcTemplate().setExceptionTranslator(new SQLExceptionTranslator() { @Override - public DataAccessException translate(String task, String sql, + @Nullable + public DataAccessException translate(String task, @Nullable String sql, SQLException sqlex) { return new CustomDataException(sql, sqlex); } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSqlExceptionTranslator.java b/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSqlExceptionTranslator.java index 92ad3235b0..3bdf60a1ae 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSqlExceptionTranslator.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/support/CustomSqlExceptionTranslator.java @@ -20,6 +20,7 @@ import java.sql.SQLException; import org.springframework.dao.DataAccessException; import org.springframework.dao.TransientDataAccessResourceException; +import org.springframework.lang.Nullable; /** * Custom SQLException translation for testing. @@ -28,7 +29,7 @@ import org.springframework.dao.TransientDataAccessResourceException; */ public class CustomSqlExceptionTranslator implements SQLExceptionTranslator { @Override - public DataAccessException translate(String task, String sql, SQLException ex) { + public DataAccessException translate(String task, @Nullable String sql, SQLException ex) { if (ex.getErrorCode() == 2) { return new TransientDataAccessResourceException("Custom", ex); } diff --git a/spring-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslatorTests.java b/spring-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslatorTests.java index 20993a141f..d82ca3e3ad 100644 --- a/spring-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslatorTests.java +++ b/spring-jdbc/src/test/java/org/springframework/jdbc/support/SQLErrorCodeSQLExceptionTranslatorTests.java @@ -33,6 +33,7 @@ import org.springframework.dao.DeadlockLoserDataAccessException; import org.springframework.dao.DuplicateKeyException; import org.springframework.jdbc.BadSqlGrammarException; import org.springframework.jdbc.InvalidResultSetAccessException; +import org.springframework.lang.Nullable; import static org.junit.Assert.*; @@ -134,7 +135,8 @@ public class SQLErrorCodeSQLExceptionTranslatorTests { SQLErrorCodeSQLExceptionTranslator sext = new SQLErrorCodeSQLExceptionTranslator() { @Override - protected DataAccessException customTranslate(String task, String sql, SQLException sqlex) { + @Nullable + protected DataAccessException customTranslate(String task, @Nullable String sql, SQLException sqlex) { assertEquals(TASK, task); assertEquals(SQL, sql); return (sqlex == badSqlEx) ? customDex : null; diff --git a/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerProxyFactoryBean.java b/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerProxyFactoryBean.java index 1a6986964e..7ca54c1068 100644 --- a/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerProxyFactoryBean.java +++ b/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerProxyFactoryBean.java @@ -19,6 +19,7 @@ package org.springframework.jms.remoting; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.FactoryBean; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -65,7 +66,7 @@ public class JmsInvokerProxyFactoryBean extends JmsInvokerClientInterceptor } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java index 41ffe651e9..32150765b6 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/converter/MappingJackson2MessageConverter.java @@ -168,7 +168,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } @@ -196,7 +196,7 @@ public class MappingJackson2MessageConverter implements SmartMessageConverter, B } @Override - public Message toMessage(Object object, Session session, Object conversionHint) + public Message toMessage(Object object, Session session, @Nullable Object conversionHint) throws JMSException, MessageConversionException { return toMessage(object, session, getSerializationView(conversionHint)); diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java index 73591a51eb..477e5506b3 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/BeanFactoryDestinationResolver.java @@ -23,6 +23,7 @@ import javax.jms.Session; import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -70,7 +71,7 @@ public class BeanFactoryDestinationResolver implements DestinationResolver, Bean @Override - public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) + public Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain) throws JMSException { Assert.state(this.beanFactory != null, "BeanFactory is required"); diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java index 7efbf9c6c7..f6517e0c99 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/DynamicDestinationResolver.java @@ -22,6 +22,7 @@ import javax.jms.Queue; import javax.jms.Session; import javax.jms.Topic; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -46,7 +47,7 @@ public class DynamicDestinationResolver implements DestinationResolver { * @see #resolveQueue(javax.jms.Session, String) */ @Override - public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) + public Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain) throws JMSException { Assert.notNull(session, "Session must not be null"); diff --git a/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java b/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java index 2a5baa6bcb..a3743bc8e3 100644 --- a/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java +++ b/spring-jms/src/main/java/org/springframework/jms/support/destination/JndiDestinationResolver.java @@ -26,6 +26,7 @@ import javax.jms.Topic; import javax.naming.NamingException; import org.springframework.jndi.JndiLocatorSupport; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -99,7 +100,7 @@ public class JndiDestinationResolver extends JndiLocatorSupport implements Cachi @Override - public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) + public Destination resolveDestinationName(@Nullable Session session, String destinationName, boolean pubSubDomain) throws JMSException { Assert.notNull(destinationName, "Destination name must not be null"); diff --git a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java index 5b20d36e75..366c1e56f2 100644 --- a/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/annotation/AbstractJmsAnnotationDrivenTests.java @@ -33,6 +33,7 @@ import org.springframework.jms.config.MethodJmsListenerEndpoint; import org.springframework.jms.config.SimpleJmsListenerEndpoint; import org.springframework.jms.listener.SimpleMessageListenerContainer; import org.springframework.jms.listener.adapter.MessagingMessageListenerAdapter; +import org.springframework.lang.Nullable; import org.springframework.messaging.handler.annotation.SendTo; import org.springframework.stereotype.Component; import org.springframework.util.ReflectionUtils; @@ -303,7 +304,7 @@ public abstract class AbstractJmsAnnotationDrivenTests { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { String value = (String) target; if ("failValidation".equals(value)) { errors.reject("TEST: expected invalid value"); diff --git a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java index 1580d09b46..7e6cc82e7f 100644 --- a/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/config/MethodJmsListenerEndpointTests.java @@ -50,6 +50,7 @@ import org.springframework.jms.support.JmsMessageHeaderAccessor; import org.springframework.jms.support.QosSettings; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.destination.DestinationResolver; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.converter.MessageConversionException; @@ -504,7 +505,7 @@ public class MethodJmsListenerEndpointTests { return String.class.isAssignableFrom(clazz); } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { String value = (String) target; if (invalidValue.equals(value)) { errors.reject("not a valid value"); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java index 77cac86386..21fa209198 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/AbstractMessageConverter.java @@ -170,7 +170,7 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter } @Override - public final Object fromMessage(Message message, Class targetClass, Object conversionHint) { + public final Object fromMessage(Message message, Class targetClass, @Nullable Object conversionHint) { if (!canConvertFrom(message, targetClass)) { return null; } @@ -182,12 +182,12 @@ public abstract class AbstractMessageConverter implements SmartMessageConverter } @Override - public final Message toMessage(Object payload, MessageHeaders headers) { + public final Message toMessage(Object payload, @Nullable MessageHeaders headers) { return toMessage(payload, headers, null); } @Override - public final Message toMessage(Object payload, MessageHeaders headers, Object conversionHint) { + public final Message toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { if (!canConvertTo(payload, headers)) { return null; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/ByteArrayMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/ByteArrayMessageConverter.java index a89790aa12..8428760af1 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/ByteArrayMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/ByteArrayMessageConverter.java @@ -16,6 +16,7 @@ package org.springframework.messaging.converter; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.util.MimeTypeUtils; @@ -40,12 +41,14 @@ public class ByteArrayMessageConverter extends AbstractMessageConverter { } @Override - protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + @Nullable + protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { return message.getPayload(); } @Override - protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) { + @Nullable + protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { return payload; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/CompositeMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/CompositeMessageConverter.java index f9d324bcdd..30832f86d3 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/CompositeMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/CompositeMessageConverter.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.util.Assert; @@ -61,7 +62,7 @@ public class CompositeMessageConverter implements SmartMessageConverter { } @Override - public Object fromMessage(Message message, Class targetClass, Object conversionHint) { + public Object fromMessage(Message message, Class targetClass, @Nullable Object conversionHint) { for (MessageConverter converter : getConverters()) { Object result = (converter instanceof SmartMessageConverter ? ((SmartMessageConverter) converter).fromMessage(message, targetClass, conversionHint) : @@ -74,7 +75,7 @@ public class CompositeMessageConverter implements SmartMessageConverter { } @Override - public Message toMessage(Object payload, MessageHeaders headers) { + public Message toMessage(Object payload, @Nullable MessageHeaders headers) { for (MessageConverter converter : getConverters()) { Message result = converter.toMessage(payload, headers); if (result != null) { @@ -85,7 +86,7 @@ public class CompositeMessageConverter implements SmartMessageConverter { } @Override - public Message toMessage(Object payload, MessageHeaders headers, Object conversionHint) { + public Message toMessage(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { for (MessageConverter converter : getConverters()) { Message result = (converter instanceof SmartMessageConverter ? ((SmartMessageConverter) converter).toMessage(payload, headers, conversionHint) : diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java index 9b47869158..21c8e3d34e 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/MappingJackson2MessageConverter.java @@ -199,7 +199,7 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter { } @Override - protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { JavaType javaType = this.objectMapper.constructType(targetClass); Object payload = message.getPayload(); Class view = getSerializationView(conversionHint); @@ -228,7 +228,8 @@ public class MappingJackson2MessageConverter extends AbstractMessageConverter { } @Override - protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) { + @Nullable + protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { try { Class view = getSerializationView(conversionHint); if (byte[].class == getSerializedPayloadClass()) { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java index 965af15880..52475440e0 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/MarshallingMessageConverter.java @@ -28,6 +28,7 @@ import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import org.springframework.beans.TypeMismatchException; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.oxm.Marshaller; @@ -134,7 +135,8 @@ public class MarshallingMessageConverter extends AbstractMessageConverter { } @Override - protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + @Nullable + protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { Assert.notNull(this.unmarshaller, "Property 'unmarshaller' is required"); try { Source source = getSource(message.getPayload()); @@ -159,7 +161,8 @@ public class MarshallingMessageConverter extends AbstractMessageConverter { } @Override - protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) { + @Nullable + protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { Assert.notNull(this.marshaller, "Property 'marshaller' is required"); try { if (byte[].class == getSerializedPayloadClass()) { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/SimpleMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/SimpleMessageConverter.java index dd93d44b5a..07754d6a43 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/SimpleMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/SimpleMessageConverter.java @@ -16,6 +16,7 @@ package org.springframework.messaging.converter; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.MessageBuilder; @@ -44,7 +45,7 @@ public class SimpleMessageConverter implements MessageConverter { } @Override - public Message toMessage(Object payload, MessageHeaders headers) { + public Message toMessage(Object payload, @Nullable MessageHeaders headers) { if (payload == null) { return null; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/converter/StringMessageConverter.java b/spring-messaging/src/main/java/org/springframework/messaging/converter/StringMessageConverter.java index c2b7bc0a3d..618f4e3fbc 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/converter/StringMessageConverter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/converter/StringMessageConverter.java @@ -19,6 +19,7 @@ package org.springframework.messaging.converter; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.util.MimeType; @@ -51,14 +52,14 @@ public class StringMessageConverter extends AbstractMessageConverter { } @Override - protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { Charset charset = getContentTypeCharset(getMimeType(message.getHeaders())); Object payload = message.getPayload(); return (payload instanceof String ? payload : new String((byte[]) payload, charset)); } @Override - protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) { + protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { if (byte[].class == getSerializedPayloadClass()) { Charset charset = getContentTypeCharset(getMimeType(headers)); payload = ((String) payload).getBytes(charset); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java index 7417ae7a55..587aab5d98 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessagingTemplate.java @@ -18,6 +18,7 @@ package org.springframework.messaging.simp; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageDeliveryException; @@ -202,22 +203,22 @@ public class SimpMessagingTemplate extends AbstractMessageSendingTemplate headers) throws MessagingException { + public void convertAndSendToUser(String user, String destination, @Nullable Object payload, + @Nullable Map headers) throws MessagingException { convertAndSendToUser(user, destination, payload, headers, null); } @Override - public void convertAndSendToUser(String user, String destination, Object payload, + public void convertAndSendToUser(String user, String destination, @Nullable Object payload, MessagePostProcessor postProcessor) throws MessagingException { convertAndSendToUser(user, destination, payload, null, postProcessor); } @Override - public void convertAndSendToUser(String user, String destination, Object payload, Map headers, - MessagePostProcessor postProcessor) throws MessagingException { + public void convertAndSendToUser(String user, String destination, Object payload, @Nullable Map headers, + @Nullable MessagePostProcessor postProcessor) throws MessagingException { Assert.notNull(user, "User must not be null"); user = StringUtils.replace(user, "/", "%2F"); @@ -238,7 +239,7 @@ public class SimpMessagingTemplate extends AbstractMessageSendingTemplate processHeadersToSend(Map headers) { + protected Map processHeadersToSend(@Nullable Map headers) { if (headers == null) { SimpMessageHeaderAccessor headerAccessor = SimpMessageHeaderAccessor.create(SimpMessageType.MESSAGE); initHeaders(headerAccessor); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java index 6730886357..6bf0844159 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/config/AbstractMessageBrokerConfiguration.java @@ -436,7 +436,7 @@ public abstract class AbstractMessageBrokerConfiguration implements ApplicationC return false; } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { } }; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSessionHandlerAdapter.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSessionHandlerAdapter.java index 6fd70cf362..0c6a214f18 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSessionHandlerAdapter.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSessionHandlerAdapter.java @@ -18,6 +18,8 @@ package org.springframework.messaging.simp.stomp; import java.lang.reflect.Type; +import org.springframework.lang.Nullable; + /** * Abstract adapter class for {@link StompSessionHandler} with mostly empty * implementation methods except for {@link #getPayloadType} which returns String @@ -48,7 +50,7 @@ public abstract class StompSessionHandlerAdapter implements StompSessionHandler * This implementation is empty. */ @Override - public void handleFrame(StompHeaders headers, Object payload) { + public void handleFrame(StompHeaders headers, @Nullable Object payload) { } /** diff --git a/spring-messaging/src/test/java/org/springframework/messaging/converter/MessageConverterTests.java b/spring-messaging/src/test/java/org/springframework/messaging/converter/MessageConverterTests.java index df866cd7f3..10e2940f47 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/converter/MessageConverterTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/converter/MessageConverterTests.java @@ -24,6 +24,7 @@ import java.util.Map; import org.junit.Test; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; @@ -156,12 +157,12 @@ public class MessageConverterTests { } @Override - protected Object convertFromInternal(Message message, Class targetClass, Object conversionHint) { + protected Object convertFromInternal(Message message, Class targetClass, @Nullable Object conversionHint) { return "success-from"; } @Override - protected Object convertToInternal(Object payload, MessageHeaders headers, Object conversionHint) { + protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { return "success-to"; } } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandlerTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandlerTests.java index 0d95859432..9b895bb898 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandlerTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/annotation/support/SimpAnnotationMethodMessageHandlerTests.java @@ -33,6 +33,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.springframework.context.support.StaticApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHeaders; @@ -511,7 +512,7 @@ public class SimpAnnotationMethodMessageHandlerTests { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { String value = (String) target; if (invalidValue.equals(value)) { errors.reject("invalid value '"+invalidValue+"'"); diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java index 5a868a75ef..65837755d7 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/config/MessageBrokerConfigurationTests.java @@ -31,6 +31,7 @@ import org.springframework.context.annotation.AnnotationConfigApplicationContext import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.StaticApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; import org.springframework.messaging.converter.ByteArrayMessageConverter; @@ -562,7 +563,7 @@ public class MessageBrokerConfigurationTests { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { } } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClientTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClientTests.java index df9ea9a7b5..67422399fd 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClientTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClientTests.java @@ -32,6 +32,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; +import org.springframework.lang.Nullable; import org.springframework.messaging.converter.StringMessageConverter; import org.springframework.messaging.simp.stomp.StompSession.Subscription; import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; @@ -139,7 +140,7 @@ public class ReactorNettyTcpStompClientTests { } @Override - public void handleFrame(StompHeaders headers, Object payload) { + public void handleFrame(StompHeaders headers, @Nullable Object payload) { logger.error("STOMP error frame " + headers + " payload=" + payload); } @@ -178,7 +179,7 @@ public class ReactorNettyTcpStompClientTests { return String.class; } @Override - public void handleFrame(StompHeaders headers, Object payload) { + public void handleFrame(StompHeaders headers, @Nullable Object payload) { received.add((String) payload); } }); diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewInterceptor.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewInterceptor.java index d44cc19109..729aa94ed1 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewInterceptor.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/support/OpenSessionInViewInterceptor.java @@ -25,6 +25,7 @@ import org.hibernate.SessionFactory; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.lang.Nullable; import org.springframework.orm.hibernate5.SessionFactoryUtils; import org.springframework.orm.hibernate5.SessionHolder; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -130,7 +131,7 @@ public class OpenSessionInViewInterceptor implements AsyncWebRequestInterceptor } @Override - public void postHandle(WebRequest request, ModelMap model) { + public void postHandle(WebRequest request, @Nullable ModelMap model) { } /** @@ -138,7 +139,7 @@ public class OpenSessionInViewInterceptor implements AsyncWebRequestInterceptor * @see TransactionSynchronizationManager */ @Override - public void afterCompletion(WebRequest request, Exception ex) throws DataAccessException { + public void afterCompletion(WebRequest request, @Nullable Exception ex) throws DataAccessException { if (!decrementParticipateCount(request)) { SessionHolder sessionHolder = (SessionHolder) TransactionSynchronizationManager.unbindResource(getSessionFactory()); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java index 15b985a35a..269f83a054 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/AbstractEntityManagerFactoryBean.java @@ -300,7 +300,7 @@ public abstract class AbstractEntityManagerFactoryBean implements } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java index 598a7a26d6..d1e8343040 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/DefaultJpaDialect.java @@ -23,6 +23,7 @@ import javax.persistence.PersistenceException; import org.springframework.dao.DataAccessException; import org.springframework.jdbc.datasource.ConnectionHandle; +import org.springframework.lang.Nullable; import org.springframework.transaction.InvalidIsolationLevelException; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; @@ -81,7 +82,7 @@ public class DefaultJpaDialect implements JpaDialect, Serializable { * @see #beginTransaction */ @Override - public void cleanupTransaction(Object transactionData) { + public void cleanupTransaction(@Nullable Object transactionData) { } /** diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java index af3743dcf4..0e1b5cb91d 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/OpenEntityManagerInViewInterceptor.java @@ -21,6 +21,7 @@ import javax.persistence.PersistenceException; import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.lang.Nullable; import org.springframework.orm.jpa.EntityManagerFactoryAccessor; import org.springframework.orm.jpa.EntityManagerFactoryUtils; import org.springframework.orm.jpa.EntityManagerHolder; @@ -99,11 +100,11 @@ public class OpenEntityManagerInViewInterceptor extends EntityManagerFactoryAcce } @Override - public void postHandle(WebRequest request, ModelMap model) { + public void postHandle(WebRequest request, @Nullable ModelMap model) { } @Override - public void afterCompletion(WebRequest request, Exception ex) throws DataAccessException { + public void afterCompletion(WebRequest request, @Nullable Exception ex) throws DataAccessException { if (!decrementParticipateCount(request)) { EntityManagerHolder emHolder = (EntityManagerHolder) TransactionSynchronizationManager.unbindResource(getEntityManagerFactory()); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java index 5e2db94140..37523cf143 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/vendor/HibernateJpaDialect.java @@ -200,7 +200,7 @@ public class HibernateJpaDialect extends DefaultJpaDialect { } @Override - public void cleanupTransaction(Object transactionData) { + public void cleanupTransaction(@Nullable Object transactionData) { ((SessionTransactionData) transactionData).resetSessionState(); } diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java index c123923361..e91833b6b9 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceContextTransactionTests.java @@ -27,6 +27,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.springframework.lang.Nullable; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.support.TransactionSynchronizationManager; @@ -69,7 +70,7 @@ public class PersistenceContextTransactionTests { @SuppressWarnings("serial") PersistenceAnnotationBeanPostProcessor pabpp = new PersistenceAnnotationBeanPostProcessor() { @Override - protected EntityManagerFactory findEntityManagerFactory(String unitName, String requestingBeanName) { + protected EntityManagerFactory findEntityManagerFactory(@Nullable String unitName, String requestingBeanName) { return factory; } }; diff --git a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java index a8b441c88b..5bc01918fc 100644 --- a/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java +++ b/spring-orm/src/test/java/org/springframework/orm/jpa/support/PersistenceInjectionTests.java @@ -37,6 +37,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.support.GenericApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.orm.jpa.AbstractEntityManagerFactoryBeanTests; import org.springframework.orm.jpa.DefaultJpaDialect; import org.springframework.orm.jpa.EntityManagerFactoryInfo; @@ -697,7 +698,7 @@ public class PersistenceInjectionTests extends AbstractEntityManagerFactoryBeanT private static class MockPersistenceAnnotationBeanPostProcessor extends PersistenceAnnotationBeanPostProcessor { @Override - protected EntityManagerFactory findEntityManagerFactory(String emfName, String requestingBeanName) { + protected EntityManagerFactory findEntityManagerFactory(@Nullable String emfName, String requestingBeanName) { return mockEmf; } } diff --git a/spring-oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java index 391e44f31e..6ebcdf4548 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/castor/CastorMarshaller.java @@ -52,6 +52,7 @@ import org.xml.sax.ext.LexicalHandler; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.oxm.MarshallingFailureException; import org.springframework.oxm.UncategorizedMappingException; import org.springframework.oxm.UnmarshallingFailureException; @@ -428,7 +429,7 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } @@ -518,7 +519,7 @@ public class CastorMarshaller extends AbstractMarshaller implements Initializing } @Override - protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, LexicalHandler lexicalHandler) + protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, @Nullable LexicalHandler lexicalHandler) throws XmlMappingException { Marshaller marshaller = xmlContext.createMarshaller(); diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java index 00896f3528..84bca60307 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jaxb/Jaxb2Marshaller.java @@ -81,6 +81,7 @@ import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.InitializingBean; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.oxm.GenericMarshaller; import org.springframework.oxm.GenericUnmarshaller; import org.springframework.oxm.MarshallingFailureException; @@ -431,7 +432,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java index c481fd1b21..9a98dad47c 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/jibx/JibxMarshaller.java @@ -60,6 +60,7 @@ import org.xml.sax.XMLReader; import org.xml.sax.ext.LexicalHandler; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.oxm.MarshallingFailureException; import org.springframework.oxm.UnmarshallingFailureException; import org.springframework.oxm.ValidationFailureException; @@ -321,7 +322,7 @@ public class JibxMarshaller extends AbstractMarshaller implements InitializingBe } @Override - protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, LexicalHandler lexicalHandler) + protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, @Nullable LexicalHandler lexicalHandler) throws XmlMappingException { try { // JiBX does not support SAX natively, so we write to a buffer first, and transform that to the handlers diff --git a/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java index c5f09841f7..914e8d1d94 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/xstream/XStreamMarshaller.java @@ -74,6 +74,7 @@ import org.xml.sax.ext.LexicalHandler; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.oxm.MarshallingFailureException; import org.springframework.oxm.UncategorizedMappingException; import org.springframework.oxm.UnmarshallingFailureException; @@ -379,7 +380,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } @@ -663,7 +664,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo } @Override - protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, LexicalHandler lexicalHandler) + protected void marshalSaxHandlers(Object graph, ContentHandler contentHandler, @Nullable LexicalHandler lexicalHandler) throws XmlMappingException { SaxWriter saxWriter = new SaxWriter(this.nameCoder); diff --git a/spring-test/src/main/java/org/springframework/test/context/cache/DefaultCacheAwareContextLoaderDelegate.java b/spring-test/src/main/java/org/springframework/test/context/cache/DefaultCacheAwareContextLoaderDelegate.java index 5ada74297e..340d15db7b 100644 --- a/spring-test/src/main/java/org/springframework/test/context/cache/DefaultCacheAwareContextLoaderDelegate.java +++ b/spring-test/src/main/java/org/springframework/test/context/cache/DefaultCacheAwareContextLoaderDelegate.java @@ -20,6 +20,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.test.annotation.DirtiesContext.HierarchyMode; import org.springframework.test.context.CacheAwareContextLoaderDelegate; import org.springframework.test.context.ContextLoader; @@ -138,7 +139,7 @@ public class DefaultCacheAwareContextLoaderDelegate implements CacheAwareContext } @Override - public void closeContext(MergedContextConfiguration mergedContextConfiguration, HierarchyMode hierarchyMode) { + public void closeContext(MergedContextConfiguration mergedContextConfiguration, @Nullable HierarchyMode hierarchyMode) { synchronized (this.contextCache) { this.contextCache.remove(mergedContextConfiguration, hierarchyMode); } diff --git a/spring-test/src/main/java/org/springframework/test/context/cache/DefaultContextCache.java b/spring-test/src/main/java/org/springframework/test/context/cache/DefaultContextCache.java index ca6f471179..051acbbb50 100644 --- a/spring-test/src/main/java/org/springframework/test/context/cache/DefaultContextCache.java +++ b/spring-test/src/main/java/org/springframework/test/context/cache/DefaultContextCache.java @@ -32,6 +32,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.style.ToStringCreator; +import org.springframework.lang.Nullable; import org.springframework.test.annotation.DirtiesContext.HierarchyMode; import org.springframework.test.context.MergedContextConfiguration; import org.springframework.util.Assert; @@ -156,7 +157,7 @@ public class DefaultContextCache implements ContextCache { * {@inheritDoc} */ @Override - public void remove(MergedContextConfiguration key, HierarchyMode hierarchyMode) { + public void remove(MergedContextConfiguration key, @Nullable HierarchyMode hierarchyMode) { Assert.notNull(key, "Key must not be null"); // startKey is the level at which to begin clearing the cache, depending diff --git a/spring-test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java index 10a5501b9f..654217ac94 100644 --- a/spring-test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/support/AbstractContextLoader.java @@ -91,7 +91,7 @@ public abstract class AbstractContextLoader implements SmartContextLoader { * @see #processLocations(Class, String...) */ @Override - public void processContextConfiguration(ContextConfigurationAttributes configAttributes) { + public void processContextConfiguration(@Nullable ContextConfigurationAttributes configAttributes) { String[] processedLocations = processLocations(configAttributes.getDeclaringClass(), configAttributes.getLocations()); configAttributes.setLocations(processedLocations); diff --git a/spring-test/src/main/java/org/springframework/test/context/support/AbstractDelegatingSmartContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/support/AbstractDelegatingSmartContextLoader.java index 8ad57737f6..a7fcd3d56f 100644 --- a/spring-test/src/main/java/org/springframework/test/context/support/AbstractDelegatingSmartContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/support/AbstractDelegatingSmartContextLoader.java @@ -23,6 +23,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.ApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfigurationAttributes; import org.springframework.test.context.ContextLoader; @@ -268,7 +269,7 @@ public abstract class AbstractDelegatingSmartContextLoader implements SmartConte * @throws UnsupportedOperationException */ @Override - public final String[] processLocations(Class clazz, String... locations) { + public final String[] processLocations(Class clazz, @Nullable String... locations) { throw new UnsupportedOperationException("DelegatingSmartContextLoaders do not support the ContextLoader SPI. " + "Call processContextConfiguration(ContextConfigurationAttributes) instead."); } diff --git a/spring-test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java index c2b0399a2e..073f8a25ac 100644 --- a/spring-test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/support/AnnotationConfigContextLoader.java @@ -22,6 +22,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.support.BeanDefinitionReader; import org.springframework.context.annotation.AnnotatedBeanDefinitionReader; import org.springframework.context.support.GenericApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfigurationAttributes; import org.springframework.test.context.MergedContextConfiguration; import org.springframework.util.ObjectUtils; @@ -78,7 +79,7 @@ public class AnnotationConfigContextLoader extends AbstractGenericContextLoader * @see #detectDefaultConfigurationClasses(Class) */ @Override - public void processContextConfiguration(ContextConfigurationAttributes configAttributes) { + public void processContextConfiguration(@Nullable ContextConfigurationAttributes configAttributes) { if (!configAttributes.hasClasses() && isGenerateDefaultLocations()) { configAttributes.setClasses(detectDefaultConfigurationClasses(configAttributes.getDeclaringClass())); } diff --git a/spring-test/src/main/java/org/springframework/test/context/support/DefaultTestContext.java b/spring-test/src/main/java/org/springframework/test/context/support/DefaultTestContext.java index 72da428519..0f66bf0284 100644 --- a/spring-test/src/main/java/org/springframework/test/context/support/DefaultTestContext.java +++ b/spring-test/src/main/java/org/springframework/test/context/support/DefaultTestContext.java @@ -23,6 +23,7 @@ import java.util.concurrent.ConcurrentHashMap; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.core.style.ToStringCreator; +import org.springframework.lang.Nullable; import org.springframework.test.annotation.DirtiesContext.HierarchyMode; import org.springframework.test.context.CacheAwareContextLoaderDelegate; import org.springframework.test.context.MergedContextConfiguration; @@ -122,7 +123,7 @@ public class DefaultTestContext implements TestContext { * that was supplied when this {@code TestContext} was constructed. * @see CacheAwareContextLoaderDelegate#closeContext */ - public void markApplicationContextDirty(HierarchyMode hierarchyMode) { + public void markApplicationContextDirty(@Nullable HierarchyMode hierarchyMode) { this.cacheAwareContextLoaderDelegate.closeContext(this.mergedContextConfiguration, hierarchyMode); } @@ -142,14 +143,14 @@ public class DefaultTestContext implements TestContext { return this.testException; } - public void updateState(Object testInstance, Method testMethod, Throwable testException) { + public void updateState(@Nullable Object testInstance, @Nullable Method testMethod, @Nullable Throwable testException) { this.testInstance = testInstance; this.testMethod = testMethod; this.testException = testException; } @Override - public void setAttribute(String name, Object value) { + public void setAttribute(String name, @Nullable Object value) { Assert.notNull(name, "Name must not be null"); synchronized (this.attributes) { if (value != null) { diff --git a/spring-test/src/main/java/org/springframework/test/context/web/AnnotationConfigWebContextLoader.java b/spring-test/src/main/java/org/springframework/test/context/web/AnnotationConfigWebContextLoader.java index 64b12cde1c..658112d636 100644 --- a/spring-test/src/main/java/org/springframework/test/context/web/AnnotationConfigWebContextLoader.java +++ b/spring-test/src/main/java/org/springframework/test/context/web/AnnotationConfigWebContextLoader.java @@ -20,6 +20,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.context.annotation.AnnotatedBeanDefinitionReader; +import org.springframework.lang.Nullable; import org.springframework.test.context.ContextConfigurationAttributes; import org.springframework.test.context.MergedContextConfiguration; import org.springframework.test.context.support.AnnotationConfigContextLoaderUtils; @@ -79,7 +80,7 @@ public class AnnotationConfigWebContextLoader extends AbstractGenericWebContextL * @see #detectDefaultConfigurationClasses(Class) */ @Override - public void processContextConfiguration(ContextConfigurationAttributes configAttributes) { + public void processContextConfiguration(@Nullable ContextConfigurationAttributes configAttributes) { if (!configAttributes.hasClasses() && isGenerateDefaultLocations()) { configAttributes.setClasses(detectDefaultConfigurationClasses(configAttributes.getDeclaringClass())); } diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java b/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java index f073f4deee..f364d8fb0c 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/TestDispatcherServlet.java @@ -23,6 +23,7 @@ import javax.servlet.ServletRequest; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.lang.Nullable; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.context.request.async.CallableProcessingInterceptorAdapter; @@ -107,7 +108,7 @@ final class TestDispatcherServlet extends DispatcherServlet { @Override protected ModelAndView processHandlerException(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) throws Exception { + @Nullable Object handler, Exception ex) throws Exception { ModelAndView mav = super.processHandlerException(request, response, handler, ex); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java index 5f145570e7..74eaf8a222 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/htmlunit/HtmlUnitRequestBuilder.java @@ -413,7 +413,7 @@ final class HtmlUnitRequestBuilder implements RequestBuilder, Mergeable { } @Override - public Object merge(Object parent) { + public Object merge(@Nullable Object parent) { if (parent instanceof RequestBuilder) { if (parent instanceof MockHttpServletRequestBuilder) { MockHttpServletRequestBuilder copiedParent = MockMvcRequestBuilders.get("/"); diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java index 286f14e7b2..0a0e056ce1 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockHttpServletRequestBuilder.java @@ -487,7 +487,7 @@ public class MockHttpServletRequestBuilder * @return the result of the merge */ @Override - public Object merge(Object parent) { + public Object merge(@Nullable Object parent) { if (parent == null) { return this; } diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java index e026e0180e..8cfaefd8ed 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/request/MockMultipartHttpServletRequestBuilder.java @@ -25,6 +25,7 @@ import javax.servlet.http.Part; import org.springframework.http.HttpMethod; import org.springframework.http.MediaType; +import org.springframework.lang.Nullable; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockMultipartFile; import org.springframework.mock.web.MockMultipartHttpServletRequest; @@ -109,7 +110,7 @@ public class MockMultipartHttpServletRequestBuilder extends MockHttpServletReque } @Override - public Object merge(Object parent) { + public Object merge(@Nullable Object parent) { if (parent == null) { return this; } diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java index bd075cd906..c51545b469 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StandaloneMockMvcBuilder.java @@ -32,6 +32,7 @@ import org.springframework.context.ApplicationContextAware; import org.springframework.format.support.DefaultFormattingConversionService; import org.springframework.format.support.FormattingConversionService; import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.MockServletContext; import org.springframework.util.Assert; import org.springframework.util.ObjectUtils; @@ -504,7 +505,7 @@ public class StandaloneMockMvcBuilder extends AbstractMockMvcBuilder T getBean(String name, Class requiredType) throws BeansException { + public T getBean(String name, @Nullable Class requiredType) throws BeansException { return this.beanFactory.getBean(name, requiredType); } @@ -236,27 +237,27 @@ class StubWebApplicationContext implements WebApplicationContext { } @Override - public String[] getBeanNamesForType(ResolvableType type) { + public String[] getBeanNamesForType(@Nullable ResolvableType type) { return this.beanFactory.getBeanNamesForType(type); } @Override - public String[] getBeanNamesForType(Class type) { + public String[] getBeanNamesForType(@Nullable Class type) { return this.beanFactory.getBeanNamesForType(type); } @Override - public String[] getBeanNamesForType(Class type, boolean includeNonSingletons, boolean allowEagerInit) { + public String[] getBeanNamesForType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) { return this.beanFactory.getBeanNamesForType(type, includeNonSingletons, allowEagerInit); } @Override - public Map getBeansOfType(Class type) throws BeansException { + public Map getBeansOfType(@Nullable Class type) throws BeansException { return this.beanFactory.getBeansOfType(type); } @Override - public Map getBeansOfType(Class type, boolean includeNonSingletons, boolean allowEagerInit) + public Map getBeansOfType(@Nullable Class type, boolean includeNonSingletons, boolean allowEagerInit) throws BeansException { return this.beanFactory.getBeansOfType(type, includeNonSingletons, allowEagerInit); @@ -302,12 +303,12 @@ class StubWebApplicationContext implements WebApplicationContext { //--------------------------------------------------------------------- @Override - public String getMessage(String code, Object args[], String defaultMessage, Locale locale) { + public String getMessage(String code, @Nullable Object args[], String defaultMessage, Locale locale) { return this.messageSource.getMessage(code, args, defaultMessage, locale); } @Override - public String getMessage(String code, Object args[], Locale locale) throws NoSuchMessageException { + public String getMessage(String code, @Nullable Object args[], Locale locale) throws NoSuchMessageException { return this.messageSource.getMessage(code, args, locale); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/CompositeTransactionAttributeSource.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/CompositeTransactionAttributeSource.java index a0f1a193b5..521b2eca00 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/CompositeTransactionAttributeSource.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/CompositeTransactionAttributeSource.java @@ -19,6 +19,7 @@ package org.springframework.transaction.interceptor; import java.io.Serializable; import java.lang.reflect.Method; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -53,7 +54,8 @@ public class CompositeTransactionAttributeSource implements TransactionAttribute @Override - public TransactionAttribute getTransactionAttribute(Method method, Class targetClass) { + @Nullable + public TransactionAttribute getTransactionAttribute(Method method, @Nullable Class targetClass) { for (TransactionAttributeSource tas : this.transactionAttributeSources) { TransactionAttribute ta = tas.getTransactionAttribute(method, targetClass); if (ta != null) { diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/MatchAlwaysTransactionAttributeSource.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/MatchAlwaysTransactionAttributeSource.java index b1bb7bb604..f706adba4b 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/MatchAlwaysTransactionAttributeSource.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/MatchAlwaysTransactionAttributeSource.java @@ -19,6 +19,7 @@ package org.springframework.transaction.interceptor; import java.io.Serializable; import java.lang.reflect.Method; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -52,7 +53,7 @@ public class MatchAlwaysTransactionAttributeSource implements TransactionAttribu @Override - public TransactionAttribute getTransactionAttribute(Method method, Class targetClass) { + public TransactionAttribute getTransactionAttribute(Method method, @Nullable Class targetClass) { return (method == null || ClassUtils.isUserLevelMethod(method) ? this.transactionAttribute : null); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/MethodMapTransactionAttributeSource.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/MethodMapTransactionAttributeSource.java index 16692ca0bf..b022829a89 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/MethodMapTransactionAttributeSource.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/MethodMapTransactionAttributeSource.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; @@ -82,7 +83,7 @@ public class MethodMapTransactionAttributeSource } @Override - public void setBeanClassLoader(ClassLoader beanClassLoader) { + public void setBeanClassLoader(@Nullable ClassLoader beanClassLoader) { this.beanClassLoader = beanClassLoader; } @@ -207,7 +208,7 @@ public class MethodMapTransactionAttributeSource @Override - public TransactionAttribute getTransactionAttribute(Method method, Class targetClass) { + public TransactionAttribute getTransactionAttribute(Method method, @Nullable Class targetClass) { if (this.eagerlyInitialized) { return this.transactionAttributeMap.get(method); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/NameMatchTransactionAttributeSource.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/NameMatchTransactionAttributeSource.java index edd9376ed4..2efd477e24 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/NameMatchTransactionAttributeSource.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/NameMatchTransactionAttributeSource.java @@ -26,6 +26,7 @@ import java.util.Properties; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.PatternMatchUtils; @@ -100,7 +101,7 @@ public class NameMatchTransactionAttributeSource implements TransactionAttribute @Override - public TransactionAttribute getTransactionAttribute(Method method, Class targetClass) { + public TransactionAttribute getTransactionAttribute(Method method, @Nullable Class targetClass) { if (!ClassUtils.isUserLevelMethod(method)) { return null; } diff --git a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAttributeSourcePointcut.java b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAttributeSourcePointcut.java index d82040f20c..cb86c01842 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAttributeSourcePointcut.java +++ b/spring-tx/src/main/java/org/springframework/transaction/interceptor/TransactionAttributeSourcePointcut.java @@ -34,7 +34,7 @@ import org.springframework.util.ObjectUtils; abstract class TransactionAttributeSourcePointcut extends StaticMethodMatcherPointcut implements Serializable { @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { if (TransactionalProxy.class.isAssignableFrom(targetClass)) { return false; } diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java index 4be8ba19c3..8f9a07bf55 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/JtaTransactionManager.java @@ -1200,7 +1200,7 @@ public class JtaTransactionManager extends AbstractPlatformTransactionManager //--------------------------------------------------------------------- @Override - public Transaction createTransaction(String name, int timeout) throws NotSupportedException, SystemException { + public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException { TransactionManager tm = getTransactionManager(); Assert.state(tm != null, "No JTA TransactionManager available"); if (timeout >= 0) { diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java b/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java index b68abdce0b..2e62be52d8 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/SimpleTransactionFactory.java @@ -21,6 +21,7 @@ import javax.transaction.SystemException; import javax.transaction.Transaction; import javax.transaction.TransactionManager; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -51,7 +52,7 @@ public class SimpleTransactionFactory implements TransactionFactory { @Override - public Transaction createTransaction(String name, int timeout) throws NotSupportedException, SystemException { + public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException { if (timeout >= 0) { this.transactionManager.setTransactionTimeout(timeout); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java index b9d9474388..9c0ed4557d 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/jta/WebLogicJtaTransactionManager.java @@ -26,6 +26,7 @@ import javax.transaction.Transaction; import javax.transaction.TransactionManager; import javax.transaction.UserTransaction; +import org.springframework.lang.Nullable; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionSystemException; @@ -301,7 +302,7 @@ public class WebLogicJtaTransactionManager extends JtaTransactionManager { } @Override - public Transaction createTransaction(String name, int timeout) throws NotSupportedException, SystemException { + public Transaction createTransaction(@Nullable String name, int timeout) throws NotSupportedException, SystemException { if (this.weblogicUserTransactionAvailable && name != null) { try { if (timeout >= 0) { diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java index 8448fb6491..5fa6cfe7de 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractPlatformTransactionManager.java @@ -334,7 +334,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * @see #doBegin */ @Override - public final TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException { + public final TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException { Object transaction = doGetTransaction(); // Cache debug flag to avoid repeated checks. diff --git a/spring-tx/src/test/java/org/springframework/transaction/MockCallbackPreferringTransactionManager.java b/spring-tx/src/test/java/org/springframework/transaction/MockCallbackPreferringTransactionManager.java index 16c2eebd0d..61214cf87a 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/MockCallbackPreferringTransactionManager.java +++ b/spring-tx/src/test/java/org/springframework/transaction/MockCallbackPreferringTransactionManager.java @@ -16,6 +16,7 @@ package org.springframework.transaction; +import org.springframework.lang.Nullable; import org.springframework.transaction.support.CallbackPreferringPlatformTransactionManager; import org.springframework.transaction.support.SimpleTransactionStatus; import org.springframework.transaction.support.TransactionCallback; @@ -47,7 +48,7 @@ public class MockCallbackPreferringTransactionManager implements CallbackPreferr @Override - public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException { + public TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException { throw new UnsupportedOperationException(); } diff --git a/spring-tx/src/test/java/org/springframework/transaction/interceptor/BeanFactoryTransactionTests.java b/spring-tx/src/test/java/org/springframework/transaction/interceptor/BeanFactoryTransactionTests.java index bf13824c53..48461bc05e 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/interceptor/BeanFactoryTransactionTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/interceptor/BeanFactoryTransactionTests.java @@ -32,6 +32,7 @@ import org.springframework.beans.FatalBeanException; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.core.io.ClassPathResource; +import org.springframework.lang.Nullable; import org.springframework.tests.sample.beans.DerivedTestBean; import org.springframework.tests.sample.beans.ITestBean; import org.springframework.tests.sample.beans.TestBean; @@ -147,7 +148,7 @@ public class BeanFactoryTransactionTests { ptm = new PlatformTransactionManager() { private boolean invoked; @Override - public TransactionStatus getTransaction(TransactionDefinition def) throws TransactionException { + public TransactionStatus getTransaction(@Nullable TransactionDefinition def) throws TransactionException { if (invoked) { throw new IllegalStateException("getTransaction should not get invoked more than once"); } @@ -231,7 +232,7 @@ public class BeanFactoryTransactionTests { int counter = 0; @Override - public boolean matches(Method method, Class clazz) { + public boolean matches(Method method, @Nullable Class clazz) { counter++; return true; } diff --git a/spring-tx/src/test/java/org/springframework/transaction/interceptor/PlatformTransactionManagerFacade.java b/spring-tx/src/test/java/org/springframework/transaction/interceptor/PlatformTransactionManagerFacade.java index 0970132a94..ad3418a341 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/interceptor/PlatformTransactionManagerFacade.java +++ b/spring-tx/src/test/java/org/springframework/transaction/interceptor/PlatformTransactionManagerFacade.java @@ -16,6 +16,7 @@ package org.springframework.transaction.interceptor; +import org.springframework.lang.Nullable; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionStatus; @@ -38,7 +39,7 @@ public class PlatformTransactionManagerFacade implements PlatformTransactionMana public static PlatformTransactionManager delegate; @Override - public TransactionStatus getTransaction(TransactionDefinition definition) { + public TransactionStatus getTransaction(@Nullable TransactionDefinition definition) { return delegate.getTransaction(definition); } diff --git a/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java b/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java index 8efcd8f811..bc1d76c6ea 100644 --- a/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java +++ b/spring-tx/src/test/java/org/springframework/transaction/interceptor/TransactionInterceptorTests.java @@ -26,6 +26,7 @@ import org.junit.rules.ExpectedException; import org.springframework.aop.framework.ProxyFactory; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.NoSuchBeanDefinitionException; +import org.springframework.lang.Nullable; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; @@ -303,7 +304,7 @@ public class TransactionInterceptorTests extends AbstractTransactionAspectTests public static class SerializableTransactionManager implements PlatformTransactionManager, Serializable { @Override - public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException { + public TransactionStatus getTransaction(@Nullable TransactionDefinition definition) throws TransactionException { throw new UnsupportedOperationException(); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/DecoderHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/DecoderHttpMessageReader.java index 00caae30fc..f5122343ad 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/DecoderHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/DecoderHttpMessageReader.java @@ -31,6 +31,7 @@ import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -76,7 +77,7 @@ public class DecoderHttpMessageReader implements HttpMessageReader { @Override - public boolean canRead(ResolvableType elementType, MediaType mediaType) { + public boolean canRead(ResolvableType elementType, @Nullable MediaType mediaType) { return this.decoder.canDecode(elementType, mediaType); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java index 34b35896e4..fe15a95466 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/EncoderHttpMessageWriter.java @@ -32,6 +32,7 @@ import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; @@ -91,7 +92,7 @@ public class EncoderHttpMessageWriter implements HttpMessageWriter { @Override public Mono write(Publisher inputStream, ResolvableType elementType, - MediaType mediaType, ReactiveHttpOutputMessage message, Map hints) { + @Nullable MediaType mediaType, ReactiveHttpOutputMessage message, Map hints) { MediaType contentType = updateContentType(message, mediaType); @@ -139,7 +140,7 @@ public class EncoderHttpMessageWriter implements HttpMessageWriter { @Override public Mono write(Publisher inputStream, ResolvableType actualType, - ResolvableType elementType, MediaType mediaType, ServerHttpRequest request, + ResolvableType elementType, @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { Map allHints = new HashMap<>(); diff --git a/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageReader.java index dcaf807141..1f4205c529 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageReader.java @@ -33,6 +33,7 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -75,7 +76,7 @@ public class FormHttpMessageReader implements HttpMessageReader write(Publisher> inputStream, - ResolvableType elementType, MediaType mediaType, ReactiveHttpOutputMessage message, + ResolvableType elementType, @Nullable MediaType mediaType, ReactiveHttpOutputMessage message, Map hints) { MediaType contentType = message.getHeaders().getContentType(); diff --git a/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java index e47acf6000..2fc745f57d 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ResourceHttpMessageWriter.java @@ -46,6 +46,7 @@ import org.springframework.http.ReactiveHttpOutputMessage; import org.springframework.http.ZeroCopyHttpOutputMessage; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.MimeTypeUtils; import static java.util.Collections.emptyMap; @@ -106,7 +107,7 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter { @Override public Mono write(Publisher inputStream, ResolvableType elementType, - MediaType mediaType, ReactiveHttpOutputMessage message, Map hints) { + @Nullable MediaType mediaType, ReactiveHttpOutputMessage message, Map hints) { return Mono.from(inputStream).flatMap(resource -> writeResource(resource, elementType, mediaType, message, hints)); @@ -175,8 +176,8 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter { @Override @SuppressWarnings("unchecked") - public Mono write(Publisher inputStream, ResolvableType actualType, - ResolvableType elementType, MediaType mediaType, ServerHttpRequest request, + public Mono write(Publisher inputStream, @Nullable ResolvableType actualType, + ResolvableType elementType, @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { HttpHeaders headers = response.getHeaders(); diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java index d4ae58c746..0056d8d30d 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageReader.java @@ -37,6 +37,7 @@ import org.springframework.core.io.buffer.DataBufferUtils; import org.springframework.core.io.buffer.DefaultDataBufferFactory; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; +import org.springframework.lang.Nullable; import static java.util.stream.Collectors.joining; @@ -91,7 +92,7 @@ public class ServerSentEventHttpMessageReader implements HttpMessageReader write(Publisher input, ResolvableType elementType, MediaType mediaType, + public Mono write(Publisher input, ResolvableType elementType, @Nullable MediaType mediaType, ReactiveHttpOutputMessage message, Map hints) { message.getHeaders().setContentType(MediaType.TEXT_EVENT_STREAM); @@ -171,7 +171,7 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter write(Publisher input, ResolvableType actualType, ResolvableType elementType, - MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, + @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { Map allHints = new HashMap<>(); diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java index 3508487681..8437aecea7 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonDecoder.java @@ -40,6 +40,7 @@ import org.springframework.http.codec.HttpMessageDecoder; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; @@ -68,7 +69,7 @@ public class Jackson2JsonDecoder extends Jackson2CodecSupport implements HttpMes @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { JavaType javaType = this.objectMapper.getTypeFactory().constructType(elementType.getType()); // Skip String: CharSequenceDecoder + "*/*" comes after return (!CharSequence.class.isAssignableFrom(elementType.resolve(Object.class)) && @@ -83,14 +84,14 @@ public class Jackson2JsonDecoder extends Jackson2CodecSupport implements HttpMes @Override public Flux decode(Publisher input, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return decodeInternal(this.fluxDecoder, input, elementType, mimeType, hints); } @Override public Mono decodeToMono(Publisher input, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return decodeInternal(this.monoDecoder, input, elementType, mimeType, hints).singleOrEmpty(); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java index 555f7d2685..67773f3df3 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2JsonEncoder.java @@ -49,6 +49,7 @@ import org.springframework.http.codec.HttpMessageEncoder; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; @@ -105,7 +106,7 @@ public class Jackson2JsonEncoder extends Jackson2CodecSupport implements HttpMes @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { Class clazz = elementType.resolve(Object.class); return (Object.class == clazz) || !String.class.isAssignableFrom(elementType.resolve(clazz)) && @@ -114,7 +115,7 @@ public class Jackson2JsonEncoder extends Jackson2CodecSupport implements HttpMes @Override public Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, - ResolvableType elementType, MimeType mimeType, Map hints) { + ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { Assert.notNull(inputStream, "'inputStream' must not be null"); Assert.notNull(bufferFactory, "'bufferFactory' must not be null"); diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/JsonObjectDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/JsonObjectDecoder.java index e90db76855..b0b212cd50 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/JsonObjectDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/JsonObjectDecoder.java @@ -33,6 +33,7 @@ import org.springframework.core.codec.AbstractDecoder; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.MimeType; /** @@ -97,7 +98,7 @@ class JsonObjectDecoder extends AbstractDecoder { @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream) .flatMap(new Function>() { diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageReader.java index bca3a9559c..23c95415cd 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageReader.java @@ -30,6 +30,7 @@ import org.springframework.core.ResolvableType; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; import org.springframework.http.codec.HttpMessageReader; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -66,7 +67,7 @@ public class MultipartHttpMessageReader implements HttpMessageReader write(Publisher> inputStream, - ResolvableType elementType, MediaType mediaType, ReactiveHttpOutputMessage outputMessage, + ResolvableType elementType, @Nullable MediaType mediaType, ReactiveHttpOutputMessage outputMessage, Map hints) { byte[] boundary = generateMultipartBoundary(); diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java index 0d072a18c2..27537c59cb 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/SynchronossPartHttpMessageReader.java @@ -51,6 +51,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ReactiveHttpInputMessage; import org.springframework.http.codec.HttpMessageReader; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -78,7 +79,7 @@ public class SynchronossPartHttpMessageReader implements HttpMessageReader } @Override - public boolean canRead(ResolvableType elementType, MediaType mediaType) { + public boolean canRead(ResolvableType elementType, @Nullable MediaType mediaType) { return Part.class.equals(elementType.resolve(Object.class)) && (mediaType == null || MediaType.MULTIPART_FORM_DATA.isCompatibleWith(mediaType)); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java index 03fd8253be..3932de5dba 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlDecoder.java @@ -41,6 +41,7 @@ import org.springframework.core.codec.AbstractDecoder; import org.springframework.core.codec.CodecException; import org.springframework.core.codec.DecodingException; import org.springframework.core.io.buffer.DataBuffer; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -78,7 +79,7 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { @Override - public boolean canDecode(ResolvableType elementType, MimeType mimeType) { + public boolean canDecode(ResolvableType elementType, @Nullable MimeType mimeType) { if (super.canDecode(elementType, mimeType)) { Class outputClass = elementType.getRawClass(); return outputClass.isAnnotationPresent(XmlRootElement.class) || @@ -91,7 +92,7 @@ public class Jaxb2XmlDecoder extends AbstractDecoder { @Override public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + @Nullable MimeType mimeType, @Nullable Map hints) { Class outputClass = elementType.getRawClass(); Flux xmlEventFlux = this.xmlEventDecoder.decode(inputStream, null, mimeType, hints); diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java index ef94f4501e..e586980b05 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/Jaxb2XmlEncoder.java @@ -33,6 +33,7 @@ import org.springframework.core.codec.CodecException; import org.springframework.core.codec.EncodingException; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferFactory; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -56,7 +57,7 @@ public class Jaxb2XmlEncoder extends AbstractSingleValueEncoder { @Override - public boolean canEncode(ResolvableType elementType, MimeType mimeType) { + public boolean canEncode(ResolvableType elementType, @Nullable MimeType mimeType) { if (super.canEncode(elementType, mimeType)) { Class outputClass = elementType.resolve(Object.class); return (outputClass.isAnnotationPresent(XmlRootElement.class) || diff --git a/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java index 120442f29d..99f6765e90 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/xml/XmlEventDecoder.java @@ -40,6 +40,7 @@ import org.springframework.core.ResolvableType; import org.springframework.core.codec.AbstractDecoder; import org.springframework.core.io.buffer.DataBuffer; import org.springframework.core.io.buffer.DataBufferUtils; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.MimeType; import org.springframework.util.MimeTypeUtils; @@ -89,8 +90,8 @@ public class XmlEventDecoder extends AbstractDecoder { @Override @SuppressWarnings("unchecked") - public Flux decode(Publisher inputStream, ResolvableType elementType, - MimeType mimeType, Map hints) { + public Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, + @Nullable MimeType mimeType, @Nullable Map hints) { Flux flux = Flux.from(inputStream); if (useAalto && aaltoPresent) { diff --git a/spring-web/src/main/java/org/springframework/http/converter/AbstractGenericHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/AbstractGenericHttpMessageConverter.java index 0fa8a44386..c80be39a94 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/AbstractGenericHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/AbstractGenericHttpMessageConverter.java @@ -66,12 +66,12 @@ public abstract class AbstractGenericHttpMessageConverter extends AbstractHtt } @Override - public boolean canRead(Type type, Class contextClass, MediaType mediaType) { + public boolean canRead(Type type, @Nullable Class contextClass, @Nullable MediaType mediaType) { return (type instanceof Class ? canRead((Class) type, mediaType) : canRead(mediaType)); } @Override - public boolean canWrite(Type type, Class clazz, MediaType mediaType) { + public boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType) { return canWrite(clazz, mediaType); } @@ -79,7 +79,7 @@ public abstract class AbstractGenericHttpMessageConverter extends AbstractHtt * This implementation sets the default headers by calling {@link #addDefaultHeaders}, * and then calls {@link #writeInternal}. */ - public final void write(final T t, final Type type, MediaType contentType, HttpOutputMessage outputMessage) + public final void write(final T t, @Nullable final Type type, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { final HttpHeaders headers = outputMessage.getHeaders(); diff --git a/spring-web/src/main/java/org/springframework/http/converter/AbstractHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/AbstractHttpMessageConverter.java index 942365d462..cb35482dbd 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/AbstractHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/AbstractHttpMessageConverter.java @@ -130,7 +130,7 @@ public abstract class AbstractHttpMessageConverter implements HttpMessageConv * {@linkplain MediaType#includes(MediaType) include} the given media type. */ @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return supports(clazz) && canRead(mediaType); } @@ -162,7 +162,7 @@ public abstract class AbstractHttpMessageConverter implements HttpMessageConv * {@linkplain MediaType#includes(MediaType) include} the given media type. */ @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return supports(clazz) && canWrite(mediaType); } @@ -200,7 +200,7 @@ public abstract class AbstractHttpMessageConverter implements HttpMessageConv * and then calls {@link #writeInternal}. */ @Override - public final void write(final T t, MediaType contentType, HttpOutputMessage outputMessage) + public final void write(final T t, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { final HttpHeaders headers = outputMessage.getHeaders(); @@ -238,7 +238,7 @@ public abstract class AbstractHttpMessageConverter implements HttpMessageConv * {@link #getContentLength}, and sets the corresponding headers. * @since 4.2 */ - protected void addDefaultHeaders(HttpHeaders headers, T t, MediaType contentType) throws IOException{ + protected void addDefaultHeaders(HttpHeaders headers, T t, @Nullable MediaType contentType) throws IOException{ if (headers.getContentType() == null) { MediaType contentTypeToUse = contentType; if (contentType == null || contentType.isWildcardType() || contentType.isWildcardSubtype()) { diff --git a/spring-web/src/main/java/org/springframework/http/converter/BufferedImageHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/BufferedImageHttpMessageConverter.java index fc1b59ce62..705fbbbdd1 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/BufferedImageHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/BufferedImageHttpMessageConverter.java @@ -42,6 +42,7 @@ import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.StreamingHttpOutputMessage; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -127,7 +128,7 @@ public class BufferedImageHttpMessageConverter implements HttpMessageConverter clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return (BufferedImage.class == clazz && isReadable(mediaType)); } @@ -140,7 +141,7 @@ public class BufferedImageHttpMessageConverter implements HttpMessageConverter clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return (BufferedImage.class == clazz && isWritable(mediaType)); } @@ -204,7 +205,7 @@ public class BufferedImageHttpMessageConverter implements HttpMessageConverter clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { if (!MultiValueMap.class.isAssignableFrom(clazz)) { return false; } @@ -220,7 +220,7 @@ public class FormHttpMessageConverter implements HttpMessageConverter clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { if (!MultiValueMap.class.isAssignableFrom(clazz)) { return false; } @@ -261,7 +261,7 @@ public class FormHttpMessageConverter implements HttpMessageConverter map, MediaType contentType, HttpOutputMessage outputMessage) + public void write(MultiValueMap map, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { if (!isMultipart(map, contentType)) { diff --git a/spring-web/src/main/java/org/springframework/http/converter/ObjectToStringHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ObjectToStringHttpMessageConverter.java index 2e01e5eb39..3b5baeeacb 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ObjectToStringHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ObjectToStringHttpMessageConverter.java @@ -23,6 +23,7 @@ import org.springframework.core.convert.ConversionService; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -89,12 +90,12 @@ public class ObjectToStringHttpMessageConverter extends AbstractHttpMessageConve @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return this.conversionService.canConvert(String.class, clazz) && canRead(mediaType); } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return this.conversionService.canConvert(clazz, String.class) && canWrite(mediaType); } @@ -117,7 +118,7 @@ public class ObjectToStringHttpMessageConverter extends AbstractHttpMessageConve } @Override - protected Long getContentLength(Object obj, MediaType contentType) { + protected Long getContentLength(Object obj, @Nullable MediaType contentType) { String value = this.conversionService.convert(obj, String.class); return this.stringHttpMessageConverter.getContentLength(value, contentType); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java index 321b29a532..bbac78b414 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java @@ -27,6 +27,7 @@ import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.MediaTypeFactory; +import org.springframework.lang.Nullable; import org.springframework.util.StreamUtils; /** @@ -106,7 +107,7 @@ public class ResourceHttpMessageConverter extends AbstractHttpMessageConverter clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return false; } @Override - public boolean canRead(Type type, Class contextClass, MediaType mediaType) { + public boolean canRead(Type type, @Nullable Class contextClass, @Nullable MediaType mediaType) { return false; } @Override - public Object read(Type type, Class contextClass, HttpInputMessage inputMessage) + public Object read(Type type, @Nullable Class contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { throw new UnsupportedOperationException(); @@ -91,12 +92,12 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return canWrite(clazz, null, mediaType); } @Override - public boolean canWrite(Type type, Class clazz, MediaType mediaType) { + public boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType) { if (!(type instanceof ParameterizedType)) { return ResourceRegion.class.isAssignableFrom((Class) type); } @@ -121,7 +122,7 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa @Override @SuppressWarnings("unchecked") - protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) + protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { if (object instanceof ResourceRegion) { diff --git a/spring-web/src/main/java/org/springframework/http/converter/StringHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/StringHttpMessageConverter.java index 0bb72eab3a..83c2fad4bd 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/StringHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/StringHttpMessageConverter.java @@ -25,6 +25,7 @@ import java.util.List; import org.springframework.http.HttpInputMessage; import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; +import org.springframework.lang.Nullable; import org.springframework.util.StreamUtils; /** @@ -86,7 +87,7 @@ public class StringHttpMessageConverter extends AbstractHttpMessageConverter clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return canRead(clazz, null, mediaType); } @Override - public boolean canRead(Type type, Class contextClass, MediaType mediaType) { + public boolean canRead(Type type, @Nullable Class contextClass, @Nullable MediaType mediaType) { if (!canRead(mediaType)) { return false; } @@ -167,7 +167,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { if (!canWrite(mediaType)) { return false; } @@ -212,7 +212,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } @Override - public Object read(Type type, Class contextClass, HttpInputMessage inputMessage) + public Object read(Type type, @Nullable Class contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { JavaType javaType = getJavaType(type, contextClass); @@ -239,7 +239,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } @Override - protected void writeInternal(Object object, Type type, HttpOutputMessage outputMessage) + protected void writeInternal(Object object, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { MediaType contentType = outputMessage.getHeaders().getContentType(); @@ -347,7 +347,7 @@ public abstract class AbstractJackson2HttpMessageConverter extends AbstractGener } @Override - protected Long getContentLength(Object object, MediaType contentType) throws IOException { + protected Long getContentLength(Object object, @Nullable MediaType contentType) throws IOException { if (object instanceof MappingJacksonValue) { object = ((MappingJacksonValue) object).getValue(); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJsonHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJsonHttpMessageConverter.java index 3684406b40..772321888a 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJsonHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/AbstractJsonHttpMessageConverter.java @@ -84,7 +84,7 @@ public abstract class AbstractJsonHttpMessageConverter extends AbstractGenericHt @Override - public final Object read(Type type, Class contextClass, HttpInputMessage inputMessage) + public final Object read(Type type, @Nullable Class contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { return readResolved(GenericTypeResolver.resolveType(type, contextClass), inputMessage); @@ -110,7 +110,7 @@ public abstract class AbstractJsonHttpMessageConverter extends AbstractGenericHt } @Override - protected final void writeInternal(Object o, Type type, HttpOutputMessage outputMessage) + protected final void writeInternal(Object o, @Nullable Type type, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { Writer writer = getWriter(outputMessage); diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java index c544795ba3..f8362eb036 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java @@ -22,6 +22,7 @@ import java.lang.reflect.Type; import com.google.gson.Gson; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -90,7 +91,7 @@ public class GsonHttpMessageConverter extends AbstractJsonHttpMessageConverter { } @Override - protected void writeInternal(Object o, Type type, Writer writer) throws Exception { + protected void writeInternal(Object o, @Nullable Type type, Writer writer) throws Exception { if (type != null) { getGson().toJson(o, type, writer); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java index ebfe418921..d8abdfe0dd 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/Jackson2ObjectMapperFactoryBean.java @@ -46,6 +46,7 @@ import org.springframework.beans.factory.FactoryBean; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; +import org.springframework.lang.Nullable; /** * A {@link FactoryBean} for creating a Jackson 2.x {@link ObjectMapper} (default) or @@ -421,7 +422,7 @@ public class Jackson2ObjectMapperFactoryBean implements FactoryBean * required generic type information in order to read a Collection. */ @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return false; } @@ -82,7 +83,7 @@ public class Jaxb2CollectionHttpMessageConverter * {@link XmlRootElement} or {@link XmlType}. */ @Override - public boolean canRead(Type type, Class contextClass, MediaType mediaType) { + public boolean canRead(Type type, @Nullable Class contextClass, @Nullable MediaType mediaType) { if (!(type instanceof ParameterizedType)) { return false; } @@ -111,7 +112,7 @@ public class Jaxb2CollectionHttpMessageConverter * does not convert collections to XML. */ @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return false; } @@ -120,7 +121,7 @@ public class Jaxb2CollectionHttpMessageConverter * does not convert collections to XML. */ @Override - public boolean canWrite(Type type, Class clazz, MediaType mediaType) { + public boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType) { return false; } @@ -138,7 +139,7 @@ public class Jaxb2CollectionHttpMessageConverter @Override @SuppressWarnings("unchecked") - public T read(Type type, Class contextClass, HttpInputMessage inputMessage) + public T read(Type type, @Nullable Class contextClass, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { ParameterizedType parameterizedType = (ParameterizedType) type; @@ -228,7 +229,7 @@ public class Jaxb2CollectionHttpMessageConverter } @Override - public void write(T t, Type type, MediaType contentType, HttpOutputMessage outputMessage) + public void write(T t, @Nullable Type type, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { throw new UnsupportedOperationException(); diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java index 4cbe6f1325..57e347f586 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/Jaxb2RootElementHttpMessageConverter.java @@ -43,6 +43,7 @@ import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -107,13 +108,13 @@ public class Jaxb2RootElementHttpMessageConverter extends AbstractJaxb2HttpMessa @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return (clazz.isAnnotationPresent(XmlRootElement.class) || clazz.isAnnotationPresent(XmlType.class)) && canRead(mediaType); } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return (AnnotationUtils.findAnnotation(clazz, XmlRootElement.class) != null && canWrite(mediaType)); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/MarshallingHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/MarshallingHttpMessageConverter.java index 797732eff0..226d1362fc 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/MarshallingHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/MarshallingHttpMessageConverter.java @@ -25,6 +25,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.lang.Nullable; import org.springframework.oxm.Marshaller; import org.springframework.oxm.MarshallingFailureException; import org.springframework.oxm.Unmarshaller; @@ -106,12 +107,12 @@ public class MarshallingHttpMessageConverter extends AbstractXmlHttpMessageConve @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return (canRead(mediaType) && this.unmarshaller != null && this.unmarshaller.supports(clazz)); } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return (canWrite(mediaType) && this.marshaller != null && this.marshaller.supports(clazz)); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java index f997309eac..36574e1a61 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java @@ -53,6 +53,7 @@ import org.springframework.http.converter.AbstractHttpMessageConverter; import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; +import org.springframework.lang.Nullable; import org.springframework.util.StreamUtils; /** @@ -226,7 +227,8 @@ public class SourceHttpMessageConverter extends AbstractHttpMe } @Override - protected Long getContentLength(T t, MediaType contentType) { + @Nullable + protected Long getContentLength(T t, @Nullable MediaType contentType) { if (t instanceof DOMSource) { try { CountingOutputStream os = new CountingOutputStream(); diff --git a/spring-web/src/main/java/org/springframework/remoting/httpinvoker/AbstractHttpInvokerRequestExecutor.java b/spring-web/src/main/java/org/springframework/remoting/httpinvoker/AbstractHttpInvokerRequestExecutor.java index 8945db8b93..e9385fe484 100644 --- a/spring-web/src/main/java/org/springframework/remoting/httpinvoker/AbstractHttpInvokerRequestExecutor.java +++ b/spring-web/src/main/java/org/springframework/remoting/httpinvoker/AbstractHttpInvokerRequestExecutor.java @@ -113,7 +113,7 @@ public abstract class AbstractHttpInvokerRequestExecutor implements HttpInvokerR } @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java b/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java index edebde3279..37040ca23f 100644 --- a/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java +++ b/spring-web/src/main/java/org/springframework/remoting/jaxws/JaxWsPortClientInterceptor.java @@ -300,7 +300,7 @@ public class JaxWsPortClientInterceptor extends LocalJaxWsServiceFactory * building a client proxy in the {@link JaxWsPortProxyFactoryBean} subclass. */ @Override - public void setBeanClassLoader(ClassLoader classLoader) { + public void setBeanClassLoader(@Nullable ClassLoader classLoader) { this.beanClassLoader = classLoader; } diff --git a/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java b/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java index 3609afa73e..e3c5fff861 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java +++ b/spring-web/src/main/java/org/springframework/web/bind/EscapedErrors.java @@ -19,6 +19,7 @@ package org.springframework.web.bind; import java.util.ArrayList; import java.util.List; +import org.springframework.lang.Nullable; import org.springframework.validation.Errors; import org.springframework.validation.FieldError; import org.springframework.validation.ObjectError; @@ -64,7 +65,7 @@ public class EscapedErrors implements Errors { } @Override - public void setNestedPath(String nestedPath) { + public void setNestedPath(@Nullable String nestedPath) { this.source.setNestedPath(nestedPath); } @@ -95,22 +96,22 @@ public class EscapedErrors implements Errors { } @Override - public void reject(String errorCode, Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { this.source.reject(errorCode, errorArgs, defaultMessage); } @Override - public void rejectValue(String field, String errorCode) { + public void rejectValue(@Nullable String field, String errorCode) { this.source.rejectValue(field, errorCode); } @Override - public void rejectValue(String field, String errorCode, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, String defaultMessage) { this.source.rejectValue(field, errorCode, defaultMessage); } @Override - public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { this.source.rejectValue(field, errorCode, errorArgs, defaultMessage); } @@ -202,7 +203,7 @@ public class EscapedErrors implements Errors { } @Override - public Class getFieldType(String field) { + public Class getFieldType(@Nullable String field) { return this.source.getFieldType(field); } diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java b/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java index df98d87019..b7c9ccf56c 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/DefaultDataBinderFactory.java @@ -49,7 +49,7 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory { */ @Override @SuppressWarnings("deprecation") - public final WebDataBinder createBinder(NativeWebRequest webRequest, Object target, + public final WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName) throws Exception { WebDataBinder dataBinder = createBinderInstance(target, objectName, webRequest); diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeBindException.java b/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeBindException.java index 10a6ef615e..7aaedfec33 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeBindException.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/WebExchangeBindException.java @@ -22,6 +22,7 @@ import java.util.Map; import org.springframework.beans.PropertyEditorRegistry; import org.springframework.core.MethodParameter; +import org.springframework.lang.Nullable; import org.springframework.validation.BeanPropertyBindingResult; import org.springframework.validation.BindingResult; import org.springframework.validation.Errors; @@ -66,7 +67,7 @@ public class WebExchangeBindException extends ServerWebInputException implements } @Override - public void setNestedPath(String nestedPath) { + public void setNestedPath(@Nullable String nestedPath) { this.bindingResult.setNestedPath(nestedPath); } @@ -97,22 +98,22 @@ public class WebExchangeBindException extends ServerWebInputException implements } @Override - public void reject(String errorCode, Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { this.bindingResult.reject(errorCode, errorArgs, defaultMessage); } @Override - public void rejectValue(String field, String errorCode) { + public void rejectValue(@Nullable String field, String errorCode) { this.bindingResult.rejectValue(field, errorCode); } @Override - public void rejectValue(String field, String errorCode, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, String defaultMessage) { this.bindingResult.rejectValue(field, errorCode, defaultMessage); } @Override - public void rejectValue(String field, String errorCode, Object[] errorArgs, String defaultMessage) { + public void rejectValue(@Nullable String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { this.bindingResult.rejectValue(field, errorCode, errorArgs, defaultMessage); } @@ -203,7 +204,7 @@ public class WebExchangeBindException extends ServerWebInputException implements } @Override - public Class getFieldType(String field) { + public Class getFieldType(@Nullable String field) { return this.bindingResult.getFieldType(field); } @@ -224,7 +225,7 @@ public class WebExchangeBindException extends ServerWebInputException implements @Override @SuppressWarnings("rawtypes") - public PropertyEditor findEditor(String field, Class valueType) { + public PropertyEditor findEditor(@Nullable String field, @Nullable Class valueType) { return this.bindingResult.findEditor(field, valueType); } diff --git a/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java b/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java index 2dda684317..f4a141e1d7 100644 --- a/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java +++ b/spring-web/src/main/java/org/springframework/web/client/AsyncRestOperations.java @@ -419,7 +419,7 @@ public interface AsyncRestOperations { * @return an arbitrary object, as returned by the {@link ResponseExtractor} */ ListenableFuture execute(String url, HttpMethod method, - AsyncRequestCallback requestCallback, ResponseExtractor responseExtractor, + @Nullable AsyncRequestCallback requestCallback, @Nullable ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException; /** @@ -435,7 +435,7 @@ public interface AsyncRestOperations { * @return an arbitrary object, as returned by the {@link ResponseExtractor} */ ListenableFuture execute(String url, HttpMethod method, - AsyncRequestCallback requestCallback, ResponseExtractor responseExtractor, + @Nullable AsyncRequestCallback requestCallback, @Nullable ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException; /** @@ -449,7 +449,7 @@ public interface AsyncRestOperations { * @return an arbitrary object, as returned by the {@link ResponseExtractor} */ ListenableFuture execute(URI url, HttpMethod method, - AsyncRequestCallback requestCallback, ResponseExtractor responseExtractor) + @Nullable AsyncRequestCallback requestCallback, @Nullable ResponseExtractor responseExtractor) throws RestClientException; } diff --git a/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java index b48cff0f2c..10f69baeef 100644 --- a/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/AsyncRestTemplate.java @@ -267,7 +267,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I // POST @Override - public ListenableFuture postForLocation(String url, HttpEntity request, Object... uriVars) + public ListenableFuture postForLocation(String url, @Nullable HttpEntity request, Object... uriVars) throws RestClientException { AsyncRequestCallback callback = httpEntityCallback(request); @@ -277,7 +277,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture postForLocation(String url, HttpEntity request, Map uriVars) + public ListenableFuture postForLocation(String url, @Nullable HttpEntity request, Map uriVars) throws RestClientException { AsyncRequestCallback callback = httpEntityCallback(request); @@ -287,7 +287,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture postForLocation(URI url, HttpEntity request) throws RestClientException { + public ListenableFuture postForLocation(URI url, @Nullable HttpEntity request) throws RestClientException { AsyncRequestCallback callback = httpEntityCallback(request); ResponseExtractor extractor = headersExtractor(); ListenableFuture future = execute(url, HttpMethod.POST, callback, extractor); @@ -304,7 +304,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> postForEntity(String url, HttpEntity request, + public ListenableFuture> postForEntity(String url, @Nullable HttpEntity request, Class responseType, Object... uriVariables) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -313,7 +313,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> postForEntity(String url, HttpEntity request, + public ListenableFuture> postForEntity(String url, @Nullable HttpEntity request, Class responseType, Map uriVariables) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -322,7 +322,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> postForEntity(URI url, HttpEntity request, Class responseType) + public ListenableFuture> postForEntity(URI url, @Nullable HttpEntity request, Class responseType) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -334,19 +334,19 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I // PUT @Override - public ListenableFuture put(String url, HttpEntity request, Object... uriVariables) throws RestClientException { + public ListenableFuture put(String url, @Nullable HttpEntity request, Object... uriVariables) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(request); return execute(url, HttpMethod.PUT, requestCallback, null, uriVariables); } @Override - public ListenableFuture put(String url, HttpEntity request, Map uriVariables) throws RestClientException { + public ListenableFuture put(String url, @Nullable HttpEntity request, Map uriVariables) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(request); return execute(url, HttpMethod.PUT, requestCallback, null, uriVariables); } @Override - public ListenableFuture put(URI url, HttpEntity request) throws RestClientException { + public ListenableFuture put(URI url, @Nullable HttpEntity request) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(request); return execute(url, HttpMethod.PUT, requestCallback, null); } @@ -405,7 +405,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I // exchange @Override - public ListenableFuture> exchange(String url, HttpMethod method, HttpEntity requestEntity, + public ListenableFuture> exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, Class responseType, Object... uriVariables) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); @@ -414,7 +414,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> exchange(String url, HttpMethod method, HttpEntity requestEntity, + public ListenableFuture> exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, Class responseType, Map uriVariables) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); @@ -423,7 +423,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> exchange(URI url, HttpMethod method, HttpEntity requestEntity, + public ListenableFuture> exchange(URI url, HttpMethod method, @Nullable HttpEntity requestEntity, Class responseType) throws RestClientException { AsyncRequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); @@ -432,7 +432,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> exchange(String url, HttpMethod method, HttpEntity requestEntity, + public ListenableFuture> exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, ParameterizedTypeReference responseType, Object... uriVariables) throws RestClientException { Type type = responseType.getType(); @@ -442,7 +442,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> exchange(String url, HttpMethod method, HttpEntity requestEntity, + public ListenableFuture> exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, ParameterizedTypeReference responseType, Map uriVariables) throws RestClientException { Type type = responseType.getType(); @@ -452,7 +452,7 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I } @Override - public ListenableFuture> exchange(URI url, HttpMethod method, HttpEntity requestEntity, + public ListenableFuture> exchange(URI url, HttpMethod method, @Nullable HttpEntity requestEntity, ParameterizedTypeReference responseType) throws RestClientException { Type type = responseType.getType(); @@ -465,24 +465,24 @@ public class AsyncRestTemplate extends org.springframework.http.client.support.I // general execution @Override - public ListenableFuture execute(String url, HttpMethod method, AsyncRequestCallback requestCallback, - ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException { + public ListenableFuture execute(String url, HttpMethod method, @Nullable AsyncRequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException { URI expanded = getUriTemplateHandler().expand(url, uriVariables); return doExecute(expanded, method, requestCallback, responseExtractor); } @Override - public ListenableFuture execute(String url, HttpMethod method, AsyncRequestCallback requestCallback, - ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException { + public ListenableFuture execute(String url, HttpMethod method, @Nullable AsyncRequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException { URI expanded = getUriTemplateHandler().expand(url, uriVariables); return doExecute(expanded, method, requestCallback, responseExtractor); } @Override - public ListenableFuture execute(URI url, HttpMethod method, AsyncRequestCallback requestCallback, - ResponseExtractor responseExtractor) throws RestClientException { + public ListenableFuture execute(URI url, HttpMethod method, @Nullable AsyncRequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor) throws RestClientException { return doExecute(url, method, requestCallback, responseExtractor); } diff --git a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java index eac4ddfb05..a4dd08ac21 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestTemplate.java @@ -380,28 +380,28 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat // POST @Override - public URI postForLocation(String url, Object request, Object... uriVariables) throws RestClientException { + public URI postForLocation(String url, @Nullable Object request, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request); HttpHeaders headers = execute(url, HttpMethod.POST, requestCallback, headersExtractor(), uriVariables); return headers.getLocation(); } @Override - public URI postForLocation(String url, Object request, Map uriVariables) throws RestClientException { + public URI postForLocation(String url, @Nullable Object request, Map uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request); HttpHeaders headers = execute(url, HttpMethod.POST, requestCallback, headersExtractor(), uriVariables); return headers.getLocation(); } @Override - public URI postForLocation(URI url, Object request) throws RestClientException { + public URI postForLocation(URI url, @Nullable Object request) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request); HttpHeaders headers = execute(url, HttpMethod.POST, requestCallback, headersExtractor()); return headers.getLocation(); } @Override - public T postForObject(String url, Object request, Class responseType, Object... uriVariables) + public T postForObject(String url, @Nullable Object request, Class responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -411,7 +411,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public T postForObject(String url, Object request, Class responseType, Map uriVariables) + public T postForObject(String url, @Nullable Object request, Class responseType, Map uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -421,7 +421,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public T postForObject(URI url, Object request, Class responseType) throws RestClientException { + public T postForObject(URI url, @Nullable Object request, Class responseType) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); HttpMessageConverterExtractor responseExtractor = new HttpMessageConverterExtractor<>(responseType, getMessageConverters()); @@ -429,7 +429,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity postForEntity(String url, Object request, Class responseType, Object... uriVariables) + public ResponseEntity postForEntity(String url, @Nullable Object request, Class responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -438,7 +438,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity postForEntity(String url, Object request, Class responseType, Map uriVariables) + public ResponseEntity postForEntity(String url, @Nullable Object request, Class responseType, Map uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -447,7 +447,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity postForEntity(URI url, Object request, Class responseType) throws RestClientException { + public ResponseEntity postForEntity(URI url, @Nullable Object request, Class responseType) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); ResponseExtractor> responseExtractor = responseEntityExtractor(responseType); return execute(url, HttpMethod.POST, requestCallback, responseExtractor); @@ -457,19 +457,19 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat // PUT @Override - public void put(String url, Object request, Object... uriVariables) throws RestClientException { + public void put(String url, @Nullable Object request, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request); execute(url, HttpMethod.PUT, requestCallback, null, uriVariables); } @Override - public void put(String url, Object request, Map uriVariables) throws RestClientException { + public void put(String url, @Nullable Object request, Map uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request); execute(url, HttpMethod.PUT, requestCallback, null, uriVariables); } @Override - public void put(URI url, Object request) throws RestClientException { + public void put(URI url, @Nullable Object request) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request); execute(url, HttpMethod.PUT, requestCallback, null); } @@ -478,7 +478,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat // PATCH @Override - public T patchForObject(String url, Object request, Class responseType, + public T patchForObject(String url, @Nullable Object request, Class responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -488,7 +488,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public T patchForObject(String url, Object request, Class responseType, + public T patchForObject(String url, @Nullable Object request, Class responseType, Map uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -498,7 +498,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public T patchForObject(URI url, Object request, Class responseType) + public T patchForObject(URI url, @Nullable Object request, Class responseType) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(request, responseType); @@ -554,7 +554,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat @Override public ResponseEntity exchange(String url, HttpMethod method, - HttpEntity requestEntity, Class responseType, Object... uriVariables) throws RestClientException { + @Nullable HttpEntity requestEntity, Class responseType, Object... uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); ResponseExtractor> responseExtractor = responseEntityExtractor(responseType); @@ -563,7 +563,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat @Override public ResponseEntity exchange(String url, HttpMethod method, - HttpEntity requestEntity, Class responseType, Map uriVariables) throws RestClientException { + @Nullable HttpEntity requestEntity, Class responseType, Map uriVariables) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); ResponseExtractor> responseExtractor = responseEntityExtractor(responseType); @@ -571,7 +571,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity exchange(URI url, HttpMethod method, HttpEntity requestEntity, + public ResponseEntity exchange(URI url, HttpMethod method, @Nullable HttpEntity requestEntity, Class responseType) throws RestClientException { RequestCallback requestCallback = httpEntityCallback(requestEntity, responseType); @@ -580,7 +580,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity exchange(String url, HttpMethod method, HttpEntity requestEntity, + public ResponseEntity exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, ParameterizedTypeReference responseType, Object... uriVariables) throws RestClientException { Type type = responseType.getType(); @@ -590,7 +590,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity exchange(String url, HttpMethod method, HttpEntity requestEntity, + public ResponseEntity exchange(String url, HttpMethod method, @Nullable HttpEntity requestEntity, ParameterizedTypeReference responseType, Map uriVariables) throws RestClientException { Type type = responseType.getType(); @@ -600,7 +600,7 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat } @Override - public ResponseEntity exchange(URI url, HttpMethod method, HttpEntity requestEntity, + public ResponseEntity exchange(URI url, HttpMethod method, @Nullable HttpEntity requestEntity, ParameterizedTypeReference responseType) throws RestClientException { Type type = responseType.getType(); @@ -636,24 +636,24 @@ public class RestTemplate extends InterceptingHttpAccessor implements RestOperat // general execution @Override - public T execute(String url, HttpMethod method, RequestCallback requestCallback, - ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException { + public T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException { URI expanded = getUriTemplateHandler().expand(url, uriVariables); return doExecute(expanded, method, requestCallback, responseExtractor); } @Override - public T execute(String url, HttpMethod method, RequestCallback requestCallback, - ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException { + public T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException { URI expanded = getUriTemplateHandler().expand(url, uriVariables); return doExecute(expanded, method, requestCallback, responseExtractor); } @Override - public T execute(URI url, HttpMethod method, RequestCallback requestCallback, - ResponseExtractor responseExtractor) throws RestClientException { + public T execute(URI url, HttpMethod method, @Nullable RequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor) throws RestClientException { return doExecute(url, method, requestCallback, responseExtractor); } diff --git a/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java b/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java index 07087492ff..1ec3923803 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/StandardServletEnvironment.java @@ -26,6 +26,7 @@ import org.springframework.core.env.PropertySource.StubPropertySource; import org.springframework.core.env.StandardEnvironment; import org.springframework.jndi.JndiLocatorDelegate; import org.springframework.jndi.JndiPropertySource; +import org.springframework.lang.Nullable; import org.springframework.web.context.ConfigurableWebEnvironment; /** @@ -90,7 +91,7 @@ public class StandardServletEnvironment extends StandardEnvironment implements C } @Override - public void initPropertySources(ServletContext servletContext, ServletConfig servletConfig) { + public void initPropertySources(@Nullable ServletContext servletContext, @Nullable ServletConfig servletConfig) { WebApplicationContextUtils.initServletPropertySources(getPropertySources(), servletContext, servletConfig); } diff --git a/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java b/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java index 0889f95e51..fb158bd067 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java +++ b/spring-web/src/main/java/org/springframework/web/cors/DefaultCorsProcessor.java @@ -33,6 +33,7 @@ import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; import org.springframework.web.util.WebUtils; @@ -57,7 +58,7 @@ public class DefaultCorsProcessor implements CorsProcessor { @Override @SuppressWarnings("resource") - public boolean processRequest(CorsConfiguration config, HttpServletRequest request, HttpServletResponse response) + public boolean processRequest(@Nullable CorsConfiguration config, HttpServletRequest request, HttpServletResponse response) throws IOException { if (!CorsUtils.isCorsRequest(request)) { diff --git a/spring-web/src/main/java/org/springframework/web/cors/reactive/DefaultCorsProcessor.java b/spring-web/src/main/java/org/springframework/web/cors/reactive/DefaultCorsProcessor.java index 6232318eff..0af15d7371 100644 --- a/spring-web/src/main/java/org/springframework/web/cors/reactive/DefaultCorsProcessor.java +++ b/spring-web/src/main/java/org/springframework/web/cors/reactive/DefaultCorsProcessor.java @@ -27,6 +27,7 @@ import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.server.ServerWebExchange; @@ -51,7 +52,7 @@ public class DefaultCorsProcessor implements CorsProcessor { @Override - public boolean processRequest(CorsConfiguration config, ServerWebExchange exchange) { + public boolean processRequest(@Nullable CorsConfiguration config, ServerWebExchange exchange) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); diff --git a/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java b/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java index b74e2e13ec..0f8459389a 100644 --- a/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java +++ b/spring-web/src/main/java/org/springframework/web/util/DefaultUriBuilderFactory.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MultiValueMap; import org.springframework.util.ObjectUtils; @@ -210,19 +211,19 @@ public class DefaultUriBuilderFactory implements UriBuilderFactory { } @Override - public DefaultUriBuilder scheme(String scheme) { + public DefaultUriBuilder scheme(@Nullable String scheme) { this.uriComponentsBuilder.scheme(scheme); return this; } @Override - public DefaultUriBuilder userInfo(String userInfo) { + public DefaultUriBuilder userInfo(@Nullable String userInfo) { this.uriComponentsBuilder.userInfo(userInfo); return this; } @Override - public DefaultUriBuilder host(String host) { + public DefaultUriBuilder host(@Nullable String host) { this.uriComponentsBuilder.host(host); return this; } @@ -234,19 +235,19 @@ public class DefaultUriBuilderFactory implements UriBuilderFactory { } @Override - public DefaultUriBuilder port(String port) { + public DefaultUriBuilder port(@Nullable String port) { this.uriComponentsBuilder.port(port); return this; } @Override - public DefaultUriBuilder path(String path) { + public DefaultUriBuilder path(@Nullable String path) { this.uriComponentsBuilder.path(path); return this; } @Override - public DefaultUriBuilder replacePath(String path) { + public DefaultUriBuilder replacePath(@Nullable String path) { this.uriComponentsBuilder.replacePath(path); return this; } @@ -264,7 +265,7 @@ public class DefaultUriBuilderFactory implements UriBuilderFactory { } @Override - public DefaultUriBuilder replaceQuery(String query) { + public DefaultUriBuilder replaceQuery(@Nullable String query) { this.uriComponentsBuilder.replaceQuery(query); return this; } @@ -294,7 +295,7 @@ public class DefaultUriBuilderFactory implements UriBuilderFactory { } @Override - public DefaultUriBuilder fragment(String fragment) { + public DefaultUriBuilder fragment(@Nullable String fragment) { this.uriComponentsBuilder.fragment(fragment); return this; } diff --git a/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java b/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java index a8c02ba996..70109ccf2a 100644 --- a/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java +++ b/spring-web/src/main/java/org/springframework/web/util/HierarchicalUriComponents.java @@ -81,7 +81,7 @@ final class HierarchicalUriComponents extends UriComponents { */ HierarchicalUriComponents(@Nullable String scheme, @Nullable String userInfo, @Nullable String host, @Nullable String port, @Nullable PathComponent path, @Nullable MultiValueMap queryParams, - @Nullable String fragment, @Nullable boolean encoded, @Nullable boolean verify) { + @Nullable String fragment, boolean encoded, boolean verify) { super(scheme, fragment); this.userInfo = userInfo; @@ -919,7 +919,7 @@ final class HierarchicalUriComponents extends UriComponents { } @Override - public Object getValue(String name) { + public Object getValue(@Nullable String name) { Object value = this.delegate.getValue(name); if (ObjectUtils.isArray(value)) { value = StringUtils.arrayToCommaDelimitedString(ObjectUtils.toObjectArray(value)); diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponents.java b/spring-web/src/main/java/org/springframework/web/util/UriComponents.java index 1415ac8714..2bf5524404 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponents.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponents.java @@ -304,7 +304,8 @@ public abstract class UriComponents implements Serializable { } @Override - public Object getValue(String name) { + @Nullable + public Object getValue(@Nullable String name) { if (!this.uriVariables.containsKey(name)) { throw new IllegalArgumentException("Map has no value for '" + name + "'"); } @@ -325,7 +326,8 @@ public abstract class UriComponents implements Serializable { } @Override - public Object getValue(String name) { + @Nullable + public Object getValue(@Nullable String name) { if (!this.valueIterator.hasNext()) { throw new IllegalArgumentException("Not enough variable values available to expand '" + name + "'"); } diff --git a/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java b/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java index fbca48a815..6a8632c7ae 100644 --- a/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java +++ b/spring-web/src/test/java/org/springframework/http/converter/json/MappingJackson2HttpMessageConverterTests.java @@ -39,6 +39,7 @@ import org.springframework.http.MockHttpInputMessage; import org.springframework.http.MockHttpOutputMessage; import org.springframework.http.converter.HttpMessageConversionException; import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.lang.Nullable; import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.endsWith; @@ -169,7 +170,7 @@ public class MappingJackson2HttpMessageConverterTests { public void readGenerics() throws IOException { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter() { @Override - protected JavaType getJavaType(Type type, Class contextClass) { + protected JavaType getJavaType(Type type, @Nullable Class contextClass) { if (type instanceof Class && List.class.isAssignableFrom((Class)type)) { return new ObjectMapper().getTypeFactory().constructCollectionType(ArrayList.class, MyBean.class); } diff --git a/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java b/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java index e7f111f297..b178b950b0 100644 --- a/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java +++ b/spring-web/src/test/java/org/springframework/web/jsf/DelegatingNavigationHandlerTests.java @@ -23,6 +23,7 @@ import org.junit.Test; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.support.StaticListableBeanFactory; +import org.springframework.lang.Nullable; import static org.junit.Assert.*; @@ -91,7 +92,7 @@ public class DelegatingNavigationHandlerTests { @Override public void handleNavigation( - FacesContext facesContext, String fromAction, String outcome, NavigationHandler originalNavigationHandler) { + FacesContext facesContext, @Nullable String fromAction, @Nullable String outcome, @Nullable NavigationHandler originalNavigationHandler) { lastFromAction = fromAction; lastOutcome = outcome; if (originalNavigationHandler != null) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java b/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java index f0ebd8669f..8db260b3d3 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/config/WebFluxConfigurationSupport.java @@ -470,7 +470,7 @@ public class WebFluxConfigurationSupport implements ApplicationContextAware { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { } } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java index 48c78004ea..f1f106fc47 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultRenderingResponseBuilder.java @@ -33,6 +33,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.reactive.result.view.ViewResolver; import org.springframework.web.server.ServerWebExchange; @@ -76,7 +77,7 @@ class DefaultRenderingResponseBuilder implements RenderingResponse.Builder { } @Override - public RenderingResponse.Builder modelAttribute(String name, Object value) { + public RenderingResponse.Builder modelAttribute(String name, @Nullable Object value) { Assert.notNull(name, "'name' must not be null"); this.model.put(name, value); return this; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java index 7514eee983..28073cbe4d 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/AbstractView.java @@ -146,7 +146,7 @@ public abstract class AbstractView implements View, ApplicationContextAware { * @return {@code Mono} to represent when and if rendering succeeds */ @Override - public Mono render(Map model, MediaType contentType, + public Mono render(@Nullable Map model, @Nullable MediaType contentType, ServerWebExchange exchange) { if (logger.isTraceEnabled()) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/HttpMessageWriterView.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/HttpMessageWriterView.java index 049cbc597e..eb6dd44cc3 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/HttpMessageWriterView.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/HttpMessageWriterView.java @@ -114,7 +114,7 @@ public class HttpMessageWriterView implements View { @Override @SuppressWarnings("unchecked") - public Mono render(Map model, MediaType contentType, ServerWebExchange exchange) { + public Mono render(@Nullable Map model, @Nullable MediaType contentType, ServerWebExchange exchange) { Object value = getObjectToRender(model); return (value != null) ? write(value, contentType, exchange) : diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java index 268b7dc10b..83c93112c7 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/view/View.java @@ -65,6 +65,6 @@ public interface View { * @param exchange the current exchange * @return {@code Mono} to represent when and if rendering succeeds */ - Mono render(@Nullable Map model, MediaType contentType, ServerWebExchange exchange); + Mono render(@Nullable Map model, @Nullable MediaType contentType, ServerWebExchange exchange); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java index 2a476d8689..33311f65b2 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/JettyRequestUpgradeStrategy.java @@ -32,6 +32,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServletServerHttpRequest; import org.springframework.http.server.reactive.ServletServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; @@ -108,7 +109,7 @@ public class JettyRequestUpgradeStrategy implements RequestUpgradeStrategy, Life @Override - public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, String subProtocol) { + public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java index 4881af63ca..7746bef3f4 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/ReactorNettyRequestUpgradeStrategy.java @@ -23,6 +23,7 @@ import reactor.core.publisher.Mono; import org.springframework.core.io.buffer.NettyDataBufferFactory; import org.springframework.http.server.reactive.ReactorServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.lang.Nullable; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; import org.springframework.web.reactive.socket.adapter.ReactorNettyWebSocketSession; @@ -38,7 +39,7 @@ import org.springframework.web.server.ServerWebExchange; public class ReactorNettyRequestUpgradeStrategy implements RequestUpgradeStrategy { @Override - public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, String subProtocol) { + public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) { ReactorServerHttpResponse response = (ReactorServerHttpResponse) exchange.getResponse(); HandshakeInfo info = getHandshakeInfo(exchange, subProtocol); NettyDataBufferFactory bufferFactory = (NettyDataBufferFactory) response.bufferFactory(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java index 932f0269fd..8ff35a04f8 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/TomcatRequestUpgradeStrategy.java @@ -32,6 +32,7 @@ import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.http.server.reactive.ServletServerHttpRequest; import org.springframework.http.server.reactive.ServletServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; @@ -52,7 +53,7 @@ public class TomcatRequestUpgradeStrategy implements RequestUpgradeStrategy { @Override - public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, String subProtocol){ + public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol){ ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/UndertowRequestUpgradeStrategy.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/UndertowRequestUpgradeStrategy.java index b041e682ff..06aa90a97d 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/UndertowRequestUpgradeStrategy.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/upgrade/UndertowRequestUpgradeStrategy.java @@ -35,6 +35,7 @@ import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.UndertowServerHttpRequest; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; @@ -52,7 +53,7 @@ import org.springframework.web.server.ServerWebExchange; public class UndertowRequestUpgradeStrategy implements RequestUpgradeStrategy { @Override - public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, String subProtocol) { + public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) { ServerHttpRequest request = exchange.getRequest(); Assert.isInstanceOf(UndertowServerHttpRequest.class, request, "UndertowServerHttpRequest required"); HttpServerExchange httpExchange = ((UndertowServerHttpRequest) request).getUndertowExchange(); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java index 254814c90c..1632aa4c3e 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/function/server/RenderingResponseIntegrationTests.java @@ -31,6 +31,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.web.client.RestTemplate; import org.springframework.web.reactive.result.view.View; import org.springframework.web.reactive.result.view.ViewResolver; @@ -141,7 +142,7 @@ public class RenderingResponseIntegrationTests extends AbstractRouterFunctionInt } @Override - public Mono render(Map model, MediaType contentType, + public Mono render(@Nullable Map model, @Nullable MediaType contentType, ServerWebExchange exchange) { StringBuilder builder = new StringBuilder(); builder.append("name=").append(this.name).append('\n'); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java index 46e451e9b4..ce283e23c7 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/method/annotation/MessageReaderArgumentResolverTests.java @@ -45,6 +45,7 @@ import org.springframework.http.MediaType; import org.springframework.http.codec.DecoderHttpMessageReader; import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.codec.json.Jackson2JsonDecoder; +import org.springframework.lang.Nullable; import org.springframework.validation.Errors; import org.springframework.validation.Validator; import org.springframework.validation.annotation.Validated; @@ -401,7 +402,7 @@ public class MessageReaderArgumentResolverTests { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { TestBean testBean = (TestBean) target; if (testBean.getFoo() == null) { errors.rejectValue("foo", "nullValue"); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java b/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java index 7e5b89a8c8..7d11620c3e 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/result/view/ViewResolutionResultHandlerTests.java @@ -43,6 +43,7 @@ import org.springframework.core.io.buffer.support.DataBufferTestUtils; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.mock.http.server.reactive.test.MockServerHttpResponse; import org.springframework.mock.http.server.reactive.test.MockServerWebExchange; import org.springframework.ui.ConcurrentModel; @@ -389,7 +390,7 @@ public class ViewResolutionResultHandlerTests { } @Override - public Mono render(Map model, MediaType mediaType, ServerWebExchange exchange) { + public Mono render(@Nullable Map model, @Nullable MediaType mediaType, ServerWebExchange exchange) { ServerHttpResponse response = exchange.getResponse(); if (mediaType != null) { response.getHeaders().setContentType(mediaType); diff --git a/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/RxNettyRequestUpgradeStrategy.java b/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/RxNettyRequestUpgradeStrategy.java index 811d9f13aa..67f3a62b9d 100644 --- a/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/RxNettyRequestUpgradeStrategy.java +++ b/spring-webflux/src/test/java/org/springframework/web/reactive/socket/server/upgrade/RxNettyRequestUpgradeStrategy.java @@ -28,6 +28,7 @@ import rx.RxReactiveStreams; import org.springframework.core.io.buffer.NettyDataBufferFactory; import org.springframework.http.server.reactive.RxNettyServerHttpResponse; import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.lang.Nullable; import org.springframework.web.reactive.socket.HandshakeInfo; import org.springframework.web.reactive.socket.WebSocketHandler; import org.springframework.web.reactive.socket.adapter.RxNettyWebSocketSession; @@ -44,7 +45,7 @@ import org.springframework.web.server.ServerWebExchange; public class RxNettyRequestUpgradeStrategy implements RequestUpgradeStrategy { @Override - public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, String subProtocol) { + public Mono upgrade(ServerWebExchange exchange, WebSocketHandler handler, @Nullable String subProtocol) { RxNettyServerHttpResponse response = (RxNettyServerHttpResponse) exchange.getResponse(); HttpServerResponse rxNettyResponse = response.getRxNettyResponse(); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java index 3ff089689b..d466410e25 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java @@ -1006,7 +1006,7 @@ public class WebMvcConfigurationSupport implements ApplicationContextAware, Serv } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { } } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java index 3fe557beeb..2178e41250 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerExceptionResolver.java @@ -127,7 +127,7 @@ public abstract class AbstractHandlerExceptionResolver implements HandlerExcepti */ @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) { + @Nullable Object handler, Exception ex) { if (shouldApplyTo(request, handler)) { if (this.logger.isDebugEnabled()) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java index 70bf496260..f38acbd212 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/AbstractHandlerMethodExceptionResolver.java @@ -39,7 +39,7 @@ public abstract class AbstractHandlerMethodExceptionResolver extends AbstractHan * passing the bean of the {@code HandlerMethod}. Otherwise returns {@code false}. */ @Override - protected boolean shouldApplyTo(HttpServletRequest request, Object handler) { + protected boolean shouldApplyTo(HttpServletRequest request, @Nullable Object handler) { if (handler == null) { return super.shouldApplyTo(request, handler); } @@ -55,7 +55,7 @@ public abstract class AbstractHandlerMethodExceptionResolver extends AbstractHan @Override protected final ModelAndView doResolveException( - HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { + HttpServletRequest request, HttpServletResponse response, @Nullable Object handler, Exception ex) { return doResolveHandlerMethodException(request, response, (HandlerMethod) handler, ex); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java index 09e6a513f6..c343cb265e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerExceptionResolverComposite.java @@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.core.Ordered; +import org.springframework.lang.Nullable; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; @@ -65,9 +66,10 @@ public class HandlerExceptionResolverComposite implements HandlerExceptionResolv * The first one to return a ModelAndView instance wins. Otherwise {@code null} is returned. */ @Override + @Nullable public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, - Object handler, + @Nullable Object handler, Exception ex) { if (resolvers != null) { for (HandlerExceptionResolver handlerExceptionResolver : resolvers) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.java index b00d46898a..17856890c4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/HandlerInterceptorAdapter.java @@ -19,6 +19,7 @@ package org.springframework.web.servlet.handler; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.lang.Nullable; import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.ModelAndView; @@ -46,7 +47,7 @@ public abstract class HandlerInterceptorAdapter implements AsyncHandlerIntercept */ @Override public void postHandle( - HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) + HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java index 9022c79242..3b461171fd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/MappedInterceptor.java @@ -135,7 +135,7 @@ public final class MappedInterceptor implements HandlerInterceptor { } @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { this.interceptor.postHandle(request, response, handler, modelAndView); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java index 1b4be234f5..acb2bc8921 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/SimpleMappingExceptionResolver.java @@ -176,7 +176,7 @@ public class SimpleMappingExceptionResolver extends AbstractHandlerExceptionReso */ @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) { + @Nullable Object handler, Exception ex) { // Expose ModelAndView for chosen error view. String viewName = determineViewName(ex, request); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java index 2c204ba673..d72e188525 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/handler/WebRequestHandlerInterceptorAdapter.java @@ -19,6 +19,7 @@ package org.springframework.web.servlet.handler; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.context.request.AsyncWebRequestInterceptor; import org.springframework.web.context.request.WebRequestInterceptor; @@ -58,7 +59,7 @@ public class WebRequestHandlerInterceptorAdapter implements AsyncHandlerIntercep } @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { this.requestInterceptor.postHandle(new DispatcherServletWebRequest(request, response), diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java index 33b8b27bac..866cce416a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AbstractLocaleContextResolver.java @@ -64,7 +64,7 @@ public abstract class AbstractLocaleContextResolver extends AbstractLocaleResolv } @Override - public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { + public void setLocale(HttpServletRequest request, HttpServletResponse response, @Nullable Locale locale) { setLocaleContext(request, response, (locale != null ? new SimpleLocaleContext(locale) : null)); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java index a755e789d1..ab322a6380 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/AcceptHeaderLocaleResolver.java @@ -126,7 +126,7 @@ public class AcceptHeaderLocaleResolver implements LocaleResolver { } @Override - public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { + public void setLocale(HttpServletRequest request, HttpServletResponse response, @Nullable Locale locale) { throw new UnsupportedOperationException( "Cannot change HTTP accept header - use a different locale resolution strategy"); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java index c2e366e296..85f9654164 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/CookieLocaleResolver.java @@ -225,12 +225,12 @@ public class CookieLocaleResolver extends CookieGenerator implements LocaleConte } @Override - public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) { + public void setLocale(HttpServletRequest request, HttpServletResponse response, @Nullable Locale locale) { setLocaleContext(request, response, (locale != null ? new SimpleLocaleContext(locale) : null)); } @Override - public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) { + public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, @Nullable LocaleContext localeContext) { Locale locale = null; TimeZone timeZone = null; if (localeContext != null) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java index 618438327d..f9778a113f 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/FixedLocaleResolver.java @@ -23,6 +23,7 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.context.i18n.LocaleContext; import org.springframework.context.i18n.TimeZoneAwareLocaleContext; +import org.springframework.lang.Nullable; /** * {@link org.springframework.web.servlet.LocaleResolver} implementation @@ -92,7 +93,7 @@ public class FixedLocaleResolver extends AbstractLocaleContextResolver { } @Override - public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) { + public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, @Nullable LocaleContext localeContext) { throw new UnsupportedOperationException("Cannot change fixed locale - use a different locale resolution strategy"); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java index 343d6e6ce5..345647181c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/i18n/SessionLocaleResolver.java @@ -139,7 +139,7 @@ public class SessionLocaleResolver extends AbstractLocaleContextResolver { } @Override - public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, LocaleContext localeContext) { + public void setLocaleContext(HttpServletRequest request, HttpServletResponse response, @Nullable LocaleContext localeContext) { Locale locale = null; TimeZone timeZone = null; if (localeContext != null) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java index 7466661585..0fc4fb62b4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/WebContentInterceptor.java @@ -262,7 +262,7 @@ public class WebContentInterceptor extends WebContentGenerator implements Handle */ @Override public void postHandle( - HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) + HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception { } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java index 51fec27c76..893ed71d45 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/annotation/ResponseStatusExceptionResolver.java @@ -67,7 +67,7 @@ public class ResponseStatusExceptionResolver extends AbstractHandlerExceptionRes @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) { + @Nullable Object handler, Exception ex) { try { if (ex instanceof ResponseStatusException) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java index f93a785aad..24f56f690e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ExceptionHandlerExceptionResolver.java @@ -361,8 +361,9 @@ public class ExceptionHandlerExceptionResolver extends AbstractHandlerMethodExce * Find an {@code @ExceptionHandler} method and invoke it to handle the raised exception. */ @Override + @Nullable protected ModelAndView doResolveHandlerMethodException(HttpServletRequest request, - HttpServletResponse response, HandlerMethod handlerMethod, Exception exception) { + HttpServletResponse response, @Nullable HandlerMethod handlerMethod, Exception exception) { ServletInvocableHandlerMethod exceptionHandlerMethod = getExceptionHandlerMethod(handlerMethod, exception); if (exceptionHandlerMethod == null) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java index 559d3dd7b9..b155b3e4f4 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/MvcUriComponentsBuilder.java @@ -484,7 +484,7 @@ public class MvcUriComponentsBuilder { // We may not have all URI var values, expand only what we have return builder.build().expand(new UriComponents.UriTemplateVariables() { @Override - public Object getValue(String name) { + public Object getValue(@Nullable String name) { return uriVars.containsKey(name) ? uriVars.get(name) : UriComponents.UriTemplateVariables.SKIP_VALUE; } }); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PathVariableMethodArgumentResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PathVariableMethodArgumentResolver.java index bd88bc9eaa..5e11183d57 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PathVariableMethodArgumentResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/PathVariableMethodArgumentResolver.java @@ -24,6 +24,7 @@ import org.springframework.core.MethodParameter; import org.springframework.core.convert.ConversionService; import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.Converter; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; import org.springframework.web.bind.MissingPathVariableException; import org.springframework.web.bind.ServletRequestBindingException; @@ -100,7 +101,7 @@ public class PathVariableMethodArgumentResolver extends AbstractNamedValueMethod @Override @SuppressWarnings("unchecked") protected void handleResolvedValue(Object arg, String name, MethodParameter parameter, - ModelAndViewContainer mavContainer, NativeWebRequest request) { + @Nullable ModelAndViewContainer mavContainer, NativeWebRequest request) { String key = View.PATH_VARIABLES; int scope = RequestAttributes.SCOPE_REQUEST; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java index ee110ee972..e24d9c9593 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestBodyAdviceAdapter.java @@ -21,6 +21,7 @@ import java.lang.reflect.Type; import org.springframework.core.MethodParameter; import org.springframework.http.HttpInputMessage; import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.lang.Nullable; /** * A convenient starting point for implementing @@ -39,7 +40,8 @@ public abstract class RequestBodyAdviceAdapter implements RequestBodyAdvice { * The default implementation returns the body that was passed in. */ @Override - public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, + @Nullable + public Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class> converterType) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java index af9e288783..7c7850e95c 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyAdviceChain.java @@ -28,6 +28,7 @@ import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; import org.springframework.web.method.ControllerAdviceBean; @@ -95,7 +96,7 @@ class RequestResponseBodyAdviceChain implements RequestBodyAdvice, ResponseBodyA } @Override - public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, + public Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class> converterType) { for (RequestBodyAdvice advice : getMatchingAdvice(parameter, RequestBodyAdvice.class)) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java index 2f2438c979..68194f12f8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessor.java @@ -29,6 +29,7 @@ import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.validation.BindingResult; import org.springframework.web.HttpMediaTypeNotAcceptableException; import org.springframework.web.HttpMediaTypeNotSupportedException; @@ -141,7 +142,7 @@ public class RequestResponseBodyMethodProcessor extends AbstractMessageConverter } @Override - protected Object readWithMessageConverters(NativeWebRequest webRequest, MethodParameter parameter, + protected Object readWithMessageConverters(NativeWebRequest webRequest, @Nullable MethodParameter parameter, Type paramType) throws IOException, HttpMediaTypeNotSupportedException, HttpMessageNotReadableException { HttpServletRequest servletRequest = webRequest.getNativeRequest(HttpServletRequest.class); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestDataBinderFactory.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestDataBinderFactory.java index f43a7c9f8a..2794b72cb8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestDataBinderFactory.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ServletRequestDataBinderFactory.java @@ -18,6 +18,7 @@ package org.springframework.web.servlet.mvc.method.annotation; import java.util.List; +import org.springframework.lang.Nullable; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.support.WebBindingInitializer; import org.springframework.web.context.request.NativeWebRequest; @@ -45,7 +46,7 @@ public class ServletRequestDataBinderFactory extends InitBinderDataBinderFactory * Returns an instance of {@link ExtendedServletRequestDataBinder}. */ @Override - protected ServletRequestDataBinder createBinderInstance(Object target, String objectName, NativeWebRequest request) { + protected ServletRequestDataBinder createBinderInstance(@Nullable Object target, String objectName, NativeWebRequest request) { return new ExtendedServletRequestDataBinder(target, objectName); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java index cbe0085576..2149c270dd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/DefaultHandlerExceptionResolver.java @@ -103,7 +103,7 @@ public class DefaultHandlerExceptionResolver extends AbstractHandlerExceptionRes @Override protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, - Object handler, Exception ex) { + @Nullable Object handler, Exception ex) { try { if (ex instanceof HttpRequestMethodNotSupportedException) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributes.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributes.java index 1ac0887c6b..6570f8e4ac 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributes.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributes.java @@ -61,10 +61,10 @@ import org.springframework.web.servlet.FlashMap; public interface RedirectAttributes extends Model { @Override - RedirectAttributes addAttribute(String attributeName, Object attributeValue); + RedirectAttributes addAttribute(String attributeName, @Nullable Object attributeValue); @Override - RedirectAttributes addAttribute(Object attributeValue); + RedirectAttributes addAttribute(@Nullable Object attributeValue); @Override RedirectAttributes addAllAttributes(Collection attributeValues); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributesModelMap.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributesModelMap.java index 66c811837b..2a82a6d3bd 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributesModelMap.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/support/RedirectAttributesModelMap.java @@ -19,6 +19,7 @@ package org.springframework.web.servlet.mvc.support; import java.util.Collection; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.ui.ModelMap; import org.springframework.validation.DataBinder; @@ -67,7 +68,7 @@ public class RedirectAttributesModelMap extends ModelMap implements RedirectAttr *

Formats the attribute value as a String before adding it. */ @Override - public RedirectAttributesModelMap addAttribute(String attributeName, Object attributeValue) { + public RedirectAttributesModelMap addAttribute(String attributeName, @Nullable Object attributeValue) { super.addAttribute(attributeName, formatValue(attributeValue)); return this; } @@ -84,7 +85,7 @@ public class RedirectAttributesModelMap extends ModelMap implements RedirectAttr *

Formats the attribute value as a String before adding it. */ @Override - public RedirectAttributesModelMap addAttribute(Object attributeValue) { + public RedirectAttributesModelMap addAttribute(@Nullable Object attributeValue) { super.addAttribute(attributeValue); return this; } @@ -157,7 +158,7 @@ public class RedirectAttributesModelMap extends ModelMap implements RedirectAttr } @Override - public RedirectAttributes addFlashAttribute(String attributeName, Object attributeValue) { + public RedirectAttributes addFlashAttribute(String attributeName, @Nullable Object attributeValue) { this.flashAttributes.addAttribute(attributeName, attributeValue); return this; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java index 52e69919db..207ce47090 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractCachingViewResolver.java @@ -54,7 +54,7 @@ public abstract class AbstractCachingViewResolver extends WebApplicationObjectSu return null; } @Override - public void render(Map model, HttpServletRequest request, HttpServletResponse response) { + public void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) { } }; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java index 9733c6c169..246af03853 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/AbstractView.java @@ -294,7 +294,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement * @see #renderMergedOutputModel */ @Override - public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { + public void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { if (logger.isTraceEnabled()) { logger.trace("Rendering view with name '" + this.beanName + "' with model " + model + " and static attributes " + this.staticAttributes); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java index 1ba64f6ea2..3527b1f406 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/ContentNegotiatingViewResolver.java @@ -359,7 +359,7 @@ public class ContentNegotiatingViewResolver extends WebApplicationObjectSupport } @Override - public void render(Map model, HttpServletRequest request, HttpServletResponse response) { + public void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) { response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE); } }; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/ComplexWebApplicationContext.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/ComplexWebApplicationContext.java index 8992bf7a01..f8f627d0e7 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/ComplexWebApplicationContext.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/ComplexWebApplicationContext.java @@ -39,6 +39,7 @@ import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.support.ApplicationObjectSupport; import org.springframework.core.Ordered; import org.springframework.http.HttpHeaders; +import org.springframework.lang.Nullable; import org.springframework.ui.ModelMap; import org.springframework.web.bind.ServletRequestBindingException; import org.springframework.web.context.WebApplicationContext; @@ -308,7 +309,7 @@ public class ComplexWebApplicationContext extends StaticWebApplicationContext { @Override public void postHandle( - HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) + HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws ServletException { if (request.getAttribute("test2x") != null) { @@ -356,7 +357,7 @@ public class ComplexWebApplicationContext extends StaticWebApplicationContext { @Override public void postHandle( - HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) + HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws ServletException { if (request.getParameter("noView") != null) { @@ -395,12 +396,12 @@ public class ComplexWebApplicationContext extends StaticWebApplicationContext { } @Override - public void postHandle(WebRequest request, ModelMap model) throws Exception { + public void postHandle(WebRequest request, @Nullable ModelMap model) throws Exception { request.setAttribute("test3x", "test3x", WebRequest.SCOPE_REQUEST); } @Override - public void afterCompletion(WebRequest request, Exception ex) throws Exception { + public void afterCompletion(WebRequest request, @Nullable Exception ex) throws Exception { request.setAttribute("test3y", "test3y", WebRequest.SCOPE_REQUEST); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java index 0b48995a60..d96153e71d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParserTests.java @@ -29,6 +29,7 @@ import org.springframework.core.io.Resource; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.util.AntPathMatcher; import org.springframework.validation.MessageCodesResolver; import org.springframework.web.bind.support.ConfigurableWebBindingInitializer; @@ -254,7 +255,7 @@ class TestMessageCodesResolver implements MessageCodesResolver { @Override @SuppressWarnings("rawtypes") - public String[] resolveMessageCodes(String errorCode, String objectName, String field, Class fieldType) { + public String[] resolveMessageCodes(String errorCode, String objectName, String field, @Nullable Class fieldType) { return new String[] { "test.foo.bar" }; } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java index ff316d5173..f446b8642b 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/MvcNamespaceTests.java @@ -64,6 +64,7 @@ import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter; import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.mock.web.test.MockRequestDispatcher; @@ -981,7 +982,7 @@ public class MvcNamespaceTests { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { this.validatorInvoked = true; } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/InterceptorRegistryTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/InterceptorRegistryTests.java index 22bc5b584a..b263c4156a 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/InterceptorRegistryTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/InterceptorRegistryTests.java @@ -25,6 +25,7 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.ui.ModelMap; @@ -190,11 +191,11 @@ public class InterceptorRegistryTests { } @Override - public void postHandle(WebRequest request, ModelMap model) throws Exception { + public void postHandle(WebRequest request, @Nullable ModelMap model) throws Exception { } @Override - public void afterCompletion(WebRequest request, Exception ex) throws Exception { + public void afterCompletion(WebRequest request, @Nullable Exception ex) throws Exception { } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java index 8116a9fd20..f42b5ab9e0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupportExtensionTests.java @@ -36,6 +36,7 @@ import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockServletContext; import org.springframework.scheduling.concurrent.ConcurrentTaskExecutor; @@ -354,7 +355,7 @@ public class WebMvcConfigurationSupportExtensionTests { public Validator getValidator() { return new Validator() { @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { errors.reject("invalid"); } @Override diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java index bfe70c7a82..ca1deded49 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/CglibProxyControllerTests.java @@ -26,6 +26,7 @@ import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreato import org.springframework.aop.interceptor.SimpleTraceInterceptor; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.mock.web.test.MockServletConfig; @@ -81,7 +82,7 @@ public class CglibProxyControllerTests { private void initServlet(final Class controllerClass) throws ServletException { servlet = new DispatcherServlet() { @Override - protected WebApplicationContext createWebApplicationContext(WebApplicationContext parent) { + protected WebApplicationContext createWebApplicationContext(@Nullable WebApplicationContext parent) { GenericWebApplicationContext wac = new GenericWebApplicationContext(); wac.registerBeanDefinition("controller", new RootBeanDefinition(controllerClass)); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java index 5f88577b69..57ec0d89eb 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/annotation/JdkProxyControllerTests.java @@ -26,6 +26,7 @@ import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreato import org.springframework.aop.interceptor.SimpleTraceInterceptor; import org.springframework.aop.support.DefaultPointcutAdvisor; import org.springframework.beans.factory.support.RootBeanDefinition; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.mock.web.test.MockServletConfig; @@ -81,7 +82,7 @@ public class JdkProxyControllerTests { private void initServlet(final Class controllerclass) throws ServletException { servlet = new DispatcherServlet() { @Override - protected WebApplicationContext createWebApplicationContext(WebApplicationContext parent) { + protected WebApplicationContext createWebApplicationContext(@Nullable WebApplicationContext parent) { GenericWebApplicationContext wac = new GenericWebApplicationContext(); wac.registerBeanDefinition("controller", new RootBeanDefinition(controllerclass)); DefaultAdvisorAutoProxyCreator autoProxyCreator = new DefaultAdvisorAutoProxyCreator(); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java index e26353afa8..8596fce97e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/AbstractServletHandlerMethodTests.java @@ -22,6 +22,7 @@ import org.junit.After; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.context.ApplicationContextInitializer; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockServletConfig; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.GenericWebApplicationContext; @@ -76,7 +77,7 @@ public abstract class AbstractServletHandlerMethodTests { servlet = new DispatcherServlet() { @Override - protected WebApplicationContext createWebApplicationContext(WebApplicationContext parent) { + protected WebApplicationContext createWebApplicationContext(@Nullable WebApplicationContext parent) { for (Class clazz : controllerClasses) { wac.registerBeanDefinition(clazz.getSimpleName(), new RootBeanDefinition(clazz)); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HandlerMethodAnnotationDetectionTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HandlerMethodAnnotationDetectionTests.java index 386ca7969f..93d7ceb793 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HandlerMethodAnnotationDetectionTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HandlerMethodAnnotationDetectionTests.java @@ -32,6 +32,7 @@ import org.springframework.aop.support.StaticMethodMatcherPointcut; import org.springframework.beans.factory.support.RootBeanDefinition; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.stereotype.Controller; @@ -121,7 +122,7 @@ public class HandlerMethodAnnotationDetectionTests { class TestPointcut extends StaticMethodMatcherPointcut { @Override - public boolean matches(Method method, Class clazz) { + public boolean matches(Method method, @Nullable Class clazz) { return method.getName().equals("hashCode"); } } @@ -527,7 +528,7 @@ public class HandlerMethodAnnotationDetectionTests { private static StaticMethodMatcherPointcut getControllerPointcut() { return new StaticMethodMatcherPointcut() { @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return ((AnnotationUtils.findAnnotation(targetClass, Controller.class) != null) || (AnnotationUtils.findAnnotation(targetClass, RequestMapping.class) != null)); } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java index 6e78e13d3e..ba2d04ee0e 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/HttpEntityMethodProcessorTests.java @@ -34,6 +34,7 @@ import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @@ -261,7 +262,7 @@ public class HttpEntityMethodProcessorTests { private final class ValidatingBinderFactory implements WebDataBinderFactory { @Override - public WebDataBinder createBinder(NativeWebRequest webRequest, Object target, String objectName) { + public WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName) { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); WebDataBinder dataBinder = new WebDataBinder(target, objectName); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java index 702dcc1220..adec9a29fb 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerAdapterIntegrationTests.java @@ -47,6 +47,7 @@ import org.springframework.http.CacheControl; import org.springframework.http.HttpEntity; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.mock.web.test.MockMultipartFile; @@ -443,7 +444,7 @@ public class RequestMappingHandlerAdapterIntegrationTests { } @Override - public void validate(Object target, Errors errors) { + public void validate(@Nullable Object target, Errors errors) { errors.reject("error"); } } diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java index a2a70b9a90..73a685c9d0 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestPartMethodArgumentResolverTests.java @@ -35,6 +35,7 @@ import org.springframework.core.annotation.SynthesizingMethodParameter; import org.springframework.http.HttpInputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.mock.web.test.MockMultipartFile; @@ -557,7 +558,7 @@ public class RequestPartMethodArgumentResolverTests { private final class ValidatingBinderFactory implements WebDataBinderFactory { @Override - public WebDataBinder createBinder(NativeWebRequest webRequest, Object target, String objectName) throws Exception { + public WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName) throws Exception { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); WebDataBinder dataBinder = new WebDataBinder(target, objectName); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java index 3a5957c431..5095b41255 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorMockTests.java @@ -36,6 +36,7 @@ import org.springframework.http.HttpOutputMessage; import org.springframework.http.MediaType; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.HttpMessageNotReadableException; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @@ -403,7 +404,7 @@ public class RequestResponseBodyMethodProcessorMockTests { private final class ValidatingBinderFactory implements WebDataBinderFactory { @Override - public WebDataBinder createBinder(NativeWebRequest webRequest, Object target, String objectName) throws Exception { + public WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName) throws Exception { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); WebDataBinder dataBinder = new WebDataBinder(target, objectName); diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java index 363a496d5b..457f62298d 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/RequestResponseBodyMethodProcessorTests.java @@ -50,6 +50,7 @@ import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.util.MultiValueMap; @@ -806,7 +807,7 @@ public class RequestResponseBodyMethodProcessorTests { private final class ValidatingBinderFactory implements WebDataBinderFactory { @Override - public WebDataBinder createBinder(NativeWebRequest request, Object target, String objectName) { + public WebDataBinder createBinder(NativeWebRequest request, @Nullable Object target, String objectName) { LocalValidatorFactoryBean validator = new LocalValidatorFactoryBean(); validator.afterPropertiesSet(); WebDataBinder dataBinder = new WebDataBinder(target, objectName); @@ -1013,7 +1014,7 @@ public class RequestResponseBodyMethodProcessorTests { } @Override - public Object handleEmptyBody(Object body, HttpInputMessage inputMessage, MethodParameter parameter, + public Object handleEmptyBody(@Nullable Object body, HttpInputMessage inputMessage, MethodParameter parameter, Type targetType, Class> converterType) { return "default value for empty body"; diff --git a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java index 1e22689fcb..35b4450f4c 100644 --- a/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java +++ b/spring-webmvc/src/test/java/org/springframework/web/servlet/mvc/method/annotation/ServletAnnotationControllerHandlerMethodTests.java @@ -84,6 +84,7 @@ import org.springframework.http.converter.HttpMessageNotReadableException; import org.springframework.http.converter.HttpMessageNotWritableException; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.xml.MarshallingHttpMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.mock.web.test.MockHttpServletRequest; import org.springframework.mock.web.test.MockHttpServletResponse; import org.springframework.mock.web.test.MockMultipartFile; @@ -2489,7 +2490,7 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl @Override @SuppressWarnings({"unchecked", "deprecation", "rawtypes"}) - public void render(Map model, HttpServletRequest request, HttpServletResponse response) + public void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { TestBean tb = (TestBean) model.get("testBean"); if (tb == null) { @@ -2534,7 +2535,7 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl return null; } @Override - public void render(Map model, HttpServletRequest request, HttpServletResponse response) { + public void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) { request.setAttribute("viewName", viewName); request.getSession().setAttribute("model", model); } @@ -2756,12 +2757,12 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl public static class NotReadableMessageConverter implements HttpMessageConverter { @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return true; } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return true; } @@ -2777,7 +2778,7 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl } @Override - public void write(Object o, MediaType contentType, HttpOutputMessage outputMessage) + public void write(Object o, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { throw new UnsupportedOperationException("Not implemented"); } @@ -2792,12 +2793,12 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl } @Override - public boolean canRead(Class clazz, MediaType mediaType) { + public boolean canRead(Class clazz, @Nullable MediaType mediaType) { return supportedMediaTypes.contains(mediaType); } @Override - public boolean canWrite(Class clazz, MediaType mediaType) { + public boolean canWrite(Class clazz, @Nullable MediaType mediaType) { return supportedMediaTypes.contains(mediaType); } @@ -2813,7 +2814,7 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl } @Override - public void write(Object o, MediaType contentType, HttpOutputMessage outputMessage) + public void write(Object o, @Nullable MediaType contentType, HttpOutputMessage outputMessage) throws IOException, HttpMessageNotWritableException { outputMessage.getHeaders().setContentType(contentType); outputMessage.getBody(); // force a header write @@ -2924,7 +2925,7 @@ public class ServletAnnotationControllerHandlerMethodTests extends AbstractServl return "text/html"; } @Override - public void render(Map model, HttpServletRequest request, HttpServletResponse response) + public void render(@Nullable Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { response.getWriter().write("myValue"); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolErrorHandler.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolErrorHandler.java index 9560d93385..3f79a892ea 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolErrorHandler.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/StompSubProtocolErrorHandler.java @@ -16,6 +16,7 @@ package org.springframework.web.socket.messaging; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.simp.stomp.StompCommand; import org.springframework.messaging.simp.stomp.StompHeaderAccessor; @@ -35,7 +36,8 @@ public class StompSubProtocolErrorHandler implements SubProtocolErrorHandler handleClientMessageProcessingError(Message clientMessage, Throwable ex) { + @Nullable + public Message handleClientMessageProcessingError(@Nullable Message clientMessage, Throwable ex) { StompHeaderAccessor accessor = StompHeaderAccessor.create(StompCommand.ERROR); accessor.setMessage(ex.getMessage()); accessor.setLeaveMutable(true); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java index 0968255c99..9e0939956a 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/standard/AbstractStandardUpgradeStrategy.java @@ -37,6 +37,7 @@ import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.http.server.ServletServerHttpRequest; import org.springframework.http.server.ServletServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.socket.WebSocketExtension; import org.springframework.web.socket.WebSocketHandler; @@ -101,7 +102,7 @@ public abstract class AbstractStandardUpgradeStrategy implements RequestUpgradeS @Override public void upgrade(ServerHttpRequest request, ServerHttpResponse response, - String selectedProtocol, List selectedExtensions, Principal user, + @Nullable String selectedProtocol, List selectedExtensions, Principal user, WebSocketHandler wsHandler, Map attrs) throws HandshakeFailureException { HttpHeaders headers = request.getHeaders(); diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java index 27024c139b..c8c8f79189 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/config/MessageBrokerBeanDefinitionParserTests.java @@ -32,6 +32,7 @@ import org.springframework.beans.factory.config.CustomScopeConfigurer; import org.springframework.beans.factory.xml.XmlBeanDefinitionReader; import org.springframework.core.MethodParameter; import org.springframework.core.io.ClassPathResource; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHandler; import org.springframework.messaging.converter.ByteArrayMessageConverter; @@ -540,5 +541,5 @@ class TestValidator implements Validator { } @Override - public void validate(Object target, Errors errors) { } + public void validate(@Nullable Object target, Errors errors) { } } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/WebSocketStompClientIntegrationTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/WebSocketStompClientIntegrationTests.java index 9cddb8bad0..3bd2265e9c 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/messaging/WebSocketStompClientIntegrationTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/messaging/WebSocketStompClientIntegrationTests.java @@ -31,6 +31,7 @@ import org.junit.Test; import org.junit.rules.TestName; import org.springframework.context.annotation.Configuration; +import org.springframework.lang.Nullable; import org.springframework.messaging.converter.StringMessageConverter; import org.springframework.messaging.simp.config.MessageBrokerRegistry; import org.springframework.messaging.simp.stomp.StompCommand; @@ -171,7 +172,7 @@ public class WebSocketStompClientIntegrationTests { return String.class; } @Override - public void handleFrame(StompHeaders headers, Object payload) { + public void handleFrame(StompHeaders headers, @Nullable Object payload) { received.add((String) payload); } }); @@ -208,7 +209,7 @@ public class WebSocketStompClientIntegrationTests { } @Override - public void handleFrame(StompHeaders headers, Object payload) { + public void handleFrame(StompHeaders headers, @Nullable Object payload) { logger.error("STOMP error frame " + headers + " payload=" + payload); } diff --git a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/RestTemplateXhrTransportTests.java b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/RestTemplateXhrTransportTests.java index 2a638f79cd..53d6cfebe2 100644 --- a/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/RestTemplateXhrTransportTests.java +++ b/spring-websocket/src/test/java/org/springframework/web/socket/sockjs/client/RestTemplateXhrTransportTests.java @@ -34,6 +34,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.client.ClientHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.simp.stomp.StompCommand; @@ -213,7 +214,7 @@ public class RestTemplateXhrTransportTests { } @Override - public T execute(URI url, HttpMethod method, RequestCallback callback, ResponseExtractor extractor) throws RestClientException { + public T execute(URI url, HttpMethod method, @Nullable RequestCallback callback, @Nullable ResponseExtractor extractor) throws RestClientException { try { extractor.extractData(this.responses.remove()); } diff --git a/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java b/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java index bc8e0a8a4d..a792b7a6be 100644 --- a/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java +++ b/src/test/java/org/springframework/aop/framework/autoproxy/AdvisorAutoProxyCreatorIntegrationTests.java @@ -32,6 +32,7 @@ import org.springframework.aop.support.StaticMethodMatcherPointcutAdvisor; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.support.ClassPathXmlApplicationContext; +import org.springframework.lang.Nullable; import org.springframework.tests.aop.advice.CountingBeforeAdvice; import org.springframework.tests.aop.advice.MethodCounter; import org.springframework.tests.aop.interceptor.NopInterceptor; @@ -207,7 +208,7 @@ class NeverMatchAdvisor extends StaticMethodMatcherPointcutAdvisor { * @see org.springframework.aop.MethodMatcher#matches(java.lang.reflect.Method, java.lang.Class) */ @Override - public boolean matches(Method m, Class targetClass) { + public boolean matches(Method m, @Nullable Class targetClass) { return false; } @@ -255,7 +256,7 @@ class OrderedTxCheckAdvisor extends StaticMethodMatcherPointcutAdvisor implement } @Override - public boolean matches(Method method, Class targetClass) { + public boolean matches(Method method, @Nullable Class targetClass) { return method.getName().startsWith("setAge"); }