From 1f28825f9da63a13aaf8940aadedcf81358dc506 Mon Sep 17 00:00:00 2001 From: Sebastien Deleuze Date: Wed, 31 May 2017 21:35:52 +0200 Subject: [PATCH] Add more @Nullable parameters based on null usage Issue: SPR-15540 --- .../AbstractNestablePropertyAccessor.java | 8 +++---- .../org/springframework/beans/BeanUtils.java | 2 +- .../beans/BeanWrapperImpl.java | 3 ++- .../beans/ExtendedBeanInfo.java | 6 ++--- .../beans/TypeConverterDelegate.java | 2 +- .../config/AutowireCapableBeanFactory.java | 4 ++-- .../factory/config/BeanExpressionContext.java | 2 +- .../config/ConfigurableBeanFactory.java | 2 +- .../config/ConstructorArgumentValues.java | 4 ++-- .../factory/config/TypedStringValue.java | 9 +++---- .../beans/factory/config/YamlProcessor.java | 3 ++- .../beans/factory/parsing/Problem.java | 2 +- .../beans/factory/parsing/ReaderContext.java | 17 ++++++------- .../AbstractAutowireCapableBeanFactory.java | 8 +++---- .../factory/support/AbstractBeanFactory.java | 4 ++-- .../support/BeanDefinitionBuilder.java | 5 ++-- ...CglibSubclassingInstantiationStrategy.java | 2 +- .../factory/support/ConstructorResolver.java | 2 +- .../support/DefaultListableBeanFactory.java | 4 ++-- .../support/DefaultSingletonBeanRegistry.java | 2 +- .../factory/support/RootBeanDefinition.java | 2 +- .../support/SimpleInstantiationStrategy.java | 2 +- .../xml/BeanDefinitionParserDelegate.java | 14 +++++------ .../mail/javamail/JavaMailSenderImpl.java | 2 +- .../mail/javamail/MimeMessageHelper.java | 2 +- .../scheduling/quartz/SchedulerAccessor.java | 3 ++- .../cache/interceptor/CacheAspectSupport.java | 2 +- .../context/MessageSource.java | 2 +- .../context/ResourceLoaderAware.java | 3 ++- .../AnnotatedBeanDefinitionReader.java | 2 +- .../AnnotationConfigApplicationContext.java | 2 +- ...athScanningCandidateComponentProvider.java | 2 +- .../ConfigurationClassPostProcessor.java | 2 +- .../AbstractApplicationEventMulticaster.java | 2 +- .../support/AbstractApplicationContext.java | 4 ++-- .../support/AbstractMessageSource.java | 2 +- .../support/DelegatingMessageSource.java | 2 +- .../support/GenericApplicationContext.java | 2 +- ...ReloadableResourceBundleMessageSource.java | 2 +- .../classloading/WeavingTransformer.java | 4 +++- .../jmx/export/MBeanExporter.java | 2 +- .../jndi/JndiLocatorDelegate.java | 3 ++- .../jndi/JndiLocatorSupport.java | 3 ++- .../jndi/support/SimpleJndiBeanFactory.java | 2 +- .../scheduling/annotation/AsyncResult.java | 5 ++-- .../concurrent/ConcurrentTaskExecutor.java | 3 ++- .../scripting/bsh/BshScriptUtils.java | 2 +- .../support/ScriptFactoryPostProcessor.java | 2 +- .../validation/AbstractBindingResult.java | 2 +- .../validation/BindException.java | 2 +- .../DefaultMessageCodesResolver.java | 4 ++-- .../springframework/validation/Errors.java | 2 +- .../validation/ValidationUtils.java | 4 ++-- .../springframework/core/OrderComparator.java | 2 +- .../core/ReactiveAdapterRegistry.java | 2 +- .../core/ReactiveTypeDescriptor.java | 3 ++- .../springframework/core/ResolvableType.java | 8 +++---- .../annotation/AnnotatedElementUtils.java | 20 ++++++++-------- .../core/codec/ByteArrayDecoder.java | 2 +- .../core/codec/ByteBufferDecoder.java | 2 +- .../core/codec/DataBufferDecoder.java | 2 +- .../springframework/core/codec/Decoder.java | 2 +- .../core/codec/ResourceDecoder.java | 2 +- .../core/codec/StringDecoder.java | 2 +- .../convert/ConversionFailedException.java | 3 ++- .../core/convert/Property.java | 2 +- .../core/convert/TypeDescriptor.java | 2 +- .../support/GenericConversionService.java | 4 ++-- .../org/springframework/core/io/VfsUtils.java | 3 ++- .../io/support/ResourcePropertySource.java | 3 ++- .../springframework/util/AntPathMatcher.java | 4 +++- .../springframework/util/CollectionUtils.java | 2 +- .../util/LinkedMultiValueMap.java | 4 +++- .../springframework/util/MultiValueMap.java | 2 +- .../springframework/util/ReflectionUtils.java | 6 ++--- .../org/springframework/util/StringUtils.java | 4 ++-- .../util/concurrent/ListenableFutureTask.java | 4 +++- .../concurrent/SettableListenableFuture.java | 3 ++- .../expression/TypedValue.java | 6 +++-- .../expression/common/ExpressionUtils.java | 3 ++- .../common/TemplateAwareExpressionParser.java | 3 ++- .../expression/spel/CompiledExpression.java | 3 ++- .../expression/spel/ExpressionState.java | 2 +- .../spel/SpelParserConfiguration.java | 3 ++- .../expression/spel/ast/FormatHelper.java | 3 ++- .../InternalSpelExpressionParser.java | 2 +- .../spel/standard/SpelExpressionParser.java | 3 ++- .../support/StandardEvaluationContext.java | 3 ++- .../config/SortedResourcesFactoryBean.java | 3 ++- .../jdbc/core/JdbcTemplate.java | 2 +- .../jdbc/core/StatementCreatorUtils.java | 2 +- .../NamedParameterJdbcTemplate.java | 3 ++- .../core/namedparam/NamedParameterUtils.java | 2 +- .../DataSourceTransactionManager.java | 3 ++- .../JdbcTransactionObjectSupport.java | 3 ++- .../jdbc/datasource/init/ScriptUtils.java | 3 ++- .../springframework/jdbc/object/SqlQuery.java | 24 +++++++++---------- .../connection/CachingConnectionFactory.java | 2 +- .../jms/connection/JmsResourceHolder.java | 4 ++-- .../jms/connection/JmsTransactionManager.java | 3 ++- .../jms/core/JmsMessageOperations.java | 6 ++--- .../jms/core/JmsMessagingTemplate.java | 15 ++++++------ .../springframework/jms/core/JmsTemplate.java | 8 +++---- .../listener/SessionAwareMessageListener.java | 4 +++- .../adapter/MessageListenerAdapter.java | 3 ++- .../MessagingMessageListenerAdapter.java | 3 ++- .../remoting/JmsInvokerServiceExporter.java | 2 +- .../SimpleMessageListenerContainerTests.java | 7 +++--- .../messaging/MessageHeaders.java | 4 ++-- ...DestinationResolvingMessagingTemplate.java | 3 ++- .../core/AbstractMessageSendingTemplate.java | 6 ++--- .../core/AbstractMessagingTemplate.java | 9 +++---- ...tionResolvingMessageSendingOperations.java | 5 ++-- .../core/MessageRequestReplyOperations.java | 8 +++---- .../core/MessageSendingOperations.java | 5 ++-- .../simp/SimpMessageHeaderAccessor.java | 5 ++-- .../simp/SimpMessageSendingOperations.java | 4 ++-- .../simp/stomp/DefaultStompSession.java | 5 ++-- .../stomp/ReactorNettyTcpStompClient.java | 3 ++- .../stomp/StompBrokerRelayMessageHandler.java | 5 ++-- .../messaging/simp/stomp/StompDecoder.java | 2 +- .../simp/stomp/StompHeaderAccessor.java | 4 ++-- .../messaging/simp/stomp/StompHeaders.java | 3 ++- .../messaging/simp/stomp/StompSession.java | 2 +- .../support/AbstractMessageChannel.java | 4 ++-- .../support/ExecutorSubscribableChannel.java | 2 +- .../support/MessageHeaderAccessor.java | 2 +- .../hibernate5/ConfigurableJtaPlatform.java | 3 ++- .../orm/hibernate5/HibernateTemplate.java | 20 ++++++++-------- .../HibernateTransactionManager.java | 2 +- .../hibernate5/LocalSessionFactoryBean.java | 3 ++- .../orm/jpa/ExtendedEntityManagerCreator.java | 2 +- .../orm/jpa/JpaTransactionManager.java | 2 +- ...ocalContainerEntityManagerFactoryBean.java | 3 ++- .../DefaultPersistenceUnitManager.java | 2 +- ...ersistenceAnnotationBeanPostProcessor.java | 4 ++-- .../orm/jpa/vendor/HibernateJpaDialect.java | 2 +- .../oxm/jaxb/Jaxb2Marshaller.java | 4 ++-- .../oxm/mime/MimeMarshaller.java | 3 ++- .../oxm/mime/MimeUnmarshaller.java | 3 ++- .../oxm/xstream/XStreamMarshaller.java | 12 +++++----- .../mock/web/MockAsyncContext.java | 3 ++- .../mock/web/MockHttpServletRequest.java | 4 ++-- .../setup/StubWebApplicationContext.java | 6 ++--- .../CciLocalTransactionManager.java | 3 ++- .../jca/cci/core/CciTemplate.java | 2 +- .../AbstractMessageEndpointFactory.java | 2 +- .../jca/work/SimpleTaskWorkManager.java | 7 +++--- .../AbstractPlatformTransactionManager.java | 8 +++---- .../support/AbstractTransactionStatus.java | 2 +- .../http/ContentDisposition.java | 2 +- .../org/springframework/http/HttpHeaders.java | 2 +- .../org/springframework/http/HttpRange.java | 3 ++- .../http/codec/EncoderHttpMessageWriter.java | 4 ++-- .../http/codec/FormHttpMessageWriter.java | 2 +- .../http/codec/HttpMessageWriter.java | 4 ++-- .../http/codec/ResourceHttpMessageWriter.java | 4 ++-- .../ServerSentEventHttpMessageWriter.java | 4 ++-- .../http/codec/json/Jackson2CodecSupport.java | 3 ++- .../http/codec/json/Jackson2JsonDecoder.java | 2 +- .../http/codec/json/JsonObjectDecoder.java | 2 +- .../multipart/MultipartHttpMessageWriter.java | 2 +- .../http/codec/xml/Jaxb2XmlDecoder.java | 2 +- .../AbstractGenericHttpMessageConverter.java | 2 +- .../AbstractHttpMessageConverter.java | 2 +- .../BufferedImageHttpMessageConverter.java | 2 +- .../converter/FormHttpMessageConverter.java | 2 +- .../GenericHttpMessageConverter.java | 2 +- .../http/converter/HttpMessageConverter.java | 2 +- .../ResourceRegionHttpMessageConverter.java | 2 +- .../ProtobufHttpMessageConverter.java | 2 +- .../Jaxb2CollectionHttpMessageConverter.java | 2 +- ...ractMappingContentNegotiationStrategy.java | 2 +- .../web/bind/EscapedErrors.java | 2 +- .../support/DefaultDataBinderFactory.java | 2 +- .../bind/support/WebDataBinderFactory.java | 2 +- .../support/WebExchangeBindException.java | 2 +- .../web/client/RestOperations.java | 12 +++++----- .../web/context/request/FacesWebRequest.java | 5 ++-- .../context/request/ServletWebRequest.java | 3 ++- .../web/context/request/WebRequest.java | 2 +- .../support/WebApplicationContextUtils.java | 4 ++-- .../support/InvocableHandlerMethod.java | 2 +- .../web/server/ServerWebExchange.java | 3 ++- .../server/ServerWebExchangeDecorator.java | 3 ++- .../adapter/DefaultServerWebExchange.java | 3 ++- .../web/util/UriComponentsBuilder.java | 2 +- .../web/util/pattern/PathPattern.java | 2 +- .../web/reactive/BindingContext.java | 2 +- .../resource/AppCacheManifestTransformer.java | 3 ++- .../DefaultResourceResolverChain.java | 2 +- .../resource/ResourceResolverChain.java | 3 ++- .../annotation/ControllerMethodResolver.java | 3 ++- .../HttpEntityArgumentResolver.java | 3 ++- .../web/servlet/FrameworkServlet.java | 4 ++-- .../web/servlet/HandlerExecutionChain.java | 2 +- .../web/servlet/config/MvcNamespaceUtils.java | 6 ++--- .../DefaultServletHandlerConfigurer.java | 2 +- ...stractMessageConverterMethodProcessor.java | 3 ++- .../annotation/MvcUriComponentsBuilder.java | 8 +++---- .../annotation/ResponseBodyEmitter.java | 2 +- .../ResponseEntityExceptionHandler.java | 2 +- .../mvc/method/annotation/SseEmitter.java | 7 +++--- .../resource/AppCacheManifestTransformer.java | 3 ++- .../DefaultResourceResolverChain.java | 3 ++- .../resource/ResourceResolverChain.java | 2 +- .../web/servlet/support/RequestContext.java | 2 +- .../web/servlet/view/AbstractView.java | 2 +- .../view/script/ScriptTemplateView.java | 2 +- .../web/socket/WebSocketHttpHeaders.java | 3 ++- .../client/AbstractWebSocketClient.java | 3 ++- .../web/socket/client/WebSocketClient.java | 3 ++- .../messaging/WebSocketStompClient.java | 5 ++-- .../web/socket/sockjs/SockJsException.java | 3 ++- .../client/AbstractClientSockJsSession.java | 3 ++- .../client/DefaultTransportRequest.java | 3 ++- .../sockjs/client/JettyXhrTransport.java | 3 ++- .../socket/sockjs/client/SockJsClient.java | 2 +- .../handler/DefaultSockJsService.java | 3 ++- 219 files changed, 441 insertions(+), 355 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java b/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java index 3275e59f9f9..a16e0a9ba97 100644 --- a/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/AbstractNestablePropertyAccessor.java @@ -189,7 +189,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA * @param nestedPath the nested path of the object * @param rootObject the root object at the top of the path */ - public void setWrappedInstance(Object object, String nestedPath, Object rootObject) { + public void setWrappedInstance(Object object, String nestedPath, @Nullable Object rootObject) { this.wrappedObject = ObjectUtils.unwrapOptional(object); Assert.notNull(this.wrappedObject, "Target object must not be null"); this.nestedPath = (nestedPath != null ? nestedPath : ""); @@ -567,7 +567,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA return false; } - private Object convertIfNecessary(String propertyName, Object oldValue, Object newValue, Class requiredType, + private Object convertIfNecessary(@Nullable String propertyName, @Nullable Object oldValue, Object newValue, Class requiredType, TypeDescriptor td) throws TypeMismatchException { try { return this.typeConverterDelegate.convertIfNecessary(propertyName, oldValue, newValue, requiredType, td); @@ -594,7 +594,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA } } - protected Object convertForProperty(String propertyName, Object oldValue, Object newValue, TypeDescriptor td) + protected Object convertForProperty(String propertyName, @Nullable Object oldValue, Object newValue, TypeDescriptor td) throws TypeMismatchException { return convertIfNecessary(propertyName, oldValue, newValue, td.getType(), td); @@ -886,7 +886,7 @@ public abstract class AbstractNestablePropertyAccessor extends AbstractPropertyA return new PropertyValue(tokens.canonicalName, defaultValue); } - private Object newValue(Class type, TypeDescriptor desc, String name) { + private Object newValue(Class type, @Nullable TypeDescriptor desc, String name) { try { if (type.isArray()) { Class componentType = type.getComponentType(); diff --git a/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java b/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java index 0a73d0893a1..70c7840e159 100644 --- a/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java +++ b/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java @@ -599,7 +599,7 @@ public abstract class BeanUtils { * @throws BeansException if the copying failed * @see BeanWrapper */ - private static void copyProperties(Object source, Object target, Class editable, String... ignoreProperties) + private static void copyProperties(Object source, Object target, @Nullable Class editable, String... ignoreProperties) throws BeansException { Assert.notNull(source, "Source must not be null"); diff --git a/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java b/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java index 4d10dc0c818..f69b08c946c 100644 --- a/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java +++ b/spring-beans/src/main/java/org/springframework/beans/BeanWrapperImpl.java @@ -28,6 +28,7 @@ import java.security.PrivilegedExceptionAction; import org.springframework.core.ResolvableType; import org.springframework.core.convert.Property; import org.springframework.core.convert.TypeDescriptor; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -147,7 +148,7 @@ public class BeanWrapperImpl extends AbstractNestablePropertyAccessor implements } @Override - public void setWrappedInstance(Object object, String nestedPath, Object rootObject) { + public void setWrappedInstance(Object object, String nestedPath, @Nullable Object rootObject) { super.setWrappedInstance(object, nestedPath, rootObject); setIntrospectionClass(getWrappedClass()); } diff --git a/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java b/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java index 9bd39e28b1a..3f7713516c7 100644 --- a/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java +++ b/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java @@ -280,7 +280,7 @@ class ExtendedBeanInfo implements BeanInfo { PropertyDescriptorUtils.copyNonMethodProperties(original, this); } - public SimplePropertyDescriptor(String propertyName, Method readMethod, Method writeMethod) throws IntrospectionException { + public SimplePropertyDescriptor(String propertyName, @Nullable Method readMethod, Method writeMethod) throws IntrospectionException { super(propertyName, null, null); this.readMethod = readMethod; this.writeMethod = writeMethod; @@ -371,8 +371,8 @@ class ExtendedBeanInfo implements BeanInfo { PropertyDescriptorUtils.copyNonMethodProperties(original, this); } - public SimpleIndexedPropertyDescriptor(String propertyName, Method readMethod, Method writeMethod, - Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException { + public SimpleIndexedPropertyDescriptor(String propertyName, @Nullable Method readMethod, @Nullable Method writeMethod, + @Nullable Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException { super(propertyName, null, null, null, null); this.readMethod = readMethod; diff --git a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java index 730f2689100..ee5b7009dc9 100644 --- a/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java +++ b/spring-beans/src/main/java/org/springframework/beans/TypeConverterDelegate.java @@ -145,7 +145,7 @@ class TypeConverterDelegate { * @throws IllegalArgumentException if type conversion failed */ @SuppressWarnings("unchecked") - public T convertIfNecessary(String propertyName, @Nullable Object oldValue, Object newValue, + public T convertIfNecessary(@Nullable String propertyName, @Nullable Object oldValue, Object newValue, @Nullable Class requiredType, TypeDescriptor typeDescriptor) throws IllegalArgumentException { // Custom editor for this type? diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java index fed381c4014..4c0fab3b030 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/AutowireCapableBeanFactory.java @@ -339,7 +339,7 @@ public interface AutowireCapableBeanFactory extends BeanFactory { * @see #resolveDependency(DependencyDescriptor, String, Set, TypeConverter) */ @Nullable - Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName) throws BeansException; + Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName) throws BeansException; /** * Resolve the specified dependency against the beans defined in this factory. @@ -357,6 +357,6 @@ public interface AutowireCapableBeanFactory extends BeanFactory { */ @Nullable Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName, - Set autowiredBeanNames, TypeConverter typeConverter) throws BeansException; + @Nullable Set autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanExpressionContext.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanExpressionContext.java index 2f0a5bead26..86df44a2bee 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanExpressionContext.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/BeanExpressionContext.java @@ -32,7 +32,7 @@ public class BeanExpressionContext { private final Scope scope; - public BeanExpressionContext(ConfigurableBeanFactory beanFactory, Scope scope) { + public BeanExpressionContext(ConfigurableBeanFactory beanFactory, @Nullable Scope scope) { Assert.notNull(beanFactory, "BeanFactory must not be null"); this.beanFactory = beanFactory; this.scope = scope; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java index 35f5b860b43..d73cc449168 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConfigurableBeanFactory.java @@ -102,7 +102,7 @@ public interface ConfigurableBeanFactory extends HierarchicalBeanFactory, Single * then removed once the BeanFactory completes its bootstrap phase. * @since 2.5 */ - void setTempClassLoader(ClassLoader tempClassLoader); + void setTempClassLoader(@Nullable ClassLoader tempClassLoader); /** * Return the temporary ClassLoader to use for type matching purposes, diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java index 87efa185e57..54d157bfdfd 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/ConstructorArgumentValues.java @@ -279,7 +279,7 @@ public class ConstructorArgumentValues { * @return the ValueHolder for the argument, or {@code null} if none found */ @Nullable - public ValueHolder getGenericArgumentValue(@Nullable Class requiredType, @Nullable String requiredName, Set usedValueHolders) { + public ValueHolder getGenericArgumentValue(@Nullable Class requiredType, @Nullable String requiredName, @Nullable Set usedValueHolders) { for (ValueHolder valueHolder : this.genericArgumentValues) { if (usedValueHolders != null && usedValueHolders.contains(valueHolder)) { continue; @@ -351,7 +351,7 @@ public class ConstructorArgumentValues { * @return the ValueHolder for the argument, or {@code null} if none set */ @Nullable - public ValueHolder getArgumentValue(int index, @Nullable Class requiredType, @Nullable String requiredName, Set usedValueHolders) { + public ValueHolder getArgumentValue(int index, @Nullable Class requiredType, @Nullable String requiredName, @Nullable Set usedValueHolders) { Assert.isTrue(index >= 0, "Index must not be negative"); ValueHolder valueHolder = getIndexedArgumentValue(index, requiredType, requiredName); if (valueHolder == null) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/TypedStringValue.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/TypedStringValue.java index 1454ae8d597..118b5920602 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/TypedStringValue.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/TypedStringValue.java @@ -52,7 +52,7 @@ public class TypedStringValue implements BeanMetadataElement { * Create a new {@link TypedStringValue} for the given String value. * @param value the String value */ - public TypedStringValue(String value) { + public TypedStringValue(@Nullable String value) { setValue(value); } @@ -62,7 +62,7 @@ public class TypedStringValue implements BeanMetadataElement { * @param value the String value * @param targetType the type to convert to */ - public TypedStringValue(String value, Class targetType) { + public TypedStringValue(@Nullable String value, Class targetType) { setValue(value); setTargetType(targetType); } @@ -73,7 +73,7 @@ public class TypedStringValue implements BeanMetadataElement { * @param value the String value * @param targetTypeName the type to convert to */ - public TypedStringValue(String value, String targetTypeName) { + public TypedStringValue(@Nullable String value, String targetTypeName) { setValue(value); setTargetTypeName(targetTypeName); } @@ -85,13 +85,14 @@ public class TypedStringValue implements BeanMetadataElement { * for example in BeanFactoryPostProcessors. * @see PropertyPlaceholderConfigurer */ - public void setValue(String value) { + public void setValue(@Nullable String value) { this.value = value; } /** * Return the String value. */ + @Nullable public String getValue() { return this.value; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlProcessor.java index 88bbf6b6340..651221558ce 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlProcessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/YamlProcessor.java @@ -39,6 +39,7 @@ import org.yaml.snakeyaml.reader.UnicodeReader; import org.springframework.core.CollectionFactory; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -272,7 +273,7 @@ public abstract class YamlProcessor { return result; } - private void buildFlattenedMap(Map result, Map source, String path) { + private void buildFlattenedMap(Map result, Map source, @Nullable String path) { for (Entry entry : source.entrySet()) { String key = entry.getKey(); if (StringUtils.hasText(path)) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/Problem.java b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/Problem.java index a8150dc2f0e..93b07b1ae02 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/Problem.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/Problem.java @@ -67,7 +67,7 @@ public class Problem { * @param parseState the {@link ParseState} at the time of the error * @param location the location within a bean configuration source that triggered the error */ - public Problem(String message, Location location, ParseState parseState, @Nullable Throwable rootCause) { + public Problem(String message, Location location, @Nullable ParseState parseState, @Nullable Throwable rootCause) { Assert.notNull(message, "Message must not be null"); Assert.notNull(location, "Location must not be null"); this.message = message; diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/ReaderContext.java b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/ReaderContext.java index 64689f6486c..19e9333b12b 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/parsing/ReaderContext.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/parsing/ReaderContext.java @@ -17,6 +17,7 @@ package org.springframework.beans.factory.parsing; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; /** * Context that gets passed along a bean definition reading process, @@ -59,11 +60,11 @@ public class ReaderContext { fatal(message, source, null, ex); } - public void fatal(String message, Object source, ParseState parseState) { + public void fatal(String message, Object source, @Nullable ParseState parseState) { fatal(message, source, parseState, null); } - public void fatal(String message, Object source, ParseState parseState, Throwable cause) { + public void fatal(String message, Object source, @Nullable ParseState parseState, @Nullable Throwable cause) { Location location = new Location(getResource(), source); this.problemReporter.fatal(new Problem(message, location, parseState, cause)); } @@ -72,15 +73,15 @@ public class ReaderContext { error(message, source, null, null); } - public void error(String message, Object source, Throwable ex) { + public void error(String message, Object source, @Nullable Throwable ex) { error(message, source, null, ex); } - public void error(String message, Object source, ParseState parseState) { + public void error(String message, Object source, @Nullable ParseState parseState) { error(message, source, parseState, null); } - public void error(String message, Object source, ParseState parseState, Throwable cause) { + public void error(String message, Object source, @Nullable ParseState parseState, @Nullable Throwable cause) { Location location = new Location(getResource(), source); this.problemReporter.error(new Problem(message, location, parseState, cause)); } @@ -89,15 +90,15 @@ public class ReaderContext { warning(message, source, null, null); } - public void warning(String message, Object source, Throwable ex) { + public void warning(String message, Object source, @Nullable Throwable ex) { warning(message, source, null, ex); } - public void warning(String message, Object source, ParseState parseState) { + public void warning(String message, Object source, @Nullable ParseState parseState) { warning(message, source, parseState, null); } - public void warning(String message, Object source, ParseState parseState, Throwable cause) { + public void warning(String message, Object source, @Nullable ParseState parseState, @Nullable Throwable cause) { Location location = new Location(getResource(), source); this.problemReporter.warning(new Problem(message, location, parseState, cause)); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java index 811b9140448..19a6f971fd6 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractAutowireCapableBeanFactory.java @@ -334,7 +334,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac } @Override - public Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName) throws BeansException { + public Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName) throws BeansException { return resolveDependency(descriptor, requestingBeanName, null, null); } @@ -452,7 +452,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac * @see #doCreateBean */ @Override - protected Object createBean(String beanName, RootBeanDefinition mbd, Object[] args) throws BeanCreationException { + protected Object createBean(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) throws BeanCreationException { if (logger.isDebugEnabled()) { logger.debug("Creating instance of bean '" + beanName + "'"); } @@ -1084,7 +1084,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac * @see #autowireConstructor * @see #instantiateBean */ - protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, Object[] args) { + protected BeanWrapper createBeanInstance(String beanName, RootBeanDefinition mbd, @Nullable Object[] args) { // Make sure bean class is actually resolved at this point. Class beanClass = resolveBeanClass(mbd, beanName); @@ -1271,7 +1271,7 @@ public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFac * @return a BeanWrapper for the new instance */ protected BeanWrapper autowireConstructor( - String beanName, RootBeanDefinition mbd, Constructor[] ctors, @Nullable Object[] explicitArgs) { + String beanName, RootBeanDefinition mbd, @Nullable Constructor[] ctors, @Nullable Object[] explicitArgs) { return new ConstructorResolver(this).autowireConstructor(beanName, mbd, ctors, explicitArgs); } 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 7f07b414df4..30947b473b8 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 @@ -230,7 +230,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp */ @SuppressWarnings("unchecked") protected T doGetBean( - final String name, final Class requiredType, final Object[] args, boolean typeCheckOnly) + final String name, @Nullable final Class requiredType, @Nullable final Object[] args, boolean typeCheckOnly) throws BeansException { final String beanName = transformedBeanName(name); @@ -708,7 +708,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp } @Override - public void setTempClassLoader(ClassLoader tempClassLoader) { + public void setTempClassLoader(@Nullable ClassLoader tempClassLoader) { this.tempClassLoader = tempClassLoader; } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java index a31a535ee42..9337d13e86e 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionBuilder.java @@ -20,6 +20,7 @@ import java.util.function.Supplier; import org.springframework.beans.factory.config.BeanDefinitionCustomizer; import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; /** @@ -93,7 +94,7 @@ public class BeanDefinitionBuilder { * @param beanClassName the class name for the bean that the definition is being created for * @param factoryMethodName the name of the method to use to construct the bean instance */ - public static BeanDefinitionBuilder rootBeanDefinition(String beanClassName, String factoryMethodName) { + public static BeanDefinitionBuilder rootBeanDefinition(String beanClassName, @Nullable String factoryMethodName) { BeanDefinitionBuilder builder = new BeanDefinitionBuilder(); builder.beanDefinition = new RootBeanDefinition(); builder.beanDefinition.setBeanClassName(beanClassName); @@ -114,7 +115,7 @@ public class BeanDefinitionBuilder { * @param beanClass the {@code Class} of the bean that the definition is being created for * @param factoryMethodName the name of the method to use to construct the bean instance */ - public static BeanDefinitionBuilder rootBeanDefinition(Class beanClass, String factoryMethodName) { + public static BeanDefinitionBuilder rootBeanDefinition(Class beanClass, @Nullable String factoryMethodName) { BeanDefinitionBuilder builder = new BeanDefinitionBuilder(); builder.beanDefinition = new RootBeanDefinition(); builder.beanDefinition.setBeanClass(beanClass); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/CglibSubclassingInstantiationStrategy.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/CglibSubclassingInstantiationStrategy.java index 0c140d4793b..62753396d0c 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/CglibSubclassingInstantiationStrategy.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/CglibSubclassingInstantiationStrategy.java @@ -78,7 +78,7 @@ public class CglibSubclassingInstantiationStrategy extends SimpleInstantiationSt @Override protected Object instantiateWithMethodInjection(RootBeanDefinition bd, String beanName, BeanFactory owner, - Constructor ctor, Object... args) { + @Nullable Constructor ctor, Object... args) { // Must generate CGLIB subclass... return new CglibSubclassCreator(bd, owner).instantiate(ctor, args); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/ConstructorResolver.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/ConstructorResolver.java index 399e437c959..52767953fcd 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/ConstructorResolver.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/ConstructorResolver.java @@ -823,7 +823,7 @@ class ConstructorResolver { * Template method for resolving the specified argument which is supposed to be autowired. */ protected Object resolveAutowiredArgument( - MethodParameter param, String beanName, Set autowiredBeanNames, TypeConverter typeConverter) { + MethodParameter param, String beanName, @Nullable Set autowiredBeanNames, TypeConverter typeConverter) { if (InjectionPoint.class.isAssignableFrom(param.getParameterType())) { InjectionPoint injectionPoint = currentInjectionPoint.get(); 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 0f6f9d102c5..686fa1bec48 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 @@ -1040,7 +1040,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @Override public Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName, - Set autowiredBeanNames, TypeConverter typeConverter) throws BeansException { + @Nullable Set autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException { descriptor.initParameterNameDiscovery(getParameterNameDiscoverer()); if (Optional.class == descriptor.getDependencyType()) { @@ -1065,7 +1065,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto @Nullable public Object doResolveDependency(DependencyDescriptor descriptor, String beanName, - Set autowiredBeanNames, TypeConverter typeConverter) throws BeansException { + @Nullable Set autowiredBeanNames, @Nullable TypeConverter typeConverter) throws BeansException { InjectionPoint previousInjectionPoint = ConstructorResolver.setCurrentInjectionPoint(descriptor); try { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java index 4ac4c91a1af..f1ea506da09 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java @@ -450,7 +450,7 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements return isDependent(beanName, dependentBeanName, null); } - private boolean isDependent(String beanName, String dependentBeanName, Set alreadySeen) { + private boolean isDependent(String beanName, String dependentBeanName, @Nullable Set alreadySeen) { if (alreadySeen != null && alreadySeen.contains(beanName)) { return 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 01c0ae2623d..777413e60f3 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 @@ -178,7 +178,7 @@ public class RootBeanDefinition extends AbstractBeanDefinition { * @param cargs the constructor argument values to apply * @param pvs the property values to apply */ - public RootBeanDefinition(@Nullable Class beanClass, ConstructorArgumentValues cargs, MutablePropertyValues pvs) { + public RootBeanDefinition(@Nullable Class beanClass, ConstructorArgumentValues cargs, @Nullable MutablePropertyValues pvs) { super(cargs, pvs); setBeanClass(beanClass); } 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 653109a8a87..4ffe761ff6a 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 @@ -135,7 +135,7 @@ public class SimpleInstantiationStrategy implements InstantiationStrategy { * Instantiation should use the given constructor and parameters. */ protected Object instantiateWithMethodInjection(RootBeanDefinition bd, String beanName, BeanFactory owner, - Constructor ctor, Object... args) { + @Nullable Constructor ctor, Object... args) { throw new UnsupportedOperationException("Method Injection not supported in SimpleInstantiationStrategy"); } diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java index 1b8bd0b0524..9685d15ba31 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/xml/BeanDefinitionParserDelegate.java @@ -309,7 +309,7 @@ public class BeanDefinitionParserDelegate { * @see #populateDefaults(DocumentDefaultsDefinition, DocumentDefaultsDefinition, org.w3c.dom.Element) * @see #getDefaults() */ - public void initDefaults(Element root, BeanDefinitionParserDelegate parent) { + public void initDefaults(Element root, @Nullable BeanDefinitionParserDelegate parent) { populateDefaults(this.defaults, (parent != null ? parent.defaults : null), root); this.readerContext.fireDefaultsRegistered(this.defaults); } @@ -417,7 +417,7 @@ public class BeanDefinitionParserDelegate { * {@link org.springframework.beans.factory.parsing.ProblemReporter}. */ @Nullable - public BeanDefinitionHolder parseBeanDefinitionElement(Element ele, BeanDefinition containingBean) { + public BeanDefinitionHolder parseBeanDefinitionElement(Element ele, @Nullable BeanDefinition containingBean) { String id = ele.getAttribute(ID_ATTRIBUTE); String nameAttr = ele.getAttribute(NAME_ATTRIBUTE); @@ -907,7 +907,7 @@ public class BeanDefinitionParserDelegate { * Also used for constructor arguments, "propertyName" being null in this case. */ @Nullable - public Object parsePropertyValue(Element ele, BeanDefinition bd, String propertyName) { + public Object parsePropertyValue(Element ele, BeanDefinition bd, @Nullable String propertyName) { String elementName = (propertyName != null) ? " element for property '" + propertyName + "'" : " element"; @@ -961,7 +961,7 @@ public class BeanDefinitionParserDelegate { } } - public Object parsePropertySubElement(Element ele, BeanDefinition bd) { + public Object parsePropertySubElement(Element ele, @Nullable BeanDefinition bd) { return parsePropertySubElement(ele, bd, null); } @@ -973,7 +973,7 @@ public class BeanDefinitionParserDelegate { * {@code } tag that might be created */ @Nullable - public Object parsePropertySubElement(Element ele, BeanDefinition bd, String defaultValueType) { + public Object parsePropertySubElement(Element ele, BeanDefinition bd, @Nullable String defaultValueType) { if (!isDefaultNamespace(ele)) { return parseNestedCustomElement(ele, bd); } @@ -1355,7 +1355,7 @@ public class BeanDefinitionParserDelegate { } @Nullable - public BeanDefinition parseCustomElement(Element ele, BeanDefinition containingBd) { + public BeanDefinition parseCustomElement(Element ele, @Nullable BeanDefinition containingBd) { String namespaceUri = getNamespaceURI(ele); NamespaceHandler handler = this.readerContext.getNamespaceHandlerResolver().resolve(namespaceUri); if (handler == null) { @@ -1370,7 +1370,7 @@ public class BeanDefinitionParserDelegate { } public BeanDefinitionHolder decorateBeanDefinitionIfRequired( - Element ele, BeanDefinitionHolder definitionHolder, BeanDefinition containingBd) { + Element ele, BeanDefinitionHolder definitionHolder, @Nullable BeanDefinition containingBd) { BeanDefinitionHolder finalDefinition = definitionHolder; diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java index b2adc8516ac..af3abd0d4ec 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/JavaMailSenderImpl.java @@ -404,7 +404,7 @@ public class JavaMailSenderImpl implements JavaMailSender { * @throws org.springframework.mail.MailSendException * in case of failure when sending a message */ - protected void doSend(MimeMessage[] mimeMessages, Object[] originalMessages) throws MailException { + protected void doSend(MimeMessage[] mimeMessages, @Nullable Object[] originalMessages) throws MailException { Map failedMessages = new LinkedHashMap<>(); Transport transport = null; diff --git a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java index 68526e85d7d..741066b7ff2 100644 --- a/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java +++ b/spring-context-support/src/main/java/org/springframework/mail/javamail/MimeMessageHelper.java @@ -362,7 +362,7 @@ public class MimeMessageHelper { * will be added to (can be the same as the root multipart object, or an element * nested underneath the root multipart element) */ - protected final void setMimeMultiparts(@Nullable MimeMultipart root, MimeMultipart main) { + protected final void setMimeMultiparts(@Nullable MimeMultipart root, @Nullable MimeMultipart main) { this.rootMimeMultipart = root; this.mimeMultipart = main; } diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerAccessor.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerAccessor.java index 55036e3cc90..69952e6ad00 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerAccessor.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerAccessor.java @@ -39,6 +39,7 @@ import org.quartz.xml.XMLSchedulingDataProcessor; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.ResourceLoader; +import org.springframework.lang.Nullable; import org.springframework.transaction.PlatformTransactionManager; import org.springframework.transaction.TransactionException; import org.springframework.transaction.TransactionStatus; @@ -186,7 +187,7 @@ public abstract class SchedulerAccessor implements ResourceLoaderAware { } @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java index e69e141f4da..2f15f2a68ab 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/CacheAspectSupport.java @@ -458,7 +458,7 @@ public abstract class CacheAspectSupport extends AbstractCacheInvoker } } - private void logInvalidating(CacheOperationContext context, CacheEvictOperation operation, Object key) { + private void logInvalidating(CacheOperationContext context, CacheEvictOperation operation, @Nullable Object key) { if (logger.isTraceEnabled()) { logger.trace("Invalidating " + (key != null ? "cache key [" + key + "]" : "entire cache") + " for operation " + operation + " on method " + context.metadata.method); diff --git a/spring-context/src/main/java/org/springframework/context/MessageSource.java b/spring-context/src/main/java/org/springframework/context/MessageSource.java index 27bac5068e9..ead8970e6a6 100644 --- a/spring-context/src/main/java/org/springframework/context/MessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/MessageSource.java @@ -53,7 +53,7 @@ public interface MessageSource { * otherwise the default message passed as a parameter * @see java.text.MessageFormat */ - String getMessage(String code, @Nullable Object[] args, String defaultMessage, Locale locale); + String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale); /** * Try to resolve the message. Treat as an error if the message can't be found. diff --git a/spring-context/src/main/java/org/springframework/context/ResourceLoaderAware.java b/spring-context/src/main/java/org/springframework/context/ResourceLoaderAware.java index cf9edd7101d..67bdaadb6b7 100644 --- a/spring-context/src/main/java/org/springframework/context/ResourceLoaderAware.java +++ b/spring-context/src/main/java/org/springframework/context/ResourceLoaderAware.java @@ -18,6 +18,7 @@ package org.springframework.context; import org.springframework.beans.factory.Aware; import org.springframework.core.io.ResourceLoader; +import org.springframework.lang.Nullable; /** * Interface to be implemented by any object that wishes to be notified of @@ -73,6 +74,6 @@ public interface ResourceLoaderAware extends Aware { * @see org.springframework.core.io.support.ResourcePatternResolver * @see org.springframework.core.io.support.ResourcePatternUtils#getResourcePatternResolver */ - void setResourceLoader(ResourceLoader resourceLoader); + void setResourceLoader(@Nullable ResourceLoader resourceLoader); } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/AnnotatedBeanDefinitionReader.java b/spring-context/src/main/java/org/springframework/context/annotation/AnnotatedBeanDefinitionReader.java index 1b2101c765e..6a6fee8df5c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/AnnotatedBeanDefinitionReader.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/AnnotatedBeanDefinitionReader.java @@ -210,7 +210,7 @@ public class AnnotatedBeanDefinitionReader { * factory's {@link BeanDefinition}, e.g. setting a lazy-init or primary flag * @since 5.0 */ - void doRegisterBean(Class annotatedClass, @Nullable Supplier instanceSupplier, String name, + void doRegisterBean(Class annotatedClass, @Nullable Supplier instanceSupplier, @Nullable String name, @Nullable Class[] qualifiers, BeanDefinitionCustomizer... definitionCustomizers) { AnnotatedGenericBeanDefinition abd = new AnnotatedGenericBeanDefinition(annotatedClass); 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 13375daf723..b99e4aebf81 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(@Nullable String beanName, @Nullable Class beanClass, Supplier supplier, + public void registerBean(@Nullable String beanName, @Nullable Class beanClass, @Nullable Supplier supplier, BeanDefinitionCustomizer... customizers) { this.reader.doRegisterBean(beanClass, supplier, beanName, null, customizers); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java index fb182667f5a..cc7603e11ec 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ClassPathScanningCandidateComponentProvider.java @@ -252,7 +252,7 @@ public class ClassPathScanningCandidateComponentProvider implements EnvironmentC * @see org.springframework.core.io.support.PathMatchingResourcePatternResolver */ @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader); this.metadataReaderFactory = new CachingMetadataReaderFactory(resourceLoader); this.componentsIndex = CandidateComponentsIndexLoader.loadIndex(this.resourcePatternResolver.getClassLoader()); 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 dbfe835a07d..b1f0ceb0159 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 @@ -193,7 +193,7 @@ public class ConfigurationClassPostProcessor implements BeanDefinitionRegistryPo } @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { Assert.notNull(resourceLoader, "ResourceLoader must not be null"); this.resourceLoader = resourceLoader; if (!this.setMetadataReaderFactoryCalled) { 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 a10a76876b0..7ace1f3adf1 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 @@ -208,7 +208,7 @@ public abstract class AbstractApplicationEventMulticaster * @return the pre-filtered list of application listeners for the given event and source type */ private Collection> retrieveApplicationListeners( - ResolvableType eventType, Class sourceType, ListenerRetriever retriever) { + ResolvableType eventType, Class sourceType, @Nullable ListenerRetriever retriever) { LinkedList> allListeners = new LinkedList<>(); Set> listeners; 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 db16a5567a6..03d44f0d987 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 @@ -367,7 +367,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader * @param eventType the resolved event type, if known * @since 4.2 */ - protected void publishEvent(Object event, ResolvableType eventType) { + protected void publishEvent(Object event, @Nullable ResolvableType eventType) { Assert.notNull(event, "Event must not be null"); if (logger.isTraceEnabled()) { logger.trace("Publishing event in " + getDisplayName() + ": " + event); @@ -1250,7 +1250,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader //--------------------------------------------------------------------- @Override - public String getMessage(String code, @Nullable Object args[], String defaultMessage, Locale locale) { + public String getMessage(String code, @Nullable Object args[], @Nullable String defaultMessage, Locale locale) { return getMessageSource().getMessage(code, args, defaultMessage, 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 ff663059bf9..4de471e36d6 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 @@ -134,7 +134,7 @@ public abstract class AbstractMessageSource extends MessageSourceSupport impleme @Override - public final String getMessage(String code, @Nullable Object[] args, String defaultMessage, Locale locale) { + public final String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale) { 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 c34b118a9c8..ea856f804fa 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 @@ -52,7 +52,7 @@ public class DelegatingMessageSource extends MessageSourceSupport implements Hie @Override - public String getMessage(String code, @Nullable Object[] args, String defaultMessage, Locale locale) { + public String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale) { if (this.parentMessageSource != null) { return this.parentMessageSource.getMessage(code, args, defaultMessage, 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 6c736867079..d03952c9091 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 @@ -419,7 +419,7 @@ public class GenericApplicationContext extends AbstractApplicationContext implem * factory's {@link BeanDefinition}, e.g. setting a lazy-init or primary flag * @since 5.0 */ - public void registerBean(@Nullable String beanName, @Nullable Class beanClass, Supplier supplier, + public void registerBean(@Nullable String beanName, @Nullable Class beanClass, @Nullable Supplier supplier, BeanDefinitionCustomizer... customizers) { Assert.isTrue(beanName != null || beanClass != null, "Either bean name or bean class must be specified"); diff --git a/spring-context/src/main/java/org/springframework/context/support/ReloadableResourceBundleMessageSource.java b/spring-context/src/main/java/org/springframework/context/support/ReloadableResourceBundleMessageSource.java index b144f245d32..b7aa2c89898 100644 --- a/spring-context/src/main/java/org/springframework/context/support/ReloadableResourceBundleMessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/support/ReloadableResourceBundleMessageSource.java @@ -162,7 +162,7 @@ public class ReloadableResourceBundleMessageSource extends AbstractResourceBased * @see org.springframework.context.ResourceLoaderAware */ @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourceLoader = (resourceLoader != null ? resourceLoader : new DefaultResourceLoader()); } diff --git a/spring-context/src/main/java/org/springframework/instrument/classloading/WeavingTransformer.java b/spring-context/src/main/java/org/springframework/instrument/classloading/WeavingTransformer.java index a84844e74d5..8068ef3b69d 100644 --- a/spring-context/src/main/java/org/springframework/instrument/classloading/WeavingTransformer.java +++ b/spring-context/src/main/java/org/springframework/instrument/classloading/WeavingTransformer.java @@ -22,6 +22,8 @@ import java.security.ProtectionDomain; import java.util.ArrayList; import java.util.List; +import org.springframework.lang.Nullable; + /** * ClassFileTransformer-based weaver, allowing for a list of transformers to be * applied on a class byte array. Normally used inside class loaders. @@ -88,7 +90,7 @@ public class WeavingTransformer { * @param pd protection domain to be used (can be null) * @return (possibly transformed) class byte definition */ - public byte[] transformIfNecessary(String className, String internalName, byte[] bytes, ProtectionDomain pd) { + public byte[] transformIfNecessary(String className, String internalName, byte[] bytes, @Nullable ProtectionDomain pd) { byte[] result = bytes; for (ClassFileTransformer cft : this.transformers) { try { 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 3f177f08e64..245821d6c5a 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 @@ -749,7 +749,7 @@ public class MBeanExporter extends MBeanRegistrationSupport implements MBeanExpo * @throws javax.management.MalformedObjectNameException * if the retrieved {@code ObjectName} is malformed */ - protected ObjectName getObjectName(Object bean, String beanKey) throws MalformedObjectNameException { + protected ObjectName getObjectName(Object bean, @Nullable String beanKey) throws MalformedObjectNameException { if (bean instanceof SelfNaming) { return ((SelfNaming) bean).getObjectName(); } diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java index beba496092d..334bb56653b 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorDelegate.java @@ -20,6 +20,7 @@ import javax.naming.InitialContext; import javax.naming.NamingException; import org.springframework.core.SpringProperties; +import org.springframework.lang.Nullable; /** * {@link JndiLocatorSupport} subclass with public lookup methods, @@ -59,7 +60,7 @@ public class JndiLocatorDelegate extends JndiLocatorSupport { } @Override - public T lookup(String jndiName, Class requiredType) throws NamingException { + public T lookup(String jndiName, @Nullable Class requiredType) throws NamingException { return super.lookup(jndiName, requiredType); } diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java index a05ea898d1c..1b149261c8c 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiLocatorSupport.java @@ -18,6 +18,7 @@ package org.springframework.jndi; import javax.naming.NamingException; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -87,7 +88,7 @@ public abstract class JndiLocatorSupport extends JndiAccessor { * @throws NamingException if the JNDI lookup failed * @see #setResourceRef */ - protected T lookup(String jndiName, Class requiredType) throws NamingException { + protected T lookup(String jndiName, @Nullable Class requiredType) throws NamingException { Assert.notNull(jndiName, "'jndiName' must not be null"); String convertedName = convertJndiName(jndiName); T jndiObject; 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 94c28f2f9d6..606332280e3 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 @@ -206,7 +206,7 @@ public class SimpleJndiBeanFactory extends JndiLocatorSupport implements BeanFac @SuppressWarnings("unchecked") - private T doGetSingleton(String name, Class requiredType) throws NamingException { + private T doGetSingleton(String name, @Nullable Class requiredType) throws NamingException { synchronized (this.singletonObjects) { if (this.singletonObjects.containsKey(name)) { Object jndiObject = this.singletonObjects.get(name); diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncResult.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncResult.java index 842eb326655..e438da426ca 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncResult.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncResult.java @@ -20,6 +20,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; +import org.springframework.lang.Nullable; import org.springframework.util.concurrent.FailureCallback; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.util.concurrent.ListenableFutureCallback; @@ -54,7 +55,7 @@ public class AsyncResult implements ListenableFuture { * Create a new AsyncResult holder. * @param value the value to pass through */ - public AsyncResult(V value) { + public AsyncResult(@Nullable V value) { this(value, null); } @@ -62,7 +63,7 @@ public class AsyncResult implements ListenableFuture { * Create a new AsyncResult holder. * @param value the value to pass through */ - private AsyncResult(V value, ExecutionException ex) { + private AsyncResult(@Nullable V value, @Nullable ExecutionException ex) { this.value = value; this.executionException = ex; } diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java index 3146d2014d4..9e5ec49de43 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskExecutor.java @@ -28,6 +28,7 @@ import javax.enterprise.concurrent.ManagedTask; import org.springframework.core.task.AsyncListenableTaskExecutor; import org.springframework.core.task.TaskDecorator; import org.springframework.core.task.support.TaskExecutorAdapter; +import org.springframework.lang.Nullable; import org.springframework.scheduling.SchedulingAwareRunnable; import org.springframework.scheduling.SchedulingTaskExecutor; import org.springframework.util.ClassUtils; @@ -105,7 +106,7 @@ public class ConcurrentTaskExecutor implements AsyncListenableTaskExecutor, Sche *

Autodetects a JSR-236 {@link javax.enterprise.concurrent.ManagedExecutorService} * in order to expose {@link javax.enterprise.concurrent.ManagedTask} adapters for it. */ - public final void setConcurrentExecutor(Executor concurrentExecutor) { + public final void setConcurrentExecutor(@Nullable Executor concurrentExecutor) { if (concurrentExecutor != null) { this.concurrentExecutor = concurrentExecutor; if (managedExecutorServiceClass != null && managedExecutorServiceClass.isInstance(concurrentExecutor)) { diff --git a/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptUtils.java b/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptUtils.java index 7ebc36b192d..addbdcf9c0a 100644 --- a/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptUtils.java +++ b/spring-context/src/main/java/org/springframework/scripting/bsh/BshScriptUtils.java @@ -85,7 +85,7 @@ public abstract class BshScriptUtils { * @return the scripted Java object * @throws EvalError in case of BeanShell parsing failure */ - public static Object createBshObject(String scriptSource, @Nullable Class[] scriptInterfaces, ClassLoader classLoader) + public static Object createBshObject(String scriptSource, @Nullable Class[] scriptInterfaces, @Nullable ClassLoader classLoader) throws EvalError { Object result = evaluateBshScript(scriptSource, scriptInterfaces, classLoader); 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 b808f1be8dd..7064529fb07 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 @@ -228,7 +228,7 @@ public class ScriptFactoryPostProcessor extends InstantiationAwareBeanPostProces } @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourceLoader = resourceLoader; } 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 649f746ced5..078b2a28791 100644 --- a/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java +++ b/spring-context/src/main/java/org/springframework/validation/AbstractBindingResult.java @@ -92,7 +92,7 @@ public abstract class AbstractBindingResult extends AbstractErrors implements Bi @Override - public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { addError(new ObjectError(getObjectName(), resolveMessageCodes(errorCode), errorArgs, defaultMessage)); } 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 6428455a09d..840b7ba1334 100644 --- a/spring-context/src/main/java/org/springframework/validation/BindException.java +++ b/spring-context/src/main/java/org/springframework/validation/BindException.java @@ -115,7 +115,7 @@ public class BindException extends Exception implements BindingResult { } @Override - public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { this.bindingResult.reject(errorCode, errorArgs, defaultMessage); } 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 3370f05fbbe..291b97e802d 100644 --- a/spring-context/src/main/java/org/springframework/validation/DefaultMessageCodesResolver.java +++ b/spring-context/src/main/java/org/springframework/validation/DefaultMessageCodesResolver.java @@ -164,13 +164,13 @@ public class DefaultMessageCodesResolver implements MessageCodesResolver, Serial return StringUtils.toStringArray(codeList); } - private void addCodes(Collection codeList, String errorCode, String objectName, Iterable fields) { + private void addCodes(Collection codeList, String errorCode, @Nullable String objectName, Iterable fields) { for (String field : fields) { addCode(codeList, errorCode, objectName, field); } } - private void addCode(Collection codeList, String errorCode, String objectName, String field) { + private void addCode(Collection codeList, String errorCode, @Nullable String objectName, @Nullable String field) { codeList.add(postProcessMessageCode(this.formatter.format(errorCode, objectName, field))); } 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 5e1332e1836..f3210ba9c09 100644 --- a/spring-context/src/main/java/org/springframework/validation/Errors.java +++ b/spring-context/src/main/java/org/springframework/validation/Errors.java @@ -121,7 +121,7 @@ public interface Errors { * (can be {@code null}) * @param defaultMessage fallback default message */ - void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage); + void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage); /** * Register a field error for the specified field of the current object diff --git a/spring-context/src/main/java/org/springframework/validation/ValidationUtils.java b/spring-context/src/main/java/org/springframework/validation/ValidationUtils.java index ebd1084ffa9..598f051107f 100644 --- a/spring-context/src/main/java/org/springframework/validation/ValidationUtils.java +++ b/spring-context/src/main/java/org/springframework/validation/ValidationUtils.java @@ -160,7 +160,7 @@ public abstract class ValidationUtils { * @param defaultMessage fallback default message */ public static void rejectIfEmpty( - Errors errors, String field, String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { + Errors errors, String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { Assert.notNull(errors, "Errors object must not be null"); Object value = errors.getFieldValue(field); @@ -240,7 +240,7 @@ public abstract class ValidationUtils { * @param defaultMessage fallback default message */ public static void rejectIfEmptyOrWhitespace( - Errors errors, String field, String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { + Errors errors, String field, String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { Assert.notNull(errors, "Errors object must not be null"); Object value = errors.getFieldValue(field); diff --git a/spring-core/src/main/java/org/springframework/core/OrderComparator.java b/spring-core/src/main/java/org/springframework/core/OrderComparator.java index 0f8fa5e54db..cb9b0cd059e 100644 --- a/spring-core/src/main/java/org/springframework/core/OrderComparator.java +++ b/spring-core/src/main/java/org/springframework/core/OrderComparator.java @@ -74,7 +74,7 @@ public class OrderComparator implements Comparator { return doCompare(o1, o2, null); } - private int doCompare(Object o1, Object o2, OrderSourceProvider sourceProvider) { + private int doCompare(Object o1, Object o2, @Nullable OrderSourceProvider sourceProvider) { boolean p1 = (o1 instanceof PriorityOrdered); boolean p2 = (o2 instanceof PriorityOrdered); if (p1 && !p2) { diff --git a/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java b/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java index 7954b9dcf23..cf72701ec90 100644 --- a/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java +++ b/spring-core/src/main/java/org/springframework/core/ReactiveAdapterRegistry.java @@ -122,7 +122,7 @@ public class ReactiveAdapterRegistry { * (i.e. to adapt from; may be {@code null} if the reactive type is specified) */ @Nullable - public ReactiveAdapter getAdapter(@Nullable Class reactiveType, Object source) { + public ReactiveAdapter getAdapter(@Nullable Class reactiveType, @Nullable Object source) { Object sourceToUse = (source instanceof Optional ? ((Optional) source).orElse(null) : source); Class clazz = (sourceToUse != null ? sourceToUse.getClass() : reactiveType); diff --git a/spring-core/src/main/java/org/springframework/core/ReactiveTypeDescriptor.java b/spring-core/src/main/java/org/springframework/core/ReactiveTypeDescriptor.java index 587201e06e2..0e609150189 100644 --- a/spring-core/src/main/java/org/springframework/core/ReactiveTypeDescriptor.java +++ b/spring-core/src/main/java/org/springframework/core/ReactiveTypeDescriptor.java @@ -17,6 +17,7 @@ package org.springframework.core; import java.util.function.Supplier; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -42,7 +43,7 @@ public class ReactiveTypeDescriptor { /** * Private constructor. See static factory methods. */ - private ReactiveTypeDescriptor(Class reactiveType, Supplier emptySupplier, + private ReactiveTypeDescriptor(Class reactiveType, @Nullable Supplier emptySupplier, boolean multiValue, boolean canBeEmpty, boolean noValue) { Assert.notNull(reactiveType, "'reactiveType' must not be null"); diff --git a/spring-core/src/main/java/org/springframework/core/ResolvableType.java b/spring-core/src/main/java/org/springframework/core/ResolvableType.java index 1347a3ed807..3588d033f51 100644 --- a/spring-core/src/main/java/org/springframework/core/ResolvableType.java +++ b/spring-core/src/main/java/org/springframework/core/ResolvableType.java @@ -146,7 +146,7 @@ public class ResolvableType implements Serializable { * with upfront resolution and a pre-calculated hash. * @since 4.2 */ - private ResolvableType(Type type, TypeProvider typeProvider, VariableResolver variableResolver, Integer hash) { + private ResolvableType(@Nullable Type type, @Nullable TypeProvider typeProvider, @Nullable VariableResolver variableResolver, Integer hash) { this.type = type; this.typeProvider = typeProvider; this.variableResolver = variableResolver; @@ -160,7 +160,7 @@ public class ResolvableType implements Serializable { * with upfront resolution but lazily calculated hash. */ private ResolvableType( - Type type, TypeProvider typeProvider, VariableResolver variableResolver, ResolvableType componentType) { + Type type, @Nullable TypeProvider typeProvider, @Nullable VariableResolver variableResolver, ResolvableType componentType) { this.type = type; this.typeProvider = typeProvider; @@ -257,7 +257,7 @@ public class ResolvableType implements Serializable { return isAssignableFrom(other, null); } - private boolean isAssignableFrom(ResolvableType other, Map matchedBefore) { + private boolean isAssignableFrom(ResolvableType other, @Nullable Map matchedBefore) { Assert.notNull(other, "ResolvableType must not be null"); // If we cannot resolve types, we are not assignable @@ -700,7 +700,7 @@ public class ResolvableType implements Serializable { * @see #getGenerics() * @see #resolve() */ - public Class[] resolveGenerics(Class fallback) { + public Class[] resolveGenerics(@Nullable Class fallback) { ResolvableType[] generics = getGenerics(); Class[] resolvedGenerics = new Class[generics.length]; for (int i = 0; i < generics.length; i++) { 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 cc2cf9175dd..6753f5f3453 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 @@ -241,8 +241,8 @@ public class AnnotatedElementUtils { return hasMetaAnnotationTypes(element, null, annotationName); } - private static boolean hasMetaAnnotationTypes(AnnotatedElement element, Class annotationType, - String annotationName) { + private static boolean hasMetaAnnotationTypes(AnnotatedElement element, @Nullable Class annotationType, + @Nullable String annotationName) { return Boolean.TRUE.equals( searchWithGetSemantics(element, annotationType, annotationName, new SimpleAnnotationProcessor() { @@ -844,8 +844,8 @@ public class AnnotatedElementUtils { * @return the result of the processor, potentially {@code null} */ @Nullable - private static T searchWithGetSemantics(AnnotatedElement element, Class annotationType, - String annotationName, Processor processor) { + private static T searchWithGetSemantics(AnnotatedElement element, @Nullable Class annotationType, + @Nullable String annotationName, Processor processor) { return searchWithGetSemantics(element, annotationType, annotationName, null, processor); } @@ -866,7 +866,7 @@ public class AnnotatedElementUtils { */ @Nullable private static T searchWithGetSemantics(AnnotatedElement element, Class annotationType, - String annotationName, @Nullable Class containerType, Processor processor) { + @Nullable String annotationName, @Nullable Class containerType, Processor processor) { try { return searchWithGetSemantics(element, annotationType, annotationName, containerType, processor, @@ -896,8 +896,8 @@ public class AnnotatedElementUtils { * @return the result of the processor, potentially {@code null} */ @Nullable - private static T searchWithGetSemantics(AnnotatedElement element, Class annotationType, - String annotationName, @Nullable Class containerType, Processor processor, + private static T searchWithGetSemantics(AnnotatedElement element, @Nullable Class annotationType, + @Nullable String annotationName, @Nullable Class containerType, Processor processor, Set visited, int metaDepth) { Assert.notNull(element, "AnnotatedElement must not be null"); @@ -1029,8 +1029,8 @@ public class AnnotatedElementUtils { * @since 4.2 */ @Nullable - private static T searchWithFindSemantics(AnnotatedElement element, Class annotationType, - String annotationName, Processor processor) { + private static T searchWithFindSemantics(AnnotatedElement element, @Nullable Class annotationType, + @Nullable String annotationName, Processor processor) { return searchWithFindSemantics(element, annotationType, annotationName, null, processor); } @@ -1051,7 +1051,7 @@ public class AnnotatedElementUtils { */ @Nullable private static T searchWithFindSemantics(AnnotatedElement element, Class annotationType, - String annotationName, @Nullable Class containerType, Processor processor) { + @Nullable String annotationName, @Nullable Class containerType, Processor processor) { if (containerType != null && !processor.aggregates()) { throw new IllegalArgumentException( 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 e63bb50437d..7aa0630e948 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 @@ -48,7 +48,7 @@ public class ByteArrayDecoder extends AbstractDecoder { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream,@Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream).map((dataBuffer) -> { 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 b4d8cd9ff7c..869f28e15fc 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 @@ -50,7 +50,7 @@ public class ByteBufferDecoder extends AbstractDecoder { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream).map((dataBuffer) -> { 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 6cdcdeb518a..f93dd810b4d 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 @@ -50,7 +50,7 @@ public class DataBufferDecoder extends AbstractDecoder { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream, @Nullable 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 200896e2986..de1d5b8a3e4 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 @@ -58,7 +58,7 @@ public interface Decoder { * @param hints additional information about how to do encode * @return the output stream with decoded elements */ - Flux decode(Publisher inputStream, ResolvableType elementType, + Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints); /** 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 640f741008b..f354689f1c6 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 @@ -55,7 +55,7 @@ public class ResourceDecoder extends AbstractDecoder { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(decodeToMono(inputStream, elementType, mimeType, hints)); 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 8c759930dfb..d0f067f6234 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 @@ -77,7 +77,7 @@ public class StringDecoder extends AbstractDecoder { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { Flux inputFlux = Flux.from(inputStream); diff --git a/spring-core/src/main/java/org/springframework/core/convert/ConversionFailedException.java b/spring-core/src/main/java/org/springframework/core/convert/ConversionFailedException.java index fcf456b8ce2..94977dcae91 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/ConversionFailedException.java +++ b/spring-core/src/main/java/org/springframework/core/convert/ConversionFailedException.java @@ -16,6 +16,7 @@ package org.springframework.core.convert; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; /** @@ -42,7 +43,7 @@ public class ConversionFailedException extends ConversionException { * @param value the value we tried to convert * @param cause the cause of the conversion failure */ - public ConversionFailedException(TypeDescriptor sourceType, TypeDescriptor targetType, Object value, Throwable cause) { + public ConversionFailedException(TypeDescriptor sourceType, TypeDescriptor targetType, @Nullable Object value, Throwable cause) { super("Failed to convert from type [" + sourceType + "] to type [" + targetType + "] for value '" + ObjectUtils.nullSafeToString(value) + "'", cause); this.sourceType = sourceType; diff --git a/spring-core/src/main/java/org/springframework/core/convert/Property.java b/spring-core/src/main/java/org/springframework/core/convert/Property.java index ab92578c28a..143946926ed 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/Property.java +++ b/spring-core/src/main/java/org/springframework/core/convert/Property.java @@ -63,7 +63,7 @@ public final class Property { private Annotation[] annotations; - public Property(Class objectType, Method readMethod, Method writeMethod) { + public Property(Class objectType, @Nullable Method readMethod, @Nullable Method writeMethod) { this(objectType, readMethod, writeMethod, null); } diff --git a/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java b/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java index 79bba139727..371aa16969c 100644 --- a/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java +++ b/spring-core/src/main/java/org/springframework/core/convert/TypeDescriptor.java @@ -118,7 +118,7 @@ public class TypeDescriptor implements Serializable { * @param annotations the type annotations * @since 4.0 */ - protected TypeDescriptor(ResolvableType resolvableType, @Nullable Class type, Annotation[] annotations) { + protected TypeDescriptor(ResolvableType resolvableType, @Nullable Class type, @Nullable Annotation[] annotations) { this.resolvableType = resolvableType; this.type = (type != null ? type : resolvableType.resolve(Object.class)); this.annotatedElement = new AnnotatedElementAdapter(annotations); 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 e6cd52b7cbb..22208d05084 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 @@ -230,7 +230,7 @@ public class GenericConversionService implements ConfigurableConversionService { * @return the converted null object */ @Nullable - protected Object convertNullSource(TypeDescriptor sourceType, TypeDescriptor targetType) { + protected Object convertNullSource(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType) { if (targetType.getObjectType() == Optional.class) { return Optional.empty(); } @@ -317,7 +317,7 @@ public class GenericConversionService implements ConfigurableConversionService { throw new ConverterNotFoundException(sourceType, targetType); } - private Object handleResult(TypeDescriptor sourceType, TypeDescriptor targetType, Object result) { + private Object handleResult(@Nullable TypeDescriptor sourceType, TypeDescriptor targetType, Object result) { if (result == null) { assertNotPrimitiveTargetType(sourceType, targetType); } diff --git a/spring-core/src/main/java/org/springframework/core/io/VfsUtils.java b/spring-core/src/main/java/org/springframework/core/io/VfsUtils.java index 9291cee686f..de64d2b78d7 100644 --- a/spring-core/src/main/java/org/springframework/core/io/VfsUtils.java +++ b/spring-core/src/main/java/org/springframework/core/io/VfsUtils.java @@ -25,6 +25,7 @@ import java.lang.reflect.Method; import java.net.URI; import java.net.URL; +import org.springframework.lang.Nullable; import org.springframework.util.ReflectionUtils; /** @@ -95,7 +96,7 @@ public abstract class VfsUtils { } } - protected static Object invokeVfsMethod(Method method, Object target, Object... args) throws IOException { + protected static Object invokeVfsMethod(Method method, @Nullable Object target, Object... args) throws IOException { try { return method.invoke(target, args); } diff --git a/spring-core/src/main/java/org/springframework/core/io/support/ResourcePropertySource.java b/spring-core/src/main/java/org/springframework/core/io/support/ResourcePropertySource.java index 94cdb55294d..580f557ff86 100644 --- a/spring-core/src/main/java/org/springframework/core/io/support/ResourcePropertySource.java +++ b/spring-core/src/main/java/org/springframework/core/io/support/ResourcePropertySource.java @@ -23,6 +23,7 @@ import java.util.Properties; import org.springframework.core.env.PropertiesPropertySource; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -124,7 +125,7 @@ public class ResourcePropertySource extends PropertiesPropertySource { this(new DefaultResourceLoader().getResource(location)); } - private ResourcePropertySource(String name, String resourceName, Map source) { + private ResourcePropertySource(String name, @Nullable String resourceName, Map source) { super(name, source); this.resourceName = resourceName; } diff --git a/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java b/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java index f572eb051b9..b37b8ac2729 100644 --- a/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java +++ b/spring-core/src/main/java/org/springframework/util/AntPathMatcher.java @@ -25,6 +25,8 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.springframework.lang.Nullable; + /** * {@link PathMatcher} implementation for Ant-style path patterns. * @@ -187,7 +189,7 @@ public class AntPathMatcher implements PathMatcher { * as far as the given base path goes is sufficient) * @return {@code true} if the supplied {@code path} matched, {@code false} if it didn't */ - protected boolean doMatch(String pattern, String path, boolean fullMatch, Map uriTemplateVariables) { + protected boolean doMatch(String pattern, String path, boolean fullMatch, @Nullable Map uriTemplateVariables) { if (path.startsWith(this.pathSeparator) != pattern.startsWith(this.pathSeparator)) { return false; } diff --git a/spring-core/src/main/java/org/springframework/util/CollectionUtils.java b/spring-core/src/main/java/org/springframework/util/CollectionUtils.java index c53085789f5..f3901557d25 100644 --- a/spring-core/src/main/java/org/springframework/util/CollectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/CollectionUtils.java @@ -411,7 +411,7 @@ public abstract class CollectionUtils { } @Override - public void add(K key, V value) { + public void add(K key, @Nullable V value) { List values = this.map.computeIfAbsent(key, k -> new LinkedList<>()); values.add(value); } diff --git a/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java b/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java index 7c48ad22044..b3cec0b37d8 100644 --- a/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java +++ b/spring-core/src/main/java/org/springframework/util/LinkedMultiValueMap.java @@ -24,6 +24,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.springframework.lang.Nullable; + /** * Simple implementation of {@link MultiValueMap} that wraps a {@link LinkedHashMap}, * storing multiple values in a {@link LinkedList}. @@ -74,7 +76,7 @@ public class LinkedMultiValueMap implements MultiValueMap, Serializa // MultiValueMap implementation @Override - public void add(K key, V value) { + public void add(K key, @Nullable V value) { List values = this.targetMap.computeIfAbsent(key, k -> new LinkedList<>()); values.add(value); } diff --git a/spring-core/src/main/java/org/springframework/util/MultiValueMap.java b/spring-core/src/main/java/org/springframework/util/MultiValueMap.java index bf9791e8a69..011f06628d0 100644 --- a/spring-core/src/main/java/org/springframework/util/MultiValueMap.java +++ b/spring-core/src/main/java/org/springframework/util/MultiValueMap.java @@ -42,7 +42,7 @@ public interface MultiValueMap extends Map> { * @param key the key * @param value the value to be added */ - void add(K key, V value); + void add(K key, @Nullable V value); /** * Add all the values of the given list to the current list of values for the given key. 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 33d6b0c328c..f49166efd1c 100644 --- a/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java +++ b/spring-core/src/main/java/org/springframework/util/ReflectionUtils.java @@ -238,7 +238,7 @@ public abstract class ReflectionUtils { * @see #invokeJdbcMethod(java.lang.reflect.Method, Object, Object[]) */ @Nullable - public static Object invokeJdbcMethod(Method method, Object target) throws SQLException { + public static Object invokeJdbcMethod(Method method, @Nullable Object target) throws SQLException { return invokeJdbcMethod(method, target, new Object[0]); } @@ -547,7 +547,7 @@ public abstract class ReflectionUtils { * @param mf the filter that determines the methods to apply the callback to * @throws IllegalStateException if introspection fails */ - public static void doWithMethods(Class clazz, MethodCallback mc, MethodFilter mf) { + public static void doWithMethods(Class clazz, MethodCallback mc, @Nullable MethodFilter mf) { // Keep backing up the inheritance hierarchy. Method[] methods = getDeclaredMethods(clazz); for (Method method : methods) { @@ -720,7 +720,7 @@ public abstract class ReflectionUtils { * @param ff the filter that determines the fields to apply the callback to * @throws IllegalStateException if introspection fails */ - public static void doWithFields(Class clazz, FieldCallback fc, FieldFilter ff) { + public static void doWithFields(Class clazz, FieldCallback fc, @Nullable FieldFilter ff) { // Keep backing up the inheritance hierarchy. Class targetClass = clazz; do { diff --git a/spring-core/src/main/java/org/springframework/util/StringUtils.java b/spring-core/src/main/java/org/springframework/util/StringUtils.java index 37e41dc8c93..dfc338e551a 100644 --- a/spring-core/src/main/java/org/springframework/util/StringUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StringUtils.java @@ -1065,7 +1065,7 @@ public abstract class StringUtils { */ @Nullable public static Properties splitArrayElementsIntoProperties( - String[] array, String delimiter, String charsToDelete) { + String[] array, String delimiter, @Nullable String charsToDelete) { if (ObjectUtils.isEmpty(array)) { return null; @@ -1179,7 +1179,7 @@ public abstract class StringUtils { * @return an array of the tokens in the list * @see #tokenizeToStringArray */ - public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) { + public static String[] delimitedListToStringArray(String str, String delimiter, @Nullable String charsToDelete) { if (str == null) { return new String[0]; } diff --git a/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureTask.java b/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureTask.java index 9178ee9c932..fe00907626d 100644 --- a/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureTask.java +++ b/spring-core/src/main/java/org/springframework/util/concurrent/ListenableFutureTask.java @@ -20,6 +20,8 @@ import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; +import org.springframework.lang.Nullable; + /** * Extension of {@link FutureTask} that implements {@link ListenableFuture}. * @@ -47,7 +49,7 @@ public class ListenableFutureTask extends FutureTask implements Listenable * @param runnable the runnable task * @param result the result to return on successful completion */ - public ListenableFutureTask(Runnable runnable, T result) { + public ListenableFutureTask(Runnable runnable, @Nullable T result) { super(runnable, result); } diff --git a/spring-core/src/main/java/org/springframework/util/concurrent/SettableListenableFuture.java b/spring-core/src/main/java/org/springframework/util/concurrent/SettableListenableFuture.java index 73198dbf237..1ea85b1b6a4 100644 --- a/spring-core/src/main/java/org/springframework/util/concurrent/SettableListenableFuture.java +++ b/spring-core/src/main/java/org/springframework/util/concurrent/SettableListenableFuture.java @@ -21,6 +21,7 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -54,7 +55,7 @@ public class SettableListenableFuture implements ListenableFuture { * @param value the value that will be set * @return {@code true} if the value was successfully set, else {@code false} */ - public boolean set(T value) { + public boolean set(@Nullable T value) { return this.settableTask.setResultValue(value); } diff --git a/spring-expression/src/main/java/org/springframework/expression/TypedValue.java b/spring-expression/src/main/java/org/springframework/expression/TypedValue.java index 725f4f51c36..0d1e2be394e 100644 --- a/spring-expression/src/main/java/org/springframework/expression/TypedValue.java +++ b/spring-expression/src/main/java/org/springframework/expression/TypedValue.java @@ -17,6 +17,7 @@ package org.springframework.expression; import org.springframework.core.convert.TypeDescriptor; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; /** @@ -43,7 +44,7 @@ public class TypedValue { * is inferred from the object, so no generic declarations are preserved. * @param value the object value */ - public TypedValue(Object value) { + public TypedValue(@Nullable Object value) { this.value = value; this.typeDescriptor = null; // initialized when/if requested } @@ -54,12 +55,13 @@ public class TypedValue { * @param value the object value * @param typeDescriptor a type descriptor describing the type of the value */ - public TypedValue(Object value, TypeDescriptor typeDescriptor) { + public TypedValue(@Nullable Object value, @Nullable TypeDescriptor typeDescriptor) { this.value = value; this.typeDescriptor = typeDescriptor; } + @Nullable public Object getValue() { return this.value; } diff --git a/spring-expression/src/main/java/org/springframework/expression/common/ExpressionUtils.java b/spring-expression/src/main/java/org/springframework/expression/common/ExpressionUtils.java index e9adf7382f0..1a6c63dc29d 100644 --- a/spring-expression/src/main/java/org/springframework/expression/common/ExpressionUtils.java +++ b/spring-expression/src/main/java/org/springframework/expression/common/ExpressionUtils.java @@ -21,6 +21,7 @@ import org.springframework.expression.EvaluationContext; import org.springframework.expression.EvaluationException; import org.springframework.expression.TypeConverter; import org.springframework.expression.TypedValue; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -44,7 +45,7 @@ public abstract class ExpressionUtils { * of the value to the specified type is not supported */ @SuppressWarnings("unchecked") - public static T convertTypedValue(EvaluationContext context, TypedValue typedValue, Class targetType) { + public static T convertTypedValue(@Nullable EvaluationContext context, TypedValue typedValue, Class targetType) { Object value = typedValue.getValue(); if (targetType == null) { return (T) value; diff --git a/spring-expression/src/main/java/org/springframework/expression/common/TemplateAwareExpressionParser.java b/spring-expression/src/main/java/org/springframework/expression/common/TemplateAwareExpressionParser.java index 92afac4cd9f..65c34062985 100644 --- a/spring-expression/src/main/java/org/springframework/expression/common/TemplateAwareExpressionParser.java +++ b/spring-expression/src/main/java/org/springframework/expression/common/TemplateAwareExpressionParser.java @@ -24,6 +24,7 @@ import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.ParseException; import org.springframework.expression.ParserContext; +import org.springframework.lang.Nullable; /** * An expression parser that understands templates. It can be subclassed by expression @@ -255,7 +256,7 @@ public abstract class TemplateAwareExpressionParser implements ExpressionParser * @return an evaluator for the parsed expression * @throws ParseException an exception occurred during parsing */ - protected abstract Expression doParseExpression(String expressionString, ParserContext context) + protected abstract Expression doParseExpression(String expressionString, @Nullable ParserContext context) throws ParseException; diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/CompiledExpression.java b/spring-expression/src/main/java/org/springframework/expression/spel/CompiledExpression.java index dc80e9cb52b..e9efb208ab9 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/CompiledExpression.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/CompiledExpression.java @@ -18,6 +18,7 @@ package org.springframework.expression.spel; import org.springframework.expression.EvaluationContext; import org.springframework.expression.EvaluationException; +import org.springframework.lang.Nullable; /** * Base superclass for compiled expressions. Each generated compiled expression class @@ -33,6 +34,6 @@ public abstract class CompiledExpression { * Subclasses of CompiledExpression generated by SpelCompiler will provide an * implementation of this method. */ - public abstract Object getValue(Object target, EvaluationContext context) throws EvaluationException; + public abstract Object getValue(Object target, @Nullable EvaluationContext context) throws EvaluationException; } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ExpressionState.java b/spring-expression/src/main/java/org/springframework/expression/spel/ExpressionState.java index e1cbfbd4530..0a10e8fe1b8 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ExpressionState.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ExpressionState.java @@ -217,7 +217,7 @@ public class ExpressionState { return null; } - public TypedValue operate(Operation op, Object left, Object right) throws EvaluationException { + public TypedValue operate(Operation op, Object left, @Nullable Object right) throws EvaluationException { OperatorOverloader overloader = this.relatedContext.getOperatorOverloader(); if (overloader.overridesOperation(op, left, right)) { Object returnValue = overloader.operate(op, left, right); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/SpelParserConfiguration.java b/spring-expression/src/main/java/org/springframework/expression/spel/SpelParserConfiguration.java index bb3336746f9..3ff14a0f253 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/SpelParserConfiguration.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/SpelParserConfiguration.java @@ -17,6 +17,7 @@ package org.springframework.expression.spel; import org.springframework.core.SpringProperties; +import org.springframework.lang.Nullable; /** @@ -62,7 +63,7 @@ public class SpelParserConfiguration { * @param compilerMode the compiler mode for the parser * @param compilerClassLoader the ClassLoader to use as the basis for expression compilation */ - public SpelParserConfiguration(SpelCompilerMode compilerMode, ClassLoader compilerClassLoader) { + public SpelParserConfiguration(@Nullable SpelCompilerMode compilerMode, ClassLoader compilerClassLoader) { this(compilerMode, compilerClassLoader, false, false, Integer.MAX_VALUE); } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/ast/FormatHelper.java b/spring-expression/src/main/java/org/springframework/expression/spel/ast/FormatHelper.java index 57f00826c6d..f271910f1b3 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/ast/FormatHelper.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/ast/FormatHelper.java @@ -19,6 +19,7 @@ package org.springframework.expression.spel.ast; import java.util.List; import org.springframework.core.convert.TypeDescriptor; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -60,7 +61,7 @@ public class FormatHelper { * @return a formatted String suitable for message inclusion * @see ClassUtils#getQualifiedName(Class) */ - public static String formatClassNameForMessage(Class clazz) { + public static String formatClassNameForMessage(@Nullable Class clazz) { return (clazz != null ? ClassUtils.getQualifiedName(clazz) : "null"); } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/standard/InternalSpelExpressionParser.java b/spring-expression/src/main/java/org/springframework/expression/spel/standard/InternalSpelExpressionParser.java index 16465eedbdc..421316e6988 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/standard/InternalSpelExpressionParser.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/standard/InternalSpelExpressionParser.java @@ -117,7 +117,7 @@ class InternalSpelExpressionParser extends TemplateAwareExpressionParser { @Override - protected SpelExpression doParseExpression(String expressionString, ParserContext context) throws ParseException { + protected SpelExpression doParseExpression(String expressionString, @Nullable ParserContext context) throws ParseException { try { this.expressionString = expressionString; Tokenizer tokenizer = new Tokenizer(expressionString); diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/standard/SpelExpressionParser.java b/spring-expression/src/main/java/org/springframework/expression/spel/standard/SpelExpressionParser.java index e3eb61a9b3e..0cae5a1c198 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/standard/SpelExpressionParser.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/standard/SpelExpressionParser.java @@ -20,6 +20,7 @@ import org.springframework.expression.ParseException; import org.springframework.expression.ParserContext; import org.springframework.expression.common.TemplateAwareExpressionParser; import org.springframework.expression.spel.SpelParserConfiguration; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -56,7 +57,7 @@ public class SpelExpressionParser extends TemplateAwareExpressionParser { } @Override - protected SpelExpression doParseExpression(String expressionString, ParserContext context) throws ParseException { + protected SpelExpression doParseExpression(String expressionString, @Nullable ParserContext context) throws ParseException { return new InternalSpelExpressionParser(this.configuration).doParseExpression(expressionString, context); } diff --git a/spring-expression/src/main/java/org/springframework/expression/spel/support/StandardEvaluationContext.java b/spring-expression/src/main/java/org/springframework/expression/spel/support/StandardEvaluationContext.java index 57edae520df..4e288ad0452 100644 --- a/spring-expression/src/main/java/org/springframework/expression/spel/support/StandardEvaluationContext.java +++ b/spring-expression/src/main/java/org/springframework/expression/spel/support/StandardEvaluationContext.java @@ -34,6 +34,7 @@ import org.springframework.expression.TypeComparator; import org.springframework.expression.TypeConverter; import org.springframework.expression.TypeLocator; import org.springframework.expression.TypedValue; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -84,7 +85,7 @@ public class StandardEvaluationContext implements EvaluationContext { this.rootObject = new TypedValue(rootObject, typeDescriptor); } - public void setRootObject(Object rootObject) { + public void setRootObject(@Nullable Object rootObject) { this.rootObject = (rootObject != null ? new TypedValue(rootObject) : TypedValue.NULL); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/config/SortedResourcesFactoryBean.java b/spring-jdbc/src/main/java/org/springframework/jdbc/config/SortedResourcesFactoryBean.java index 72723febb21..521e68a5871 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/config/SortedResourcesFactoryBean.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/config/SortedResourcesFactoryBean.java @@ -31,6 +31,7 @@ import org.springframework.core.io.ResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternUtils; +import org.springframework.lang.Nullable; /** * {@link FactoryBean} implementation that takes a list of location Strings @@ -60,7 +61,7 @@ public class SortedResourcesFactoryBean extends AbstractFactoryBean @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader); } 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 43ff3fb182d..5dd6a2041f1 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 @@ -627,7 +627,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { * @throws DataAccessException if there is any problem */ public T query( - PreparedStatementCreator psc, final PreparedStatementSetter pss, final ResultSetExtractor rse) + PreparedStatementCreator psc, @Nullable final PreparedStatementSetter pss, final ResultSetExtractor rse) throws DataAccessException { Assert.notNull(rse, "ResultSetExtractor must not be null"); 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 6df560a9715..b92f6fcb4c3 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 @@ -193,7 +193,7 @@ public abstract class StatementCreatorUtils { * @see SqlTypeValue */ private static void setParameterValueInternal(PreparedStatement ps, int paramIndex, int sqlType, - String typeName, Integer scale, Object inValue) throws SQLException { + @Nullable String typeName, @Nullable Integer scale, Object inValue) throws SQLException { String typeNameToUse = typeName; int sqlTypeToUse = sqlType; diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.java index 5bfb345f983..c3bef65ecfb 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterJdbcTemplate.java @@ -37,6 +37,7 @@ import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.core.SqlRowSetResultSetExtractor; import org.springframework.jdbc.support.KeyHolder; import org.springframework.jdbc.support.rowset.SqlRowSet; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -301,7 +302,7 @@ public class NamedParameterJdbcTemplate implements NamedParameterJdbcOperations @Override public int update( - String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder, String[] keyColumnNames) + String sql, SqlParameterSource paramSource, KeyHolder generatedKeyHolder, @Nullable String[] keyColumnNames) throws DataAccessException { ParsedSql parsedSql = getParsedSql(sql); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java index 2d27c89d3a1..07dd215d4cf 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/core/namedparam/NamedParameterUtils.java @@ -256,7 +256,7 @@ public abstract class NamedParameterUtils { * @return the SQL statement with substituted parameters * @see #parseSqlStatement */ - public static String substituteNamedParameters(ParsedSql parsedSql, SqlParameterSource paramSource) { + public static String substituteNamedParameters(ParsedSql parsedSql, @Nullable SqlParameterSource paramSource) { String originalSql = parsedSql.getOriginalSql(); StringBuilder actualSql = new StringBuilder(); List paramNames = parsedSql.getParameterNames(); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java index 6119b47ca51..1cb3a3ef90a 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/DataSourceTransactionManager.java @@ -22,6 +22,7 @@ import java.sql.Statement; import javax.sql.DataSource; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.transaction.CannotCreateTransactionException; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionSystemException; @@ -413,7 +414,7 @@ public class DataSourceTransactionManager extends AbstractPlatformTransactionMan private boolean mustRestoreAutoCommit; - public void setConnectionHolder(ConnectionHolder connectionHolder, boolean newConnectionHolder) { + public void setConnectionHolder(@Nullable ConnectionHolder connectionHolder, boolean newConnectionHolder) { super.setConnectionHolder(connectionHolder); this.newConnectionHolder = newConnectionHolder; } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.java index 4b412df0aa3..31bbb17cd48 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/JdbcTransactionObjectSupport.java @@ -22,6 +22,7 @@ import java.sql.Savepoint; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.lang.Nullable; import org.springframework.transaction.CannotCreateTransactionException; import org.springframework.transaction.NestedTransactionNotSupportedException; import org.springframework.transaction.SavepointManager; @@ -56,7 +57,7 @@ public abstract class JdbcTransactionObjectSupport implements SavepointManager, private boolean savepointAllowed = false; - public void setConnectionHolder(ConnectionHolder connectionHolder) { + public void setConnectionHolder(@Nullable ConnectionHolder connectionHolder) { this.connectionHolder = connectionHolder; } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java index 3c97dab0594..3afba3243f1 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/init/ScriptUtils.java @@ -30,6 +30,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.core.io.Resource; import org.springframework.core.io.support.EncodedResource; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -164,7 +165,7 @@ public abstract class ScriptUtils { * @param statements the list that will contain the individual statements * @throws ScriptException if an error occurred while splitting the SQL script */ - public static void splitSqlScript(EncodedResource resource, String script, String separator, String commentPrefix, + public static void splitSqlScript(@Nullable EncodedResource resource, String script, String separator, String commentPrefix, String blockCommentStartDelimiter, String blockCommentEndDelimiter, List statements) throws ScriptException { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/object/SqlQuery.java b/spring-jdbc/src/main/java/org/springframework/jdbc/object/SqlQuery.java index 2c02e55cdbb..0514695ab5e 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/object/SqlQuery.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/object/SqlQuery.java @@ -107,7 +107,7 @@ public abstract class SqlQuery extends SqlOperation { * @return a List of objects, one per row of the ResultSet. Normally all these * will be of the same class, although it is possible to use different types. */ - public List execute(Object[] params, Map context) throws DataAccessException { + public List execute(Object[] params, @Nullable Map context) throws DataAccessException { validateParameters(params); RowMapper rowMapper = newRowMapper(params, context); return getJdbcTemplate().query(newPreparedStatementCreator(params), rowMapper); @@ -143,7 +143,7 @@ public abstract class SqlQuery extends SqlOperation { * @param p1 single int parameter * @param context the contextual information for object creation */ - public List execute(int p1, Map context) throws DataAccessException { + public List execute(int p1, @Nullable Map context) throws DataAccessException { return execute(new Object[] {p1}, context); } @@ -161,7 +161,7 @@ public abstract class SqlQuery extends SqlOperation { * @param p2 second int parameter * @param context the contextual information for object creation */ - public List execute(int p1, int p2, Map context) throws DataAccessException { + public List execute(int p1, int p2, @Nullable Map context) throws DataAccessException { return execute(new Object[] {p1, p2}, context); } @@ -179,7 +179,7 @@ public abstract class SqlQuery extends SqlOperation { * @param p1 single long parameter * @param context the contextual information for object creation */ - public List execute(long p1, Map context) throws DataAccessException { + public List execute(long p1, @Nullable Map context) throws DataAccessException { return execute(new Object[] {p1}, context); } @@ -196,7 +196,7 @@ public abstract class SqlQuery extends SqlOperation { * @param p1 single String parameter * @param context the contextual information for object creation */ - public List execute(String p1, Map context) throws DataAccessException { + public List execute(String p1, @Nullable Map context) throws DataAccessException { return execute(new Object[] {p1}, context); } @@ -220,7 +220,7 @@ public abstract class SqlQuery extends SqlOperation { * @return a List of objects, one per row of the ResultSet. Normally all these * will be of the same class, although it is possible to use different types. */ - public List executeByNamedParam(Map paramMap, Map context) throws DataAccessException { + public List executeByNamedParam(Map paramMap, @Nullable Map context) throws DataAccessException { validateNamedParameters(paramMap); ParsedSql parsedSql = getParsedSql(); MapSqlParameterSource paramSource = new MapSqlParameterSource(paramMap); @@ -250,7 +250,7 @@ public abstract class SqlQuery extends SqlOperation { * @see org.springframework.dao.support.DataAccessUtils#singleResult */ @Nullable - public T findObject(Object[] params, Map context) throws DataAccessException { + public T findObject(Object[] params, @Nullable Map context) throws DataAccessException { List results = execute(params, context); return DataAccessUtils.singleResult(results); } @@ -266,7 +266,7 @@ public abstract class SqlQuery extends SqlOperation { * Convenient method to find a single object given a single int parameter * and a context. */ - public T findObject(int p1, Map context) throws DataAccessException { + public T findObject(int p1, @Nullable Map context) throws DataAccessException { return findObject(new Object[] {p1}, context); } @@ -281,7 +281,7 @@ public abstract class SqlQuery extends SqlOperation { * Convenient method to find a single object given two int parameters * and a context. */ - public T findObject(int p1, int p2, Map context) throws DataAccessException { + public T findObject(int p1, int p2, @Nullable Map context) throws DataAccessException { return findObject(new Object[] {p1, p2}, context); } @@ -296,7 +296,7 @@ public abstract class SqlQuery extends SqlOperation { * Convenient method to find a single object given a single long parameter * and a context. */ - public T findObject(long p1, Map context) throws DataAccessException { + public T findObject(long p1, @Nullable Map context) throws DataAccessException { return findObject(new Object[] {p1}, context); } @@ -311,7 +311,7 @@ public abstract class SqlQuery extends SqlOperation { * Convenient method to find a single object given a single String parameter * and a context. */ - public T findObject(String p1, Map context) throws DataAccessException { + public T findObject(String p1, @Nullable Map context) throws DataAccessException { return findObject(new Object[] {p1}, context); } @@ -333,7 +333,7 @@ public abstract class SqlQuery extends SqlOperation { * @return a List of objects, one per row of the ResultSet. Normally all these * will be of the same class, although it is possible to use different types. */ - public T findObjectByNamedParam(Map paramMap, Map context) throws DataAccessException { + public T findObjectByNamedParam(Map paramMap, @Nullable Map context) throws DataAccessException { List results = executeByNamedParam(paramMap, context); return DataAccessUtils.singleResult(results); } diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java index 06337af7986..ba5821977ea 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachingConnectionFactory.java @@ -400,7 +400,7 @@ public class CachingConnectionFactory extends SingleConnectionFactory { } private MessageConsumer getCachedConsumer( - Destination dest, String selector, Boolean noLocal, String subscription, boolean durable) throws JMSException { + Destination dest, String selector, @Nullable Boolean noLocal, @Nullable String subscription, boolean durable) throws JMSException { ConsumerCacheKey cacheKey = new ConsumerCacheKey(dest, selector, noLocal, subscription, durable); MessageConsumer consumer = this.cachedConsumers.get(cacheKey); diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java b/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java index e8119a8015a..9e593ebd796 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/JmsResourceHolder.java @@ -134,7 +134,7 @@ public class JmsResourceHolder extends ResourceHolderSupport { addSession(session, null); } - public final void addSession(Session session, Connection connection) { + public final void addSession(Session session, @Nullable Connection connection) { Assert.isTrue(!this.frozen, "Cannot add Session because JmsResourceHolder is frozen"); Assert.notNull(session, "Session must not be null"); if (!this.sessions.contains(session)) { @@ -171,7 +171,7 @@ public class JmsResourceHolder extends ResourceHolderSupport { return getSession(sessionType, null); } - public Session getSession(Class sessionType, Connection connection) { + public Session getSession(Class sessionType, @Nullable Connection connection) { List sessions = this.sessions; if (connection != null) { sessions = this.sessionsPerConnection.get(connection); diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java b/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java index bf44f8fa01a..b10bc3d4811 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/JmsTransactionManager.java @@ -23,6 +23,7 @@ import javax.jms.Session; import javax.jms.TransactionRolledBackException; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.transaction.CannotCreateTransactionException; import org.springframework.transaction.InvalidIsolationLevelException; import org.springframework.transaction.TransactionDefinition; @@ -308,7 +309,7 @@ public class JmsTransactionManager extends AbstractPlatformTransactionManager private JmsResourceHolder resourceHolder; - public void setResourceHolder(JmsResourceHolder resourceHolder) { + public void setResourceHolder(@Nullable JmsResourceHolder resourceHolder) { this.resourceHolder = resourceHolder; } diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java index 0840b5a6553..5717fc3562c 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessageOperations.java @@ -93,8 +93,8 @@ public interface JmsMessageOperations extends MessageSendingOperations headers, MessagePostProcessor postProcessor) throws MessagingException; + void convertAndSend(String destinationName, Object payload, @Nullable Map headers, @Nullable MessagePostProcessor postProcessor) throws MessagingException; /** * Receive a message from the given destination. @@ -153,7 +153,7 @@ public interface JmsMessageOperations extends MessageSendingOperations T convertSendAndReceive(String destinationName, Object request, Map headers, Class targetClass) + T convertSendAndReceive(String destinationName, Object request, @Nullable Map headers, Class targetClass) throws MessagingException; /** diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java index 43fcf0eb362..38bd075f3a8 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java @@ -28,6 +28,7 @@ import org.springframework.jms.JmsException; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.converter.MessagingMessageConverter; import org.springframework.jms.support.converter.SimpleMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessagingException; import org.springframework.messaging.converter.MessageConversionException; @@ -176,7 +177,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate } @Override - public void convertAndSend(Object payload, MessagePostProcessor postProcessor) throws MessagingException { + public void convertAndSend(Object payload, @Nullable MessagePostProcessor postProcessor) throws MessagingException { Destination defaultDestination = getDefaultDestination(); if (defaultDestination != null) { convertAndSend(defaultDestination, payload, postProcessor); @@ -211,8 +212,8 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate } @Override - public void convertAndSend(String destinationName, Object payload, Map headers, - MessagePostProcessor postProcessor) throws MessagingException { + public void convertAndSend(String destinationName, Object payload, @Nullable Map headers, + @Nullable MessagePostProcessor postProcessor) throws MessagingException { Message message = doConvert(payload, headers, postProcessor); send(destinationName, message); @@ -286,13 +287,13 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @Override public T convertSendAndReceive(String destinationName, Object request, - Map headers, Class targetClass) throws MessagingException { + @Nullable Map headers, Class targetClass) throws MessagingException { return convertSendAndReceive(destinationName, request, headers, targetClass, null); } @Override - public T convertSendAndReceive(Object request, Class targetClass, MessagePostProcessor postProcessor) { + public T convertSendAndReceive(Object request, Class targetClass, @Nullable MessagePostProcessor postProcessor) { Destination defaultDestination = getDefaultDestination(); if (defaultDestination != null) { return convertSendAndReceive(defaultDestination, request, targetClass, postProcessor); @@ -311,8 +312,8 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate @SuppressWarnings("unchecked") @Override - public T convertSendAndReceive(String destinationName, Object request, Map headers, - Class targetClass, MessagePostProcessor postProcessor) { + public T convertSendAndReceive(String destinationName, Object request, @Nullable Map headers, + Class targetClass, @Nullable MessagePostProcessor postProcessor) { Message requestMessage = doConvert(request, headers, postProcessor); Message replyMessage = sendAndReceive(destinationName, requestMessage); diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java index bfe43e242cf..090dfcaf846 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsTemplate.java @@ -760,7 +760,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations } @Override - public Message receiveSelected(final Destination destination, final String messageSelector) throws JmsException { + public Message receiveSelected(final Destination destination, @Nullable final String messageSelector) throws JmsException { return execute(new SessionCallback() { @Override public Message doInJms(Session session) throws JMSException { @@ -770,7 +770,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations } @Override - public Message receiveSelected(final String destinationName, final String messageSelector) throws JmsException { + public Message receiveSelected(final String destinationName, @Nullable final String messageSelector) throws JmsException { return execute(new SessionCallback() { @Override public Message doInJms(Session session) throws JMSException { @@ -1025,7 +1025,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations } @Override - public T browseSelected(final Queue queue, final String messageSelector, final BrowserCallback action) + public T browseSelected(final Queue queue, @Nullable final String messageSelector, final BrowserCallback action) throws JmsException { Assert.notNull(action, "Callback object must not be null"); @@ -1044,7 +1044,7 @@ public class JmsTemplate extends JmsDestinationAccessor implements JmsOperations } @Override - public T browseSelected(final String queueName, final String messageSelector, final BrowserCallback action) + public T browseSelected(final String queueName, @Nullable final String messageSelector, final BrowserCallback action) throws JmsException { Assert.notNull(action, "Callback object must not be null"); diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java b/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java index c0946db2591..de0e3a2cf72 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/SessionAwareMessageListener.java @@ -20,6 +20,8 @@ import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; +import org.springframework.lang.Nullable; + /** * Variant of the standard JMS {@link javax.jms.MessageListener} interface, * offering not only the received Message but also the underlying @@ -52,6 +54,6 @@ public interface SessionAwareMessageListener { * @param session the underlying JMS Session (never {@code null}) * @throws JMSException if thrown by JMS methods */ - void onMessage(M message, Session session) throws JMSException; + void onMessage(M message, @Nullable Session session) throws JMSException; } diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java index 46d36843fcb..7e2b87db18f 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessageListenerAdapter.java @@ -26,6 +26,7 @@ import org.springframework.jms.listener.SessionAwareMessageListener; import org.springframework.jms.listener.SubscriptionNameProvider; import org.springframework.jms.support.converter.MessageConverter; import org.springframework.jms.support.converter.SimpleMessageConverter; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MethodInvoker; import org.springframework.util.ObjectUtils; @@ -195,7 +196,7 @@ public class MessageListenerAdapter extends AbstractAdaptableMessageListener imp */ @Override @SuppressWarnings("unchecked") - public void onMessage(Message message, Session session) throws JMSException { + public void onMessage(Message message, @Nullable Session session) throws JMSException { // Check whether the delegate is a MessageListener impl itself. // In that case, the adapter will simply act as a pass-through. Object delegate = getDelegate(); diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java index b87dd6b2362..66b48997e98 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/MessagingMessageListenerAdapter.java @@ -22,6 +22,7 @@ import javax.jms.Session; import org.springframework.core.MethodParameter; import org.springframework.jms.support.JmsHeaderMapper; import org.springframework.jms.support.converter.MessageConversionException; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessagingException; import org.springframework.messaging.core.AbstractMessageSendingTemplate; @@ -61,7 +62,7 @@ public class MessagingMessageListenerAdapter extends AbstractAdaptableMessageLis @Override - public void onMessage(javax.jms.Message jmsMessage, Session session) throws JMSException { + public void onMessage(javax.jms.Message jmsMessage, @Nullable Session session) throws JMSException { Message message = toMessagingMessage(jmsMessage); if (logger.isDebugEnabled()) { logger.debug("Processing [" + message + "]"); diff --git a/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerServiceExporter.java b/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerServiceExporter.java index a2d8ca298c0..dfc6ba01502 100644 --- a/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerServiceExporter.java +++ b/spring-jms/src/main/java/org/springframework/jms/remoting/JmsInvokerServiceExporter.java @@ -97,7 +97,7 @@ public class JmsInvokerServiceExporter extends RemoteInvocationBasedExporter @Override - public void onMessage(Message requestMessage, Session session) throws JMSException { + public void onMessage(Message requestMessage, @Nullable Session session) throws JMSException { RemoteInvocation invocation = readRemoteInvocation(requestMessage); if (invocation != null) { RemoteInvocationResult result = invokeAndCreateResult(invocation, this.proxy); diff --git a/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java b/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java index b39b31f1f3d..9e3d555fb06 100644 --- a/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/listener/SimpleMessageListenerContainerTests.java @@ -33,6 +33,7 @@ import org.junit.Test; import org.springframework.context.support.GenericApplicationContext; import org.springframework.core.task.TaskExecutor; import org.springframework.jms.StubQueue; +import org.springframework.lang.Nullable; import org.springframework.util.ErrorHandler; import static org.junit.Assert.*; @@ -176,7 +177,7 @@ public class SimpleMessageListenerContainerTests extends AbstractMessageListener this.container.setDestinationName(DESTINATION_NAME); this.container.setMessageListener(new SessionAwareMessageListener() { @Override - public void onMessage(Message message, Session sess) { + public void onMessage(Message message, @Nullable Session sess) { try { // Check correct Session passed into SessionAwareMessageListener. assertSame(sess, session); @@ -272,7 +273,7 @@ public class SimpleMessageListenerContainerTests extends AbstractMessageListener this.container.setDestinationName(DESTINATION_NAME); this.container.setMessageListener(new SessionAwareMessageListener() { @Override - public void onMessage(Message message, Session session) throws JMSException { + public void onMessage(Message message, @Nullable Session session) throws JMSException { throw theException; } }); @@ -322,7 +323,7 @@ public class SimpleMessageListenerContainerTests extends AbstractMessageListener this.container.setDestinationName(DESTINATION_NAME); this.container.setMessageListener(new SessionAwareMessageListener() { @Override - public void onMessage(Message message, Session session) throws JMSException { + public void onMessage(Message message, @Nullable Session session) throws JMSException { throw theException; } }); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java index e7d0b082f52..abb93ff4cc8 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/MessageHeaders.java @@ -107,7 +107,7 @@ public class MessageHeaders implements Map, Serializable { * {@link #TIMESTAMP} headers will also be added, overriding any existing values. * @param headers a map with headers to add */ - public MessageHeaders(Map headers) { + public MessageHeaders(@Nullable Map headers) { this(headers, null, null); } @@ -117,7 +117,7 @@ public class MessageHeaders implements Map, Serializable { * @param id the {@link #ID} header value * @param timestamp the {@link #TIMESTAMP} header value */ - protected MessageHeaders(Map headers, UUID id, Long timestamp) { + protected MessageHeaders(@Nullable Map headers, UUID id, Long timestamp) { this.headers = (headers != null ? new HashMap<>(headers) : new HashMap()); if (id == null) { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java b/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java index 49fefc89917..22575b128b8 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractDestinationResolvingMessagingTemplate.java @@ -18,6 +18,7 @@ package org.springframework.messaging.core; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.util.Assert; @@ -89,7 +90,7 @@ public abstract class AbstractDestinationResolvingMessagingTemplate extends A } @Override - public void convertAndSend(String destinationName, T payload, Map headers, MessagePostProcessor postProcessor) { + public void convertAndSend(String destinationName, T payload, @Nullable Map headers, @Nullable MessagePostProcessor postProcessor) { D destination = resolveDestination(destinationName); super.convertAndSend(destination, payload, headers, postProcessor); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java b/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java index 0fa76798a67..22f95c70f4e 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessageSendingTemplate.java @@ -125,7 +125,7 @@ public abstract class AbstractMessageSendingTemplate implements MessageSendin } @Override - public void convertAndSend(Object payload, MessagePostProcessor postProcessor) throws MessagingException { + public void convertAndSend(Object payload, @Nullable MessagePostProcessor postProcessor) throws MessagingException { convertAndSend(getRequiredDefaultDestination(), payload, postProcessor); } @@ -137,8 +137,8 @@ public abstract class AbstractMessageSendingTemplate implements MessageSendin } @Override - public void convertAndSend(D destination, Object payload, Map headers, - MessagePostProcessor postProcessor) throws MessagingException { + public void convertAndSend(D destination, Object payload, @Nullable Map headers, + @Nullable MessagePostProcessor postProcessor) throws MessagingException { Message message = doConvert(payload, headers, postProcessor); send(destination, message); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java b/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java index 446abcd24e6..11dd7a9caef 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/core/AbstractMessagingTemplate.java @@ -18,6 +18,7 @@ package org.springframework.messaging.core; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; /** @@ -56,12 +57,12 @@ public abstract class AbstractMessagingTemplate extends AbstractMessageReceiv } @Override - public T convertSendAndReceive(D destination, Object request, Map headers, Class targetClass) { + public T convertSendAndReceive(D destination, Object request, @Nullable Map headers, Class targetClass) { return convertSendAndReceive(destination, request, headers, targetClass, null); } @Override - public T convertSendAndReceive(Object request, Class targetClass, MessagePostProcessor postProcessor) { + public T convertSendAndReceive(Object request, Class targetClass, @Nullable MessagePostProcessor postProcessor) { return convertSendAndReceive(getRequiredDefaultDestination(), request, targetClass, postProcessor); } @@ -72,8 +73,8 @@ public abstract class AbstractMessagingTemplate extends AbstractMessageReceiv @SuppressWarnings("unchecked") @Override - public T convertSendAndReceive(D destination, Object request, Map headers, - Class targetClass, MessagePostProcessor postProcessor) { + public T convertSendAndReceive(D destination, Object request, @Nullable Map headers, + Class targetClass, @Nullable MessagePostProcessor postProcessor) { Message requestMessage = doConvert(request, headers, postProcessor); Message replyMessage = sendAndReceive(destination, requestMessage); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java b/spring-messaging/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java index abb3d8602be..e519ff77a07 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/core/DestinationResolvingMessageSendingOperations.java @@ -18,6 +18,7 @@ package org.springframework.messaging.core; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessagingException; @@ -86,7 +87,7 @@ public interface DestinationResolvingMessageSendingOperations extends Message * @param headers headers for the message to send * @param postProcessor the post processor to apply to the message */ - void convertAndSend(String destinationName, T payload, Map headers, - MessagePostProcessor postProcessor) throws MessagingException; + void convertAndSend(String destinationName, T payload, @Nullable Map headers, + @Nullable MessagePostProcessor postProcessor) throws MessagingException; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java b/spring-messaging/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java index c4a0c0be9a2..7320a8c7aea 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/core/MessageRequestReplyOperations.java @@ -92,7 +92,7 @@ public interface MessageRequestReplyOperations { * could not be received, for example due to a timeout */ @Nullable - T convertSendAndReceive(D destination, Object request, Map headers, Class targetClass) + T convertSendAndReceive(D destination, Object request, @Nullable Map headers, Class targetClass) throws MessagingException; /** @@ -108,7 +108,7 @@ public interface MessageRequestReplyOperations { * could not be received, for example due to a timeout */ @Nullable - T convertSendAndReceive(Object request, Class targetClass, MessagePostProcessor requestPostProcessor) + T convertSendAndReceive(Object request, Class targetClass, @Nullable MessagePostProcessor requestPostProcessor) throws MessagingException; /** @@ -142,7 +142,7 @@ public interface MessageRequestReplyOperations { * could not be received, for example due to a timeout */ @Nullable - T convertSendAndReceive(D destination, Object request, Map headers, - Class targetClass, MessagePostProcessor requestPostProcessor) throws MessagingException; + T convertSendAndReceive(D destination, Object request, @Nullable Map headers, + Class targetClass, @Nullable MessagePostProcessor requestPostProcessor) throws MessagingException; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/core/MessageSendingOperations.java b/spring-messaging/src/main/java/org/springframework/messaging/core/MessageSendingOperations.java index 319151e98c1..8af26e1dd7e 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/core/MessageSendingOperations.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/core/MessageSendingOperations.java @@ -18,6 +18,7 @@ package org.springframework.messaging.core; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessagingException; @@ -80,7 +81,7 @@ public interface MessageSendingOperations { * @param payload the Object to use as payload * @param postProcessor the post processor to apply to the message */ - void convertAndSend(Object payload, MessagePostProcessor postProcessor) throws MessagingException; + void convertAndSend(Object payload, @Nullable MessagePostProcessor postProcessor) throws MessagingException; /** * Convert the given Object to serialized form, possibly using a @@ -103,7 +104,7 @@ public interface MessageSendingOperations { * @param headers headers for the message to send * @param postProcessor the post processor to apply to the message */ - void convertAndSend(D destination, Object payload, Map headers, MessagePostProcessor postProcessor) + void convertAndSend(D destination, Object payload, @Nullable Map headers, @Nullable MessagePostProcessor postProcessor) throws MessagingException; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageHeaderAccessor.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageHeaderAccessor.java index 5bec0672bb1..0aea4be7d66 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageHeaderAccessor.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageHeaderAccessor.java @@ -20,6 +20,7 @@ import java.security.Principal; import java.util.List; import java.util.Map; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.support.IdTimestampMessageHeaderInitializer; import org.springframework.messaging.support.MessageHeaderAccessor; @@ -87,7 +88,7 @@ public class SimpMessageHeaderAccessor extends NativeMessageHeaderAccessor { * A constructor for creating new message headers. * This constructor is protected. See factory methods in this and sub-classes. */ - protected SimpMessageHeaderAccessor(SimpMessageType messageType, Map> externalSourceHeaders) { + protected SimpMessageHeaderAccessor(SimpMessageType messageType, @Nullable Map> externalSourceHeaders) { super(externalSourceHeaders); Assert.notNull(messageType, "MessageType must not be null"); setHeader(MESSAGE_TYPE_HEADER, messageType); @@ -188,7 +189,7 @@ public class SimpMessageHeaderAccessor extends NativeMessageHeaderAccessor { @SuppressWarnings("unchecked") @Override - public String getDetailedLogMessage(Object payload) { + public String getDetailedLogMessage(@Nullable Object payload) { if (getMessageType() == null) { return super.getDetailedLogMessage(payload); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageSendingOperations.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageSendingOperations.java index 28b6f8083f0..3b492035bf2 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageSendingOperations.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/SimpMessageSendingOperations.java @@ -107,7 +107,7 @@ public interface SimpMessageSendingOperations extends MessageSendingOperations headers, - MessagePostProcessor postProcessor) throws MessagingException; + void convertAndSendToUser(String user, String destination, Object payload, @Nullable Map headers, + @Nullable MessagePostProcessor postProcessor) throws MessagingException; } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java index af06e8439eb..6f456eb7a77 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/DefaultStompSession.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.core.ResolvableType; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageDeliveryException; import org.springframework.messaging.converter.MessageConversionException; @@ -243,7 +244,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { } @SuppressWarnings("unchecked") - private Message createMessage(StompHeaderAccessor accessor, Object payload) { + private Message createMessage(StompHeaderAccessor accessor, @Nullable Object payload) { accessor.updateSimpMessageHeadersFromStompHeaders(); Message message; if (payload == null) { @@ -635,7 +636,7 @@ public class DefaultStompSession implements ConnectionHandlingStompSession { } @Override - public void unsubscribe(StompHeaders stompHeaders) { + public void unsubscribe(@Nullable StompHeaders stompHeaders) { String id = this.headers.getId(); DefaultStompSession.this.subscriptions.remove(id); DefaultStompSession.this.unsubscribe(id, stompHeaders); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClient.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClient.java index 958556196af..345b50735f8 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClient.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/ReactorNettyTcpStompClient.java @@ -16,6 +16,7 @@ package org.springframework.messaging.simp.stomp; +import org.springframework.lang.Nullable; import org.springframework.messaging.tcp.TcpOperations; import org.springframework.messaging.tcp.reactor.ReactorNettyTcpClient; import org.springframework.util.Assert; @@ -75,7 +76,7 @@ public class ReactorNettyTcpStompClient extends StompClientSupport { * @param handler the handler for the STOMP session * @return ListenableFuture for access to the session when ready for use */ - public ListenableFuture connect(StompHeaders connectHeaders, StompSessionHandler handler) { + public ListenableFuture connect(@Nullable StompHeaders connectHeaders, StompSessionHandler handler) { ConnectionHandlingStompSession session = createSession(connectHeaders, handler); this.tcpClient.connect(session); return session.getSessionFuture(); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java index ef34abfe741..e3534f60feb 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompBrokerRelayMessageHandler.java @@ -24,6 +24,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageDeliveryException; @@ -594,7 +595,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler * Invoked when any TCP connectivity issue is detected, i.e. failure to establish * the TCP connection, failure to send a message, missed heartbeat, etc. */ - protected void handleTcpConnectionFailure(String error, Throwable ex) { + protected void handleTcpConnectionFailure(String error, @Nullable Throwable ex) { if (logger.isErrorEnabled()) { logger.error("TCP connection failure in session " + this.sessionId + ": " + error, ex); } @@ -943,7 +944,7 @@ public class StompBrokerRelayMessageHandler extends AbstractBrokerMessageHandler } @Override - protected void handleTcpConnectionFailure(String errorMessage, Throwable ex) { + protected void handleTcpConnectionFailure(String errorMessage, @Nullable Throwable ex) { super.handleTcpConnectionFailure(errorMessage, ex); publishBrokerUnavailableEvent(); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java index b97f73d045f..a053b3059c5 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompDecoder.java @@ -106,7 +106,7 @@ public class StompDecoder { * @return the decoded messages, or an empty list if none * @throws StompConversionException raised in case of decoding issues */ - public List> decode(ByteBuffer byteBuffer, MultiValueMap partialMessageHeaders) { + public List> decode(ByteBuffer byteBuffer, @Nullable MultiValueMap partialMessageHeaders) { List> messages = new ArrayList<>(); while (byteBuffer.hasRemaining()) { Message message = decodeMessage(byteBuffer, partialMessageHeaders); diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java index 2dc707db955..c4630a1930b 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaderAccessor.java @@ -112,7 +112,7 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor { /** * A constructor for creating message headers from a parsed STOMP frame. */ - StompHeaderAccessor(StompCommand command, Map> externalSourceHeaders) { + StompHeaderAccessor(StompCommand command, @Nullable Map> externalSourceHeaders) { super(command.getMessageType(), externalSourceHeaders); setHeader(COMMAND_HEADER, command); updateSimpMessageHeadersFromStompHeaders(); @@ -419,7 +419,7 @@ public class StompHeaderAccessor extends SimpMessageHeaderAccessor { } @Override - public String getDetailedLogMessage(Object payload) { + public String getDetailedLogMessage(@Nullable Object payload) { if (isHeartbeat()) { return "heart-beat in session " + getSessionId(); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaders.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaders.java index 8f91741e73b..11db537502f 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaders.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompHeaders.java @@ -25,6 +25,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MimeType; @@ -396,7 +397,7 @@ public class StompHeaders implements MultiValueMap, Serializable * @see #set(String, String) */ @Override - public void add(String headerName, String headerValue) { + public void add(String headerName, @Nullable String headerValue) { List headerValues = headers.computeIfAbsent(headerName, k -> new LinkedList<>()); headerValues.add(headerValue); } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java index ef2a8563c4e..9f562d80056 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/stomp/StompSession.java @@ -159,7 +159,7 @@ public interface StompSession { * to send to the server. *

Note: There is no need to set the subscription id. */ - void unsubscribe(StompHeaders stompHeaders); + void unsubscribe(@Nullable StompHeaders stompHeaders); } } diff --git a/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java b/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java index 58444f77d03..1b442698df8 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/support/AbstractMessageChannel.java @@ -178,7 +178,7 @@ public abstract class AbstractMessageChannel implements MessageChannel, Intercep } } - public void triggerAfterSendCompletion(Message message, MessageChannel channel, boolean sent, Exception ex) { + public void triggerAfterSendCompletion(Message message, MessageChannel channel, boolean sent, @Nullable Exception ex) { for (int i = this.sendInterceptorIndex; i >= 0; i--) { ChannelInterceptor interceptor = interceptors.get(i); try { @@ -212,7 +212,7 @@ public abstract class AbstractMessageChannel implements MessageChannel, Intercep return message; } - public void triggerAfterReceiveCompletion(Message message, MessageChannel channel, Exception ex) { + public void triggerAfterReceiveCompletion(@Nullable Message message, MessageChannel channel, @Nullable Exception ex) { for (int i = this.receiveInterceptorIndex; i >= 0; i--) { ChannelInterceptor interceptor = interceptors.get(i); try { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java b/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java index 8aaa06c45f7..4964c8b57a2 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/support/ExecutorSubscribableChannel.java @@ -169,7 +169,7 @@ public class ExecutorSubscribableChannel extends AbstractSubscribableChannel { return message; } - private void triggerAfterMessageHandled(Message message, Exception ex) { + private void triggerAfterMessageHandled(Message message, @Nullable Exception ex) { for (int i = this.interceptorIndex; i >= 0; i--) { ExecutorChannelInterceptor interceptor = executorInterceptors.get(i); try { diff --git a/spring-messaging/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java b/spring-messaging/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java index da6ab0043cc..54b322dd988 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/support/MessageHeaderAccessor.java @@ -488,7 +488,7 @@ public class MessageHeaderAccessor { * @param payload the payload that corresponds to the headers. * @return the message */ - public String getDetailedLogMessage(Object payload) { + public String getDetailedLogMessage(@Nullable Object payload) { return "headers=" + this.headers.toString() + getDetailedPayloadLogMessage(payload); } diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java index 8e6cb4fd45a..bda31c9d64b 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/ConfigurableJtaPlatform.java @@ -27,6 +27,7 @@ import javax.transaction.UserTransaction; import org.hibernate.TransactionException; import org.hibernate.engine.transaction.jta.platform.spi.JtaPlatform; +import org.springframework.lang.Nullable; import org.springframework.transaction.jta.UserTransactionAdapter; import org.springframework.util.Assert; @@ -54,7 +55,7 @@ class ConfigurableJtaPlatform implements JtaPlatform { * @param ut the JTA UserTransaction reference (optional) * @param tsr the JTA 1.1 TransactionSynchronizationRegistry (optional) */ - public ConfigurableJtaPlatform(TransactionManager tm, UserTransaction ut, TransactionSynchronizationRegistry tsr) { + public ConfigurableJtaPlatform(TransactionManager tm, @Nullable UserTransaction ut, @Nullable TransactionSynchronizationRegistry tsr) { Assert.notNull(tm, "TransactionManager reference must not be null"); this.transactionManager = tm; this.userTransaction = (ut != null ? ut : new UserTransactionAdapter(tm)); diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java index df5f1bdee95..68737ed5348 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTemplate.java @@ -442,7 +442,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public T get(final Class entityClass, final Serializable id, final LockMode lockMode) + public T get(final Class entityClass, final Serializable id, @Nullable final LockMode lockMode) throws DataAccessException { return executeWithNativeSession(new HibernateCallback() { @@ -464,7 +464,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public Object get(final String entityName, final Serializable id, final LockMode lockMode) + public Object get(final String entityName, final Serializable id, @Nullable final LockMode lockMode) throws DataAccessException { return executeWithNativeSession(new HibernateCallback() { @@ -486,7 +486,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public T load(final Class entityClass, final Serializable id, final LockMode lockMode) + public T load(final Class entityClass, final Serializable id, @Nullable final LockMode lockMode) throws DataAccessException { return executeWithNativeSession(new HibernateCallback() { @@ -508,7 +508,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public Object load(final String entityName, final Serializable id, final LockMode lockMode) + public Object load(final String entityName, final Serializable id, @Nullable final LockMode lockMode) throws DataAccessException { return executeWithNativeSession(new HibernateCallback() { @@ -555,7 +555,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public void refresh(final Object entity, final LockMode lockMode) throws DataAccessException { + public void refresh(final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { @@ -668,7 +668,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public void update(final Object entity, final LockMode lockMode) throws DataAccessException { + public void update(final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { @@ -688,7 +688,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public void update(final String entityName, final Object entity, final LockMode lockMode) + public void update(final String entityName, final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { @@ -810,7 +810,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public void delete(final Object entity, final LockMode lockMode) throws DataAccessException { + public void delete(final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { @Override public Object doInHibernate(Session session) throws HibernateException { @@ -830,7 +830,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean } @Override - public void delete(final String entityName, final Object entity, final LockMode lockMode) + public void delete(final String entityName, final Object entity, @Nullable final LockMode lockMode) throws DataAccessException { executeWithNativeSession(new HibernateCallback() { @@ -1074,7 +1074,7 @@ public class HibernateTemplate implements HibernateOperations, InitializingBean @Override @SuppressWarnings("deprecation") public List findByExample( - final String entityName, final T exampleEntity, final int firstResult, final int maxResults) + @Nullable final String entityName, final T exampleEntity, final int firstResult, final int maxResults) throws DataAccessException { Assert.notNull(exampleEntity, "Example entity must not be null"); diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java index 325abb24df0..14d4d809ea6 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/HibernateTransactionManager.java @@ -785,7 +785,7 @@ public class HibernateTransactionManager extends AbstractPlatformTransactionMana this.newSession = false; } - public void setSessionHolder(SessionHolder sessionHolder) { + public void setSessionHolder(@Nullable SessionHolder sessionHolder) { this.sessionHolder = sessionHolder; this.newSessionHolder = false; this.newSession = false; diff --git a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java index 99f6a4bb3cb..02cbb73d760 100644 --- a/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/hibernate5/LocalSessionFactoryBean.java @@ -43,6 +43,7 @@ import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternUtils; import org.springframework.core.task.AsyncTaskExecutor; import org.springframework.core.type.filter.TypeFilter; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -371,7 +372,7 @@ public class LocalSessionFactoryBean extends HibernateExceptionTranslator * @param resourceLoader the ResourceLoader to use (never {@code null}) */ @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader); } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java index af2f6eeb177..a3599d736fd 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/ExtendedEntityManagerCreator.java @@ -219,7 +219,7 @@ public abstract class ExtendedEntityManagerCreator { */ private static EntityManager createProxy( EntityManager rawEm, @Nullable Class emIfc, @Nullable ClassLoader cl, - PersistenceExceptionTranslator exceptionTranslator, @Nullable Boolean jta, + @Nullable PersistenceExceptionTranslator exceptionTranslator, @Nullable Boolean jta, boolean containerManaged, boolean synchronizedWithTransaction) { Assert.notNull(rawEm, "EntityManager must not be null"); diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java index ebd234f795b..19161fb16ab 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/JpaTransactionManager.java @@ -622,7 +622,7 @@ public class JpaTransactionManager extends AbstractPlatformTransactionManager private Object transactionData; public void setEntityManagerHolder( - EntityManagerHolder entityManagerHolder, boolean newEntityManagerHolder) { + @Nullable EntityManagerHolder entityManagerHolder, boolean newEntityManagerHolder) { this.entityManagerHolder = entityManagerHolder; this.newEntityManagerHolder = newEntityManagerHolder; } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java index 8127991ecd6..e164a1c8040 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/LocalContainerEntityManagerFactoryBean.java @@ -30,6 +30,7 @@ import org.springframework.context.weaving.LoadTimeWeaverAware; import org.springframework.core.io.ResourceLoader; import org.springframework.instrument.classloading.LoadTimeWeaver; import org.springframework.jdbc.datasource.lookup.SingleDataSourceLookup; +import org.springframework.lang.Nullable; import org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager; import org.springframework.orm.jpa.persistenceunit.PersistenceUnitManager; import org.springframework.orm.jpa.persistenceunit.PersistenceUnitPostProcessor; @@ -311,7 +312,7 @@ public class LocalContainerEntityManagerFactoryBean extends AbstractEntityManage } @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.internalPersistenceUnitManager.setResourceLoader(resourceLoader); } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java index 77a8435d292..3c660bda7e8 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/DefaultPersistenceUnitManager.java @@ -411,7 +411,7 @@ public class DefaultPersistenceUnitManager } @Override - public void setResourceLoader(ResourceLoader resourceLoader) { + public void setResourceLoader(@Nullable ResourceLoader resourceLoader) { this.resourcePatternResolver = ResourcePatternUtils.getResourcePatternResolver(resourceLoader); this.componentsIndex = CandidateComponentsIndexLoader.loadIndex(resourceLoader.getClassLoader()); } diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java b/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java index 05d9eb53b24..b43b972bac7 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/support/PersistenceAnnotationBeanPostProcessor.java @@ -379,7 +379,7 @@ public class PersistenceAnnotationBeanPostProcessor } - private InjectionMetadata findPersistenceMetadata(String beanName, final Class clazz, PropertyValues pvs) { + private InjectionMetadata findPersistenceMetadata(String beanName, final Class clazz, @Nullable PropertyValues pvs) { // Fall back to class name as cache key, for backwards compatibility with custom callers. String cacheKey = (StringUtils.hasLength(beanName) ? beanName : clazz.getName()); // Quick check on the concurrent map first, with minimal locking. @@ -631,7 +631,7 @@ public class PersistenceAnnotationBeanPostProcessor private Properties properties; - public PersistenceElement(Member member, AnnotatedElement ae, PropertyDescriptor pd) { + public PersistenceElement(Member member, AnnotatedElement ae, @Nullable PropertyDescriptor pd) { super(member, pd); PersistenceContext pc = ae.getAnnotation(PersistenceContext.class); PersistenceUnit pu = ae.getAnnotation(PersistenceUnit.class); 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 37523cf1437..a553093b8ef 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 @@ -326,7 +326,7 @@ public class HibernateJpaDialect extends DefaultJpaDialect { private final Integer previousIsolationLevel; public SessionTransactionData( - Session session, FlushMode previousFlushMode, Connection preparedCon, Integer previousIsolationLevel) { + Session session, FlushMode previousFlushMode, @Nullable Connection preparedCon, @Nullable Integer previousIsolationLevel) { this.session = session; this.previousFlushMode = previousFlushMode; this.preparedCon = preparedCon; 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 84bca603079..e365209b412 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 @@ -666,7 +666,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } @Override - public void marshal(Object graph, Result result, MimeContainer mimeContainer) throws XmlMappingException { + public void marshal(Object graph, Result result, @Nullable MimeContainer mimeContainer) throws XmlMappingException { try { Marshaller marshaller = createMarshaller(); if (this.mtomEnabled && mimeContainer != null) { @@ -753,7 +753,7 @@ public class Jaxb2Marshaller implements MimeMarshaller, MimeUnmarshaller, Generi } @Override - public Object unmarshal(Source source, MimeContainer mimeContainer) throws XmlMappingException { + public Object unmarshal(Source source, @Nullable MimeContainer mimeContainer) throws XmlMappingException { source = processSource(source); try { diff --git a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java index d66c321d15d..cb7132371ad 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeMarshaller.java @@ -19,6 +19,7 @@ package org.springframework.oxm.mime; import java.io.IOException; import javax.xml.transform.Result; +import org.springframework.lang.Nullable; import org.springframework.oxm.Marshaller; import org.springframework.oxm.XmlMappingException; @@ -42,6 +43,6 @@ public interface MimeMarshaller extends Marshaller { * @throws XmlMappingException if the given object cannot be marshalled to the result * @throws IOException if an I/O exception occurs */ - void marshal(Object graph, Result result, MimeContainer mimeContainer) throws XmlMappingException, IOException; + void marshal(Object graph, Result result, @Nullable MimeContainer mimeContainer) throws XmlMappingException, IOException; } diff --git a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java index 1ad90e182c7..1c405491b49 100644 --- a/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java +++ b/spring-oxm/src/main/java/org/springframework/oxm/mime/MimeUnmarshaller.java @@ -19,6 +19,7 @@ package org.springframework.oxm.mime; import java.io.IOException; import javax.xml.transform.Source; +import org.springframework.lang.Nullable; import org.springframework.oxm.Unmarshaller; import org.springframework.oxm.XmlMappingException; @@ -42,6 +43,6 @@ public interface MimeUnmarshaller extends Unmarshaller { * @throws XmlMappingException if the given source cannot be mapped to an object * @throws IOException if an I/O Exception occurs */ - Object unmarshal(Source source, MimeContainer mimeContainer) throws XmlMappingException, IOException; + Object unmarshal(Source source, @Nullable MimeContainer mimeContainer) throws XmlMappingException, IOException; } 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 914e8d1d94c..ba9a89c4360 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 @@ -677,7 +677,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo marshalOutputStream(graph, outputStream, null); } - public void marshalOutputStream(Object graph, OutputStream outputStream, DataHolder dataHolder) + public void marshalOutputStream(Object graph, OutputStream outputStream, @Nullable DataHolder dataHolder) throws XmlMappingException, IOException { if (this.streamDriver != null) { @@ -693,7 +693,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo marshalWriter(graph, writer, null); } - public void marshalWriter(Object graph, Writer writer, DataHolder dataHolder) + public void marshalWriter(Object graph, Writer writer, @Nullable DataHolder dataHolder) throws XmlMappingException, IOException { if (this.streamDriver != null) { @@ -708,7 +708,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo * Marshals the given graph to the given XStream HierarchicalStreamWriter. * Converts exceptions using {@link #convertXStreamException}. */ - private void doMarshal(Object graph, HierarchicalStreamWriter streamWriter, DataHolder dataHolder) { + private void doMarshal(Object graph, HierarchicalStreamWriter streamWriter, @Nullable DataHolder dataHolder) { try { getXStream().marshal(graph, streamWriter, dataHolder); } @@ -785,7 +785,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo return unmarshalInputStream(inputStream, null); } - public Object unmarshalInputStream(InputStream inputStream, DataHolder dataHolder) throws XmlMappingException, IOException { + public Object unmarshalInputStream(InputStream inputStream, @Nullable DataHolder dataHolder) throws XmlMappingException, IOException { if (this.streamDriver != null) { return doUnmarshal(this.streamDriver.createReader(inputStream), dataHolder); } @@ -799,7 +799,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo return unmarshalReader(reader, null); } - public Object unmarshalReader(Reader reader, DataHolder dataHolder) throws XmlMappingException, IOException { + public Object unmarshalReader(Reader reader, @Nullable DataHolder dataHolder) throws XmlMappingException, IOException { return doUnmarshal(getDefaultDriver().createReader(reader), dataHolder); } @@ -807,7 +807,7 @@ public class XStreamMarshaller extends AbstractMarshaller implements BeanClassLo * Unmarshals the given graph to the given XStream HierarchicalStreamWriter. * Converts exceptions using {@link #convertXStreamException}. */ - private Object doUnmarshal(HierarchicalStreamReader streamReader, DataHolder dataHolder) { + private Object doUnmarshal(HierarchicalStreamReader streamReader, @Nullable DataHolder dataHolder) { try { return getXStream().unmarshal(streamReader, null, dataHolder); } diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java b/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java index c13ca8ffa8c..ba9511885e2 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockAsyncContext.java @@ -30,6 +30,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.BeanUtils; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.util.WebUtils; @@ -91,7 +92,7 @@ public class MockAsyncContext implements AsyncContext { } @Override - public void dispatch(ServletContext context, String path) { + public void dispatch(@Nullable ServletContext context, String path) { this.dispatchedPath = path; for (Runnable r : this.dispatchHandlers) { r.run(); diff --git a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java index 3dcca7305f3..d4f83429871 100644 --- a/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java +++ b/spring-test/src/main/java/org/springframework/mock/web/MockHttpServletRequest.java @@ -873,7 +873,7 @@ public class MockHttpServletRequest implements HttpServletRequest { } @Override - public AsyncContext startAsync(ServletRequest request, ServletResponse response) { + public AsyncContext startAsync(ServletRequest request, @Nullable ServletResponse response) { Assert.state(this.asyncSupported, "Async not supported"); this.asyncStarted = true; this.asyncContext = new MockAsyncContext(request, response); @@ -1088,7 +1088,7 @@ public class MockHttpServletRequest implements HttpServletRequest { return this.method; } - public void setPathInfo(String pathInfo) { + public void setPathInfo(@Nullable String pathInfo) { this.pathInfo = pathInfo; } diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java index 8cc28d99375..ee5f2a197be 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/StubWebApplicationContext.java @@ -303,7 +303,7 @@ class StubWebApplicationContext implements WebApplicationContext { //--------------------------------------------------------------------- @Override - public String getMessage(String code, @Nullable Object args[], String defaultMessage, Locale locale) { + public String getMessage(String code, @Nullable Object args[], @Nullable String defaultMessage, Locale locale) { return this.messageSource.getMessage(code, args, defaultMessage, locale); } @@ -400,13 +400,13 @@ class StubWebApplicationContext implements WebApplicationContext { } @Override - public Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName) { + public Object resolveDependency(DependencyDescriptor descriptor, @Nullable String requestingBeanName) { throw new UnsupportedOperationException("Dependency resolution not supported"); } @Override public Object resolveDependency(DependencyDescriptor descriptor, String requestingBeanName, - Set autowiredBeanNames, TypeConverter typeConverter) { + @Nullable Set autowiredBeanNames, @Nullable TypeConverter typeConverter) { throw new UnsupportedOperationException("Dependency resolution not supported"); } diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java b/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java index e9c89cf5401..29c976ba665 100644 --- a/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java +++ b/spring-tx/src/main/java/org/springframework/jca/cci/connection/CciLocalTransactionManager.java @@ -23,6 +23,7 @@ import javax.resource.cci.ConnectionFactory; import javax.resource.spi.LocalTransactionException; import org.springframework.beans.factory.InitializingBean; +import org.springframework.lang.Nullable; import org.springframework.transaction.CannotCreateTransactionException; import org.springframework.transaction.TransactionDefinition; import org.springframework.transaction.TransactionException; @@ -262,7 +263,7 @@ public class CciLocalTransactionManager extends AbstractPlatformTransactionManag private ConnectionHolder connectionHolder; - public void setConnectionHolder(ConnectionHolder connectionHolder) { + public void setConnectionHolder(@Nullable ConnectionHolder connectionHolder) { this.connectionHolder = connectionHolder; } diff --git a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java b/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java index 5480a95cb18..c3394e5989b 100644 --- a/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java +++ b/spring-tx/src/main/java/org/springframework/jca/cci/core/CciTemplate.java @@ -272,7 +272,7 @@ public class CciTemplate implements CciOperations { */ protected T doExecute( final InteractionSpec spec, final Record inputRecord, @Nullable final Record outputRecord, - final RecordExtractor outputExtractor) throws DataAccessException { + @Nullable final RecordExtractor outputExtractor) throws DataAccessException { return execute(new InteractionCallback() { @Override diff --git a/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java b/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java index 893e2d8c5cd..fe74955a8b3 100644 --- a/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java +++ b/spring-tx/src/main/java/org/springframework/jca/endpoint/AbstractMessageEndpointFactory.java @@ -226,7 +226,7 @@ public abstract class AbstractMessageEndpointFactory implements MessageEndpointF * sibling {@link #afterDelivery()} explicitly, as part of its own processing. */ @Override - public void beforeDelivery(Method method) throws ResourceException { + public void beforeDelivery(@Nullable Method method) throws ResourceException { this.beforeDeliveryCalled = true; try { this.transactionDelegate.beginTransaction(); diff --git a/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java b/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java index c8faca7f19a..5c892ced1bb 100644 --- a/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java +++ b/spring-tx/src/main/java/org/springframework/jca/work/SimpleTaskWorkManager.java @@ -32,6 +32,7 @@ import org.springframework.core.task.SyncTaskExecutor; import org.springframework.core.task.TaskExecutor; import org.springframework.core.task.TaskRejectedException; import org.springframework.core.task.TaskTimeoutException; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -94,7 +95,7 @@ public class SimpleTaskWorkManager implements WorkManager { } @Override - public void doWork(Work work, long startTimeout, ExecutionContext executionContext, WorkListener workListener) + public void doWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException { Assert.state(this.syncTaskExecutor != null, "No 'syncTaskExecutor' set"); @@ -107,7 +108,7 @@ public class SimpleTaskWorkManager implements WorkManager { } @Override - public long startWork(Work work, long startTimeout, ExecutionContext executionContext, WorkListener workListener) + public long startWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException { Assert.state(this.asyncTaskExecutor != null, "No 'asyncTaskExecutor' set"); @@ -120,7 +121,7 @@ public class SimpleTaskWorkManager implements WorkManager { } @Override - public void scheduleWork(Work work, long startTimeout, ExecutionContext executionContext, WorkListener workListener) + public void scheduleWork(Work work, long startTimeout, @Nullable ExecutionContext executionContext, @Nullable WorkListener workListener) throws WorkException { Assert.state(this.asyncTaskExecutor != null, "No 'asyncTaskExecutor' set"); 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 5fa6cfe7de3..fbcc3ec1242 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 @@ -498,8 +498,8 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * @see #prepareTransactionStatus */ protected final DefaultTransactionStatus prepareTransactionStatus( - TransactionDefinition definition, Object transaction, boolean newTransaction, - boolean newSynchronization, boolean debug, Object suspendedResources) { + TransactionDefinition definition, @Nullable Object transaction, boolean newTransaction, + boolean newSynchronization, boolean debug, @Nullable Object suspendedResources) { DefaultTransactionStatus status = newTransactionStatus( definition, transaction, newTransaction, newSynchronization, debug, suspendedResources); @@ -512,7 +512,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran */ protected DefaultTransactionStatus newTransactionStatus( TransactionDefinition definition, Object transaction, boolean newTransaction, - boolean newSynchronization, boolean debug, Object suspendedResources) { + boolean newSynchronization, boolean debug, @Nullable Object suspendedResources) { boolean actualNewSynchronization = newSynchronization && !TransactionSynchronizationManager.isSynchronizationActive(); @@ -610,7 +610,7 @@ public abstract class AbstractPlatformTransactionManager implements PlatformTran * @see #doResume * @see #suspend */ - protected final void resume(Object transaction, @Nullable SuspendedResourcesHolder resourcesHolder) + protected final void resume(@Nullable Object transaction, @Nullable SuspendedResourcesHolder resourcesHolder) throws TransactionException { if (resourcesHolder != null) { diff --git a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractTransactionStatus.java b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractTransactionStatus.java index 7c15a7e0db1..af9463f084e 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/support/AbstractTransactionStatus.java +++ b/spring-tx/src/main/java/org/springframework/transaction/support/AbstractTransactionStatus.java @@ -120,7 +120,7 @@ public abstract class AbstractTransactionStatus implements TransactionStatus { * Set a savepoint for this transaction. Useful for PROPAGATION_NESTED. * @see org.springframework.transaction.TransactionDefinition#PROPAGATION_NESTED */ - protected void setSavepoint(Object savepoint) { + protected void setSavepoint(@Nullable Object savepoint) { this.savepoint = savepoint; } diff --git a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java index 163d258dc8a..255a075a58a 100644 --- a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java +++ b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java @@ -49,7 +49,7 @@ public class ContentDisposition { /** * Private constructor. See static factory methods in this class. */ - private ContentDisposition(String type, String name, String filename, Charset charset, Long size) { + private ContentDisposition(@Nullable String type, @Nullable String name, @Nullable String filename, @Nullable Charset charset, @Nullable Long size) { this.type = type; this.name = name; this.filename = filename; diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index a8833f354f0..e7b91481f1d 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -1333,7 +1333,7 @@ public class HttpHeaders implements MultiValueMap, Serializable * @see #set(String, String) */ @Override - public void add(String headerName, String headerValue) { + public void add(String headerName, @Nullable String headerValue) { List headerValues = this.headers.computeIfAbsent(headerName, k -> new LinkedList<>()); headerValues.add(headerValue); } diff --git a/spring-web/src/main/java/org/springframework/http/HttpRange.java b/spring-web/src/main/java/org/springframework/http/HttpRange.java index 4c6131dd0d9..b118d7e4245 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpRange.java +++ b/spring-web/src/main/java/org/springframework/http/HttpRange.java @@ -26,6 +26,7 @@ import java.util.List; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.core.io.support.ResourceRegion; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; @@ -213,7 +214,7 @@ public abstract class HttpRange { private final Long lastPos; - public ByteRange(long firstPos, Long lastPos) { + public ByteRange(long firstPos, @Nullable Long lastPos) { assertPositions(firstPos, lastPos); this.firstPos = firstPos; this.lastPos = lastPos; 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 fe15a954667..8c473e86647 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 @@ -86,7 +86,7 @@ public class EncoderHttpMessageWriter implements HttpMessageWriter { @Override - public boolean canWrite(ResolvableType elementType, MediaType mediaType) { + public boolean canWrite(ResolvableType elementType, @Nullable MediaType mediaType) { return this.encoder.canEncode(elementType, mediaType); } @@ -139,7 +139,7 @@ public class EncoderHttpMessageWriter implements HttpMessageWriter { // Server side only... @Override - public Mono write(Publisher inputStream, ResolvableType actualType, + public Mono write(Publisher inputStream, @Nullable ResolvableType actualType, ResolvableType elementType, @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java index fb8f2edc6ec..6a02983d037 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/FormHttpMessageWriter.java @@ -76,7 +76,7 @@ public class FormHttpMessageWriter implements HttpMessageWriter { * @param mediaType the media type for the write, possibly {@code null} * @return {@code true} if writable, {@code false} otherwise */ - boolean canWrite(ResolvableType elementType, MediaType mediaType); + boolean canWrite(ResolvableType elementType, @Nullable MediaType mediaType); /** * Write an given stream of object to the output message. @@ -85,7 +85,7 @@ public interface HttpMessageWriter { * @param response the current response * @return a {@link Mono} that indicates completion of writing or error */ - default Mono write(Publisher inputStream, ResolvableType actualType, + default Mono write(Publisher inputStream, @Nullable ResolvableType actualType, ResolvableType elementType, @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { 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 2fc745f57dc..ae54f198395 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 @@ -93,7 +93,7 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter { @Override - public boolean canWrite(ResolvableType elementType, MediaType mediaType) { + public boolean canWrite(ResolvableType elementType, @Nullable MediaType mediaType) { return this.encoder.canEncode(elementType, mediaType); } @@ -152,7 +152,7 @@ public class ResourceHttpMessageWriter implements HttpMessageWriter { return OptionalLong.empty(); } - private static Optional> zeroCopy(Resource resource, ResourceRegion region, + private static Optional> zeroCopy(Resource resource, @Nullable ResourceRegion region, ReactiveHttpOutputMessage message) { if (message instanceof ZeroCopyHttpOutputMessage) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java index 39dc684f9a7..48c737e66c1 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/ServerSentEventHttpMessageWriter.java @@ -87,7 +87,7 @@ public class ServerSentEventHttpMessageWriter implements HttpMessageWriter write(Publisher input, ResolvableType actualType, ResolvableType elementType, + public Mono write(Publisher input, @Nullable ResolvableType actualType, ResolvableType elementType, @Nullable MediaType mediaType, ServerHttpRequest request, ServerHttpResponse response, Map hints) { diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java index d63fb8c987c..177317afc56 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/Jackson2CodecSupport.java @@ -33,6 +33,7 @@ import com.fasterxml.jackson.databind.type.TypeFactory; import org.springframework.core.GenericTypeResolver; import org.springframework.core.MethodParameter; import org.springframework.core.ResolvableType; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; import org.springframework.util.ObjectUtils; @@ -80,7 +81,7 @@ public abstract class Jackson2CodecSupport { return (mimeType == null || this.mimeTypes.stream().anyMatch(m -> m.isCompatibleWith(mimeType))); } - protected JavaType getJavaType(Type type, Class contextClass) { + protected JavaType getJavaType(Type type, @Nullable Class contextClass) { TypeFactory typeFactory = this.objectMapper.getTypeFactory(); return typeFactory.constructType(GenericTypeResolver.resolveType(type, contextClass)); } 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 8437aecea7c..2f578a126ff 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 @@ -83,7 +83,7 @@ public class Jackson2JsonDecoder extends Jackson2CodecSupport implements HttpMes } @Override - public Flux decode(Publisher input, ResolvableType elementType, + public Flux decode(Publisher input, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { return decodeInternal(this.fluxDecoder, input, elementType, mimeType, hints); 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 b0b212cd50b..a13b1fc8d73 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 @@ -97,7 +97,7 @@ class JsonObjectDecoder extends AbstractDecoder { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { return Flux.from(inputStream) diff --git a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java index 6e3c2da69ac..bc3600628df 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java +++ b/spring-web/src/main/java/org/springframework/http/codec/multipart/MultipartHttpMessageWriter.java @@ -110,7 +110,7 @@ public class MultipartHttpMessageWriter implements HttpMessageWriter { } @Override - public Flux decode(Publisher inputStream, ResolvableType elementType, + public Flux decode(Publisher inputStream, @Nullable ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { Class outputClass = elementType.getRawClass(); 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 c80be39a94a..6283bce6191 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 @@ -71,7 +71,7 @@ public abstract class AbstractGenericHttpMessageConverter extends AbstractHtt } @Override - public boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType) { + public boolean canWrite(@Nullable Type type, @Nullable Class clazz, @Nullable MediaType mediaType) { return canWrite(clazz, mediaType); } 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 cb35482dbd1..db1d2694bd0 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 @@ -191,7 +191,7 @@ public abstract class AbstractHttpMessageConverter implements HttpMessageConv * Future implementations might add some default behavior, however. */ @Override - public final T read(Class clazz, HttpInputMessage inputMessage) throws IOException { + public final T read(@Nullable Class clazz, HttpInputMessage inputMessage) throws IOException { return readInternal(clazz, inputMessage); } 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 705fbbbdd1d..13438c65ff7 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 @@ -159,7 +159,7 @@ public class BufferedImageHttpMessageConverter implements HttpMessageConverter clazz, HttpInputMessage inputMessage) + public BufferedImage read(@Nullable Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { ImageInputStream imageInputStream = null; diff --git a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java index a6f217ecb18..c65f9f2e7a6 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/FormHttpMessageConverter.java @@ -236,7 +236,7 @@ public class FormHttpMessageConverter implements HttpMessageConverter read(Class> clazz, + public MultiValueMap read(@Nullable Class> clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException { MediaType contentType = inputMessage.getHeaders().getContentType(); diff --git a/spring-web/src/main/java/org/springframework/http/converter/GenericHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/GenericHttpMessageConverter.java index 59e42c5f7a0..b542ac73d86 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/GenericHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/GenericHttpMessageConverter.java @@ -79,7 +79,7 @@ public interface GenericHttpMessageConverter extends HttpMessageConverter * @return {@code true} if writable; {@code false} otherwise * @since 4.2 */ - boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType); + boolean canWrite(@Nullable Type type, @Nullable Class clazz, @Nullable MediaType mediaType); /** * Write an given object to the given output message. diff --git a/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java index bfdd8741ff4..0de618ad396 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/HttpMessageConverter.java @@ -66,7 +66,7 @@ public interface HttpMessageConverter { * @throws IOException in case of I/O errors * @throws HttpMessageNotReadableException in case of conversion errors */ - T read(Class clazz, HttpInputMessage inputMessage) + T read(@Nullable Class clazz, HttpInputMessage inputMessage) throws IOException, HttpMessageNotReadableException; /** diff --git a/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java index 99aa5f45786..e8473e75cb6 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ResourceRegionHttpMessageConverter.java @@ -97,7 +97,7 @@ public class ResourceRegionHttpMessageConverter extends AbstractGenericHttpMessa } @Override - public boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType) { + public boolean canWrite(@Nullable Type type, @Nullable Class clazz, @Nullable MediaType mediaType) { if (!(type instanceof ParameterizedType)) { return ResourceRegion.class.isAssignableFrom((Class) type); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/protobuf/ProtobufHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/protobuf/ProtobufHttpMessageConverter.java index 07fea862bb4..f5dd634f97d 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/protobuf/ProtobufHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/protobuf/ProtobufHttpMessageConverter.java @@ -317,7 +317,7 @@ public class ProtobufHttpMessageConverter extends AbstractHttpMessageConverter * does not convert collections to XML. */ @Override - public boolean canWrite(@Nullable Type type, Class clazz, @Nullable MediaType mediaType) { + public boolean canWrite(@Nullable Type type, @Nullable Class clazz, @Nullable MediaType mediaType) { return false; } diff --git a/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java b/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java index 4ee7cf6f803..e85a871375e 100644 --- a/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java +++ b/spring-web/src/main/java/org/springframework/web/accept/AbstractMappingContentNegotiationStrategy.java @@ -67,7 +67,7 @@ public abstract class AbstractMappingContentNegotiationStrategy extends MappingM * an already extracted key. * @since 3.2.16 */ - public List resolveMediaTypeKey(NativeWebRequest webRequest, String key) + public List resolveMediaTypeKey(@Nullable NativeWebRequest webRequest, String key) throws HttpMediaTypeNotAcceptableException { if (StringUtils.hasText(key)) { 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 e3c5fff8618..9fcd2a14638 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 @@ -96,7 +96,7 @@ public class EscapedErrors implements Errors { } @Override - public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { this.source.reject(errorCode, errorArgs, defaultMessage); } 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 b7c9ccf56cb..db2d7b79b34 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 @@ -50,7 +50,7 @@ public class DefaultDataBinderFactory implements WebDataBinderFactory { @Override @SuppressWarnings("deprecation") public final WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, - String objectName) throws Exception { + @Nullable String objectName) throws Exception { WebDataBinder dataBinder = createBinderInstance(target, objectName, webRequest); if (this.initializer != null) { diff --git a/spring-web/src/main/java/org/springframework/web/bind/support/WebDataBinderFactory.java b/spring-web/src/main/java/org/springframework/web/bind/support/WebDataBinderFactory.java index 1e2d3693000..45c1b0b168f 100644 --- a/spring-web/src/main/java/org/springframework/web/bind/support/WebDataBinderFactory.java +++ b/spring-web/src/main/java/org/springframework/web/bind/support/WebDataBinderFactory.java @@ -36,6 +36,6 @@ public interface WebDataBinderFactory { * @return the created {@link WebDataBinder} instance, never null * @throws Exception raised if the creation and initialization of the data binder fails */ - WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, String objectName) throws Exception; + WebDataBinder createBinder(NativeWebRequest webRequest, @Nullable Object target, @Nullable String objectName) throws Exception; } 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 7aaedfec332..d6869597dce 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 @@ -98,7 +98,7 @@ public class WebExchangeBindException extends ServerWebInputException implements } @Override - public void reject(String errorCode, @Nullable Object[] errorArgs, String defaultMessage) { + public void reject(String errorCode, @Nullable Object[] errorArgs, @Nullable String defaultMessage) { this.bindingResult.reject(errorCode, errorArgs, defaultMessage); } diff --git a/spring-web/src/main/java/org/springframework/web/client/RestOperations.java b/spring-web/src/main/java/org/springframework/web/client/RestOperations.java index 4d93d9e6599..a9375bc198a 100644 --- a/spring-web/src/main/java/org/springframework/web/client/RestOperations.java +++ b/spring-web/src/main/java/org/springframework/web/client/RestOperations.java @@ -593,8 +593,8 @@ public interface RestOperations { * @return an arbitrary object, as returned by the {@link ResponseExtractor} */ @Nullable - T execute(String url, HttpMethod method, RequestCallback requestCallback, - ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException; + T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor, Object... uriVariables) throws RestClientException; /** * Execute the HTTP method to the given URI template, preparing the request with the @@ -608,8 +608,8 @@ public interface RestOperations { * @return an arbitrary object, as returned by the {@link ResponseExtractor} */ @Nullable - T execute(String url, HttpMethod method, RequestCallback requestCallback, - ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException; + T execute(String url, HttpMethod method, @Nullable RequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor, Map uriVariables) throws RestClientException; /** * Execute the HTTP method to the given URL, preparing the request with the @@ -621,7 +621,7 @@ public interface RestOperations { * @return an arbitrary object, as returned by the {@link ResponseExtractor} */ @Nullable - T execute(URI url, HttpMethod method, RequestCallback requestCallback, - ResponseExtractor responseExtractor) throws RestClientException; + T execute(URI url, HttpMethod method, @Nullable RequestCallback requestCallback, + @Nullable ResponseExtractor responseExtractor) throws RestClientException; } diff --git a/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java index 6ddb31c48da..87d344c1002 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/FacesWebRequest.java @@ -23,6 +23,7 @@ import java.util.Map; import javax.faces.context.ExternalContext; import javax.faces.context.FacesContext; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -151,12 +152,12 @@ public class FacesWebRequest extends FacesRequestAttributes implements NativeWeb } @Override - public boolean checkNotModified(String eTag) { + public boolean checkNotModified(@Nullable String eTag) { return false; } @Override - public boolean checkNotModified(String etag, long lastModifiedTimestamp) { + public boolean checkNotModified(@Nullable String etag, long lastModifiedTimestamp) { return false; } diff --git a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java index ebc46b34913..900b1fbf7aa 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/ServletWebRequest.java @@ -35,6 +35,7 @@ import javax.servlet.http.HttpSession; import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -207,7 +208,7 @@ public class ServletWebRequest extends ServletRequestAttributes implements Nativ } @Override - public boolean checkNotModified(String etag, long lastModifiedTimestamp) { + public boolean checkNotModified(@Nullable String etag, long lastModifiedTimestamp) { HttpServletResponse response = getResponse(); if (this.notModified || HttpStatus.OK.value() != response.getStatus()) { return this.notModified; diff --git a/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java b/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java index 1db8b9735ba..213e7d21d75 100644 --- a/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java +++ b/spring-web/src/main/java/org/springframework/web/context/request/WebRequest.java @@ -234,7 +234,7 @@ public interface WebRequest extends RequestAttributes { * @return true if the request does not require further processing. * @since 4.2 */ - boolean checkNotModified(String etag, long lastModifiedTimestamp); + boolean checkNotModified(@Nullable String etag, long lastModifiedTimestamp); /** * Get a short description of this request, diff --git a/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java b/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java index 8531a4bd0dd..2b591711cf4 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/WebApplicationContextUtils.java @@ -180,7 +180,7 @@ public abstract class WebApplicationContextUtils { * @param beanFactory the BeanFactory to configure * @param sc the ServletContext that we're running within */ - public static void registerWebApplicationScopes(ConfigurableListableBeanFactory beanFactory, ServletContext sc) { + public static void registerWebApplicationScopes(ConfigurableListableBeanFactory beanFactory, @Nullable ServletContext sc) { beanFactory.registerScope(WebApplicationContext.SCOPE_REQUEST, new RequestScope()); beanFactory.registerScope(WebApplicationContext.SCOPE_SESSION, new SessionScope()); if (sc != null) { @@ -217,7 +217,7 @@ public abstract class WebApplicationContextUtils { * @param servletConfig the ServletConfig of the containing Portlet */ public static void registerEnvironmentBeans( - ConfigurableListableBeanFactory bf, ServletContext servletContext, ServletConfig servletConfig) { + ConfigurableListableBeanFactory bf, ServletContext servletContext, @Nullable ServletConfig servletConfig) { if (servletContext != null && !bf.containsBean(WebApplicationContext.SERVLET_CONTEXT_BEAN_NAME)) { bf.registerSingleton(WebApplicationContext.SERVLET_CONTEXT_BEAN_NAME, servletContext); diff --git a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java index 18f2b229e6b..107bf27aedf 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java @@ -123,7 +123,7 @@ public class InvocableHandlerMethod extends HandlerMethod { * @exception Exception raised if no suitable argument resolver can be found, * or if the method raised an exception */ - public Object invokeForRequest(NativeWebRequest request, ModelAndViewContainer mavContainer, + public Object invokeForRequest(NativeWebRequest request, @Nullable ModelAndViewContainer mavContainer, Object... providedArgs) throws Exception { Object[] args = getMethodArgumentValues(request, mavContainer, providedArgs); diff --git a/spring-web/src/main/java/org/springframework/web/server/ServerWebExchange.java b/spring-web/src/main/java/org/springframework/web/server/ServerWebExchange.java index 874c79f6840..1e0c70dd949 100644 --- a/spring-web/src/main/java/org/springframework/web/server/ServerWebExchange.java +++ b/spring-web/src/main/java/org/springframework/web/server/ServerWebExchange.java @@ -27,6 +27,7 @@ import reactor.core.publisher.Mono; import org.springframework.http.codec.multipart.Part; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.MultiValueMap; /** @@ -137,7 +138,7 @@ public interface ServerWebExchange { * determined for the underlying resource * @return true if the request does not require further processing. */ - boolean checkNotModified(String etag, Instant lastModified); + boolean checkNotModified(@Nullable String etag, Instant lastModified); /** diff --git a/spring-web/src/main/java/org/springframework/web/server/ServerWebExchangeDecorator.java b/spring-web/src/main/java/org/springframework/web/server/ServerWebExchangeDecorator.java index f58b7eb17d2..2df1625ff4e 100644 --- a/spring-web/src/main/java/org/springframework/web/server/ServerWebExchangeDecorator.java +++ b/spring-web/src/main/java/org/springframework/web/server/ServerWebExchangeDecorator.java @@ -25,6 +25,7 @@ import reactor.core.publisher.Mono; import org.springframework.http.codec.multipart.Part; 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.MultiValueMap; @@ -115,7 +116,7 @@ public class ServerWebExchangeDecorator implements ServerWebExchange { } @Override - public boolean checkNotModified(String etag, Instant lastModified) { + public boolean checkNotModified(@Nullable String etag, Instant lastModified) { return getDelegate().checkNotModified(etag, lastModified); } diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java b/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java index bb8e75f712f..c2c52eef9e9 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/DefaultServerWebExchange.java @@ -39,6 +39,7 @@ import org.springframework.http.codec.ServerCodecConfigurer; import org.springframework.http.codec.multipart.Part; 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.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; @@ -215,7 +216,7 @@ public class DefaultServerWebExchange implements ServerWebExchange { } @Override - public boolean checkNotModified(String etag, Instant lastModified) { + public boolean checkNotModified(@Nullable String etag, Instant lastModified) { HttpStatus status = getResponse().getStatusCode(); if (this.notModified || (status != null && !HttpStatus.OK.equals(status))) { return this.notModified; diff --git a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java index c21c668e74e..9cbb84be575 100644 --- a/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java +++ b/spring-web/src/main/java/org/springframework/web/util/UriComponentsBuilder.java @@ -155,7 +155,7 @@ public class UriComponentsBuilder implements UriBuilder, Cloneable { * @param path the path to initialize with * @return the new {@code UriComponentsBuilder} */ - public static UriComponentsBuilder fromPath(String path) { + public static UriComponentsBuilder fromPath(@Nullable String path) { UriComponentsBuilder builder = new UriComponentsBuilder(); builder.path(path); return builder; diff --git a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java index 919782b8eca..0f31b915712 100644 --- a/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java +++ b/spring-web/src/main/java/org/springframework/web/util/pattern/PathPattern.java @@ -517,7 +517,7 @@ public class PathPattern implements Comparable { private final Map matchingVariables; - PathRemainingMatchInfo(String pathRemaining) { + PathRemainingMatchInfo(@Nullable String pathRemaining) { this(pathRemaining, Collections.emptyMap()); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java b/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java index d3f950b311b..e3d76f1c383 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/BindingContext.java @@ -74,7 +74,7 @@ public class BindingContext { * @param name the name of the target object * @return the created data binder */ - public WebExchangeDataBinder createDataBinder(ServerWebExchange exchange, Object target, String name) { + public WebExchangeDataBinder createDataBinder(ServerWebExchange exchange, @Nullable Object target, String name) { WebExchangeDataBinder dataBinder = new WebExchangeDataBinder(target, name); if (this.initializer != null) { this.initializer.initBinder(dataBinder); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/AppCacheManifestTransformer.java b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/AppCacheManifestTransformer.java index bb600ef9935..f7183173309 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/AppCacheManifestTransformer.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/AppCacheManifestTransformer.java @@ -35,6 +35,7 @@ import reactor.core.publisher.Mono; import reactor.core.publisher.SynchronousSink; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.util.DigestUtils; import org.springframework.util.FileCopyUtils; import org.springframework.util.StringUtils; @@ -242,7 +243,7 @@ public class AppCacheManifestTransformer extends ResourceTransformerSupport { private final Resource resource; - public LineOutput(String line, Resource resource) { + public LineOutput(String line, @Nullable Resource resource) { this.line = line; this.resource = resource; } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/DefaultResourceResolverChain.java b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/DefaultResourceResolverChain.java index 0f049dc33c6..2795cbae1e7 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/DefaultResourceResolverChain.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/DefaultResourceResolverChain.java @@ -48,7 +48,7 @@ class DefaultResourceResolverChain implements ResourceResolverChain { @Override - public Mono resolveResource(ServerWebExchange exchange, String requestPath, + public Mono resolveResource(@Nullable ServerWebExchange exchange, String requestPath, List locations) { ResourceResolver resolver = getNext(); diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceResolverChain.java b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceResolverChain.java index 5070c233899..207662a480d 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceResolverChain.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/resource/ResourceResolverChain.java @@ -21,6 +21,7 @@ import java.util.List; import reactor.core.publisher.Mono; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.web.server.ServerWebExchange; /** @@ -40,7 +41,7 @@ public interface ResourceResolverChain { * @param locations the locations to search in when looking up resources * @return the resolved resource or an empty {@code Mono} if unresolved */ - Mono resolveResource(ServerWebExchange exchange, String requestPath, + Mono resolveResource(@Nullable ServerWebExchange exchange, String requestPath, List locations); /** diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java index 08d697a8026..48e2ec573d7 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ControllerMethodResolver.java @@ -38,6 +38,7 @@ import org.springframework.core.annotation.AnnotationAwareOrderComparator; import org.springframework.core.annotation.AnnotationUtils; import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.codec.ServerCodecConfigurer; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.ReflectionUtils; import org.springframework.web.bind.annotation.InitBinder; @@ -336,7 +337,7 @@ class ControllerMethodResolver { private ArgumentResolverRegistrar(ArgumentResolverConfigurer resolvers, - ServerCodecConfigurer codecs, boolean modelAttribute) { + @Nullable ServerCodecConfigurer codecs, boolean modelAttribute) { this.customResolvers = resolvers.getCustomResolvers(); this.messageReaders = codecs != null ? codecs.getReaders() : null; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolver.java index d4e36e8c29b..369b7db8377 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/HttpEntityArgumentResolver.java @@ -26,6 +26,7 @@ import org.springframework.http.HttpEntity; import org.springframework.http.RequestEntity; import org.springframework.http.codec.HttpMessageReader; import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.lang.Nullable; import org.springframework.web.reactive.BindingContext; import org.springframework.web.reactive.result.method.HandlerMethodArgumentResolver; import org.springframework.web.server.ServerWebExchange; @@ -63,7 +64,7 @@ public class HttpEntityArgumentResolver extends AbstractMessageReaderArgumentRes .defaultIfEmpty(createEntity(null, entityType, exchange.getRequest())); } - private Object createEntity(Object body, Class entityType, ServerHttpRequest request) { + private Object createEntity(@Nullable Object body, Class entityType, ServerHttpRequest request) { return RequestEntity.class.equals(entityType) ? new RequestEntity<>(body, request.getHeaders(), request.getMethod(), request.getURI()) : new HttpEntity<>(body, request.getHeaders()); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java index 14e5393ff10..9c86e6439f8 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java @@ -1030,7 +1030,7 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic */ @Nullable protected ServletRequestAttributes buildRequestAttributes( - HttpServletRequest request, HttpServletResponse response, RequestAttributes previousAttributes) { + HttpServletRequest request, HttpServletResponse response, @Nullable RequestAttributes previousAttributes) { if (previousAttributes == null || previousAttributes instanceof ServletRequestAttributes) { return new ServletRequestAttributes(request, response); @@ -1055,7 +1055,7 @@ public abstract class FrameworkServlet extends HttpServletBean implements Applic } private void resetContextHolders(HttpServletRequest request, - LocaleContext prevLocaleContext, RequestAttributes previousAttributes) { + @Nullable LocaleContext prevLocaleContext, @Nullable RequestAttributes previousAttributes) { LocaleContextHolder.setLocaleContext(prevLocaleContext, this.threadContextInheritable); RequestContextHolder.setRequestAttributes(previousAttributes, this.threadContextInheritable); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java index 8ac5f38e422..1dda4d8decc 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerExecutionChain.java @@ -162,7 +162,7 @@ public class HandlerExecutionChain { * Will just invoke afterCompletion for all interceptors whose preHandle invocation * has successfully completed and returned true. */ - void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, Exception ex) + void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, @Nullable Exception ex) throws Exception { HandlerInterceptor[] interceptors = getInterceptors(); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java index affde15c09b..63a35ead340 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java @@ -69,7 +69,7 @@ abstract class MvcNamespaceUtils { * under that well-known name, unless already registered. * @return a RuntimeBeanReference to this {@link UrlPathHelper} instance */ - public static RuntimeBeanReference registerUrlPathHelper(RuntimeBeanReference urlPathHelperRef, ParserContext parserContext, Object source) { + public static RuntimeBeanReference registerUrlPathHelper(@Nullable RuntimeBeanReference urlPathHelperRef, ParserContext parserContext, Object source) { if (urlPathHelperRef != null) { if (parserContext.getRegistry().isAlias(URL_PATH_HELPER_BEAN_NAME)) { parserContext.getRegistry().removeAlias(URL_PATH_HELPER_BEAN_NAME); @@ -92,7 +92,7 @@ abstract class MvcNamespaceUtils { * under that well-known name, unless already registered. * @return a RuntimeBeanReference to this {@link PathMatcher} instance */ - public static RuntimeBeanReference registerPathMatcher(RuntimeBeanReference pathMatcherRef, ParserContext parserContext, Object source) { + public static RuntimeBeanReference registerPathMatcher(@Nullable RuntimeBeanReference pathMatcherRef, ParserContext parserContext, Object source) { if (pathMatcherRef != null) { if (parserContext.getRegistry().isAlias(PATH_MATCHER_BEAN_NAME)) { parserContext.getRegistry().removeAlias(PATH_MATCHER_BEAN_NAME); @@ -161,7 +161,7 @@ abstract class MvcNamespaceUtils { * if a non-null CORS configuration is provided. * @return a RuntimeBeanReference to this {@code Map} instance */ - public static RuntimeBeanReference registerCorsConfigurations(Map corsConfigurations, ParserContext parserContext, Object source) { + public static RuntimeBeanReference registerCorsConfigurations(@Nullable Map corsConfigurations, ParserContext parserContext, Object source) { if (!parserContext.getRegistry().containsBeanDefinition(CORS_CONFIGURATION_BEAN_NAME)) { RootBeanDefinition corsConfigurationsDef = new RootBeanDefinition(LinkedHashMap.class); corsConfigurationsDef.setSource(source); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java index d5b1a9eb65a..eb5d416e434 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DefaultServletHandlerConfigurer.java @@ -71,7 +71,7 @@ public class DefaultServletHandlerConfigurer { * This is useful when the default Servlet cannot be auto-detected, for example when it has been manually configured. * @see DefaultServletHttpRequestHandler */ - public void enable(String defaultServletName) { + public void enable(@Nullable String defaultServletName) { handler = new DefaultServletHttpRequestHandler(); handler.setDefaultServletName(defaultServletName); handler.setServletContext(servletContext); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java index 5c1dd015a54..e6fda708307 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/AbstractMessageConverterMethodProcessor.java @@ -40,6 +40,7 @@ import org.springframework.http.converter.HttpMessageConverter; 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.util.CollectionUtils; import org.springframework.util.StringUtils; import org.springframework.web.HttpMediaTypeNotAcceptableException; @@ -301,7 +302,7 @@ public abstract class AbstractMessageConverterMethodProcessor extends AbstractMe * @since 4.2 */ @SuppressWarnings("unchecked") - protected List getProducibleMediaTypes(HttpServletRequest request, Class valueClass, Type declaredType) { + protected List getProducibleMediaTypes(HttpServletRequest request, Class valueClass, @Nullable Type declaredType) { Set mediaTypes = (Set) request.getAttribute(HandlerMapping.PRODUCIBLE_MEDIA_TYPES_ATTRIBUTE); if (!CollectionUtils.isEmpty(mediaTypes)) { return new ArrayList<>(mediaTypes); 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 b155b3e4f48..fe343220d3a 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 @@ -159,7 +159,7 @@ public class MvcUriComponentsBuilder { * @param controllerType the controller to build a URI for * @return a UriComponentsBuilder instance (never {@code null}) */ - public static UriComponentsBuilder fromController(UriComponentsBuilder builder, + public static UriComponentsBuilder fromController(@Nullable UriComponentsBuilder builder, Class controllerType) { builder = getBaseUrlToUse(builder); @@ -328,7 +328,7 @@ public class MvcUriComponentsBuilder { * if there is no unique match * @since 4.2 */ - public static MethodArgumentBuilder fromMappingName(UriComponentsBuilder builder, String name) { + public static MethodArgumentBuilder fromMappingName(@Nullable UriComponentsBuilder builder, String name) { RequestMappingInfoHandlerMapping handlerMapping = getRequestMappingInfoHandlerMapping(); List handlerMethods = handlerMapping.getHandlerMethodsForMappingName(name); if (handlerMethods == null) { @@ -383,7 +383,7 @@ public class MvcUriComponentsBuilder { (controllerType != null ? controllerType : method.getDeclaringClass()), method, args); } - private static UriComponentsBuilder fromMethodInternal(UriComponentsBuilder baseUrl, + private static UriComponentsBuilder fromMethodInternal(@Nullable UriComponentsBuilder baseUrl, Class controllerType, Method method, Object... args) { baseUrl = getBaseUrlToUse(baseUrl); @@ -692,7 +692,7 @@ public class MvcUriComponentsBuilder { } @Override - public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) { + public Object intercept(Object obj, Method method, Object[] args, @Nullable MethodProxy proxy) { if (getControllerMethod.equals(method)) { return this.controllerMethod; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.java index de41ce1293d..cddd1dcd087 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseBodyEmitter.java @@ -157,7 +157,7 @@ public class ResponseBodyEmitter { * @throws IOException raised when an I/O error occurs * @throws java.lang.IllegalStateException wraps any other errors */ - public synchronized void send(Object object, MediaType mediaType) throws IOException { + public synchronized void send(Object object, @Nullable MediaType mediaType) throws IOException { Assert.state(!this.complete, "ResponseBodyEmitter is already set complete"); sendInternal(object, mediaType); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java index 6b1d4cec5ee..f0e2eb334e9 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/ResponseEntityExceptionHandler.java @@ -203,7 +203,7 @@ public abstract class ResponseEntityExceptionHandler { * @param status the response status * @param request the current request */ - protected ResponseEntity handleExceptionInternal(Exception ex, Object body, + protected ResponseEntity handleExceptionInternal(Exception ex, @Nullable Object body, HttpHeaders headers, HttpStatus status, WebRequest request) { if (HttpStatus.INTERNAL_SERVER_ERROR.equals(status)) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java index 11741fba82c..ebc65181d56 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/annotation/SseEmitter.java @@ -25,6 +25,7 @@ import java.util.Set; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpResponse; +import org.springframework.lang.Nullable; import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; @@ -103,7 +104,7 @@ public class SseEmitter extends ResponseBodyEmitter { * @throws IOException raised when an I/O error occurs */ @Override - public void send(Object object, MediaType mediaType) throws IOException { + public void send(Object object, @Nullable MediaType mediaType) throws IOException { if (object != null) { send(event().data(object, mediaType)); } @@ -173,7 +174,7 @@ public class SseEmitter extends ResponseBodyEmitter { /** * Add an SSE "data" line. */ - SseEventBuilder data(Object object, MediaType mediaType); + SseEventBuilder data(Object object, @Nullable MediaType mediaType); /** * Return one or more Object-MediaType pairs to write via @@ -223,7 +224,7 @@ public class SseEmitter extends ResponseBodyEmitter { } @Override - public SseEventBuilder data(Object object, MediaType mediaType) { + public SseEventBuilder data(Object object, @Nullable MediaType mediaType) { append("data:"); saveAppendedText(); this.dataToSend.add(new DataWithMediaType(object, mediaType)); diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java index bd075950dae..6ef33a1e2ac 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/AppCacheManifestTransformer.java @@ -31,6 +31,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.util.DigestUtils; import org.springframework.util.FileCopyUtils; import org.springframework.util.StringUtils; @@ -212,7 +213,7 @@ public class AppCacheManifestTransformer extends ResourceTransformerSupport { private final Resource resource; - public LineOutput(String line, Resource resource) { + public LineOutput(String line, @Nullable Resource resource) { this.line = line; this.resource = resource; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java index 354b0f08f3a..c6819d690a0 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/DefaultResourceResolverChain.java @@ -21,6 +21,7 @@ import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.core.io.Resource; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; /** @@ -47,7 +48,7 @@ class DefaultResourceResolverChain implements ResourceResolverChain { @Override - public Resource resolveResource(HttpServletRequest request, String requestPath, List locations) { + public Resource resolveResource(@Nullable HttpServletRequest request, String requestPath, List locations) { ResourceResolver resolver = getNext(); if (resolver == null) { return null; diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java index e12e49b90b1..dc122eb3757 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/resource/ResourceResolverChain.java @@ -43,7 +43,7 @@ public interface ResourceResolverChain { * @return the resolved resource or {@code null} if unresolved */ @Nullable - Resource resolveResource(HttpServletRequest request, String requestPath, List locations); + Resource resolveResource(@Nullable HttpServletRequest request, String requestPath, List locations); /** * Resolve the externally facing public URL path for clients to use diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java index 67152102e94..51a99130d9a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/support/RequestContext.java @@ -222,7 +222,7 @@ public class RequestContext { * @see org.springframework.web.servlet.DispatcherServlet#LOCALE_RESOLVER_ATTRIBUTE * @see org.springframework.web.servlet.DispatcherServlet#THEME_RESOLVER_ATTRIBUTE */ - protected void initContext(HttpServletRequest request, HttpServletResponse response, @Nullable ServletContext servletContext, + protected void initContext(HttpServletRequest request, @Nullable HttpServletResponse response, @Nullable ServletContext servletContext, @Nullable Map model) { this.request = request; 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 246af03853d..6ac06844898 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 @@ -105,7 +105,7 @@ public abstract class AbstractView extends WebApplicationObjectSupport implement *

May be ignored by subclasses if the view itself is assumed * to set the content type, e.g. in case of JSPs. */ - public void setContentType(String contentType) { + public void setContentType(@Nullable String contentType) { this.contentType = contentType; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java index f9d4ab0b0ed..c958ca4e12e 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/script/ScriptTemplateView.java @@ -178,7 +178,7 @@ public class ScriptTemplateView extends AbstractUrlBasedView { * @since 4.2.1 */ @Override - public void setContentType(String contentType) { + public void setContentType(@Nullable String contentType) { super.setContentType(contentType); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java index 148d8c8b362..be5fdee8e51 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/WebSocketHttpHeaders.java @@ -24,6 +24,7 @@ import java.util.Map; import java.util.Set; import org.springframework.http.HttpHeaders; +import org.springframework.lang.Nullable; import org.springframework.util.CollectionUtils; /** @@ -217,7 +218,7 @@ public class WebSocketHttpHeaders extends HttpHeaders { * @see #set(String, String) */ @Override - public void add(String headerName, String headerValue) { + public void add(String headerName, @Nullable String headerValue) { this.headers.add(headerName, headerValue); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java index 362747159a3..9cee5f7ee0a 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/AbstractWebSocketClient.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.http.HttpHeaders; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.WebSocketExtension; @@ -72,7 +73,7 @@ public abstract class AbstractWebSocketClient implements WebSocketClient { @Override public final ListenableFuture doHandshake(WebSocketHandler webSocketHandler, - WebSocketHttpHeaders headers, URI uri) { + @Nullable WebSocketHttpHeaders headers, URI uri) { Assert.notNull(webSocketHandler, "WebSocketHandler must not be null"); assertUri(uri); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java index b106f643314..027eb1b2c74 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/client/WebSocketClient.java @@ -18,6 +18,7 @@ package org.springframework.web.socket.client; import java.net.URI; +import org.springframework.lang.Nullable; import org.springframework.util.concurrent.ListenableFuture; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.WebSocketHttpHeaders; @@ -38,6 +39,6 @@ public interface WebSocketClient { String uriTemplate, Object... uriVariables); ListenableFuture doHandshake(WebSocketHandler webSocketHandler, - WebSocketHttpHeaders headers, URI uri); + @Nullable WebSocketHttpHeaders headers, URI uri); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java index 3c0a9d24a80..7ba53a89332 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/messaging/WebSocketStompClient.java @@ -29,6 +29,7 @@ import org.apache.commons.logging.LogFactory; import org.springframework.context.Lifecycle; import org.springframework.context.SmartLifecycle; +import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.simp.stomp.BufferingStompDecoder; import org.springframework.messaging.simp.stomp.ConnectionHandlingStompSession; @@ -229,7 +230,7 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif * @param uriVariables URI variables to expand into the URL * @return ListenableFuture for access to the session when ready for use */ - public ListenableFuture connect(String url, WebSocketHttpHeaders handshakeHeaders, + public ListenableFuture connect(String url, @Nullable WebSocketHttpHeaders handshakeHeaders, StompSessionHandler handler, Object... uriVariables) { return connect(url, handshakeHeaders, null, handler, uriVariables); @@ -248,7 +249,7 @@ public class WebSocketStompClient extends StompClientSupport implements SmartLif * @return ListenableFuture for access to the session when ready for use */ public ListenableFuture connect(String url, WebSocketHttpHeaders handshakeHeaders, - StompHeaders connectHeaders, StompSessionHandler handler, Object... uriVariables) { + @Nullable StompHeaders connectHeaders, StompSessionHandler handler, Object... uriVariables) { Assert.notNull(url, "'url' must not be null"); URI uri = UriComponentsBuilder.fromUriString(url).buildAndExpand(uriVariables).encode().toUri(); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsException.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsException.java index 5fbf3f8a01e..fed2dd1b4ea 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsException.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/SockJsException.java @@ -17,6 +17,7 @@ package org.springframework.web.socket.sockjs; import org.springframework.core.NestedRuntimeException; +import org.springframework.lang.Nullable; /** * Base class for exceptions raised while processing SockJS HTTP requests. @@ -45,7 +46,7 @@ public class SockJsException extends NestedRuntimeException { * @param sessionId the SockJS session id * @param cause the root cause */ - public SockJsException(String message, String sessionId, Throwable cause) { + public SockJsException(String message, @Nullable String sessionId, @Nullable Throwable cause) { super(message, cause); this.sessionId = sessionId; } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractClientSockJsSession.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractClientSockJsSession.java index 227fe6f8aac..24a169b070e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractClientSockJsSession.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/AbstractClientSockJsSession.java @@ -26,6 +26,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.http.HttpHeaders; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.concurrent.SettableListenableFuture; import org.springframework.web.socket.CloseStatus; @@ -308,7 +309,7 @@ public abstract class AbstractClientSockJsSession implements WebSocketSession { } } - public void afterTransportClosed(CloseStatus closeStatus) { + public void afterTransportClosed(@Nullable CloseStatus closeStatus) { this.closeStatus = (this.closeStatus != null ? this.closeStatus : closeStatus); Assert.state(this.closeStatus != null, "CloseStatus not available"); if (logger.isDebugEnabled()) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/DefaultTransportRequest.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/DefaultTransportRequest.java index 397ceee5865..ddda021d17b 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/DefaultTransportRequest.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/DefaultTransportRequest.java @@ -27,6 +27,7 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.http.HttpHeaders; +import org.springframework.lang.Nullable; import org.springframework.scheduling.TaskScheduler; import org.springframework.util.Assert; import org.springframework.util.concurrent.ListenableFutureCallback; @@ -209,7 +210,7 @@ class DefaultTransportRequest implements TransportRequest { handleFailure(null, true); } - private void handleFailure(Throwable ex, boolean isTimeoutFailure) { + private void handleFailure(@Nullable Throwable ex, boolean isTimeoutFailure) { if (this.handled.compareAndSet(false, true)) { if (isTimeoutFailure) { String message = "Connect timed out for " + DefaultTransportRequest.this; diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java index 7906061df62..ea2f71ccf7e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/JettyXhrTransport.java @@ -33,6 +33,7 @@ import org.springframework.context.Lifecycle; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.concurrent.SettableListenableFuture; import org.springframework.web.client.HttpServerErrorException; @@ -134,7 +135,7 @@ public class JettyXhrTransport extends AbstractXhrTransport implements Lifecycle return executeRequest(url, HttpMethod.POST, headers, message.getPayload()); } - protected ResponseEntity executeRequest(URI url, HttpMethod method, HttpHeaders headers, String body) { + protected ResponseEntity executeRequest(URI url, HttpMethod method, HttpHeaders headers, @Nullable String body) { Request httpRequest = this.httpClient.newRequest(url).method(method); addHttpHeaders(httpRequest, headers); if (body != null) { diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java index 8060e8b1690..038a8f75d4e 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java @@ -239,7 +239,7 @@ public class SockJsClient implements WebSocketClient, Lifecycle { @Override public final ListenableFuture doHandshake( - WebSocketHandler handler, WebSocketHttpHeaders headers, URI url) { + WebSocketHandler handler, @Nullable WebSocketHttpHeaders headers, URI url) { Assert.notNull(handler, "WebSocketHandler is required"); Assert.notNull(url, "URL is required"); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java index 2b8f7f669f8..6e69a8bc8c5 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/transport/handler/DefaultSockJsService.java @@ -26,6 +26,7 @@ import javax.servlet.ServletContext; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.springframework.lang.Nullable; import org.springframework.scheduling.TaskScheduler; import org.springframework.web.context.ServletContextAware; import org.springframework.web.socket.server.support.DefaultHandshakeHandler; @@ -78,7 +79,7 @@ public class DefaultSockJsService extends TransportHandlingSockJsService impleme } - private static Set getDefaultTransportHandlers(Collection overrides) { + private static Set getDefaultTransportHandlers(@Nullable Collection overrides) { Set result = new LinkedHashSet<>(8); result.add(new XhrPollingTransportHandler()); result.add(new XhrReceivingTransportHandler());