From 290a41d3988b51efdb49910e116fbb54563f7653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Deleuze?= Date: Tue, 26 Mar 2024 15:39:18 +0100 Subject: [PATCH] Refine null-safety in more modules This commit refines the null-safety in all remaining modules except spring-test. See gh-32475 --- .../aop/target/LazyInitTargetSource.java | 1 + .../cache/jcache/JCacheCacheManager.java | 1 + .../AnnotationJCacheOperationSource.java | 1 + .../jcache/interceptor/CachePutInterceptor.java | 2 ++ .../interceptor/CacheRemoveAllInterceptor.java | 2 ++ .../interceptor/CacheRemoveEntryInterceptor.java | 2 ++ .../jcache/interceptor/JCacheAspectSupport.java | 1 + .../interceptor/SimpleExceptionCacheResolver.java | 2 ++ .../TransactionAwareCacheDecorator.java | 1 + .../quartz/MethodInvokingJobDetailFactoryBean.java | 2 ++ .../quartz/SchedulerFactoryBeanRuntimeHints.java | 3 ++- .../main/java/org/springframework/cache/Cache.java | 2 +- .../cache/concurrent/ConcurrentMapCache.java | 1 + .../cache/interceptor/NamedCacheResolver.java | 1 + .../CommonAnnotationBeanPostProcessor.java | 2 ++ .../annotation/ConfigurationClassEnhancer.java | 1 + .../event/ApplicationListenerMethodAdapter.java | 10 +++++----- .../support/AbstractApplicationContext.java | 1 + .../context/support/AbstractMessageSource.java | 1 + .../support/ContextTypeMatchClassLoader.java | 1 + .../ReloadableResourceBundleMessageSource.java | 1 + .../support/ResourceBundleMessageSource.java | 1 + .../FormattingConversionServiceRuntimeHints.java | 3 ++- .../jmx/access/InvalidInvocationException.java | 4 +++- .../jmx/access/MBeanProxyFactoryBean.java | 1 + .../jndi/JndiObjectFactoryBean.java | 1 + .../annotation/AsyncConfigurerSupport.java | 1 + .../concurrent/ConcurrentTaskScheduler.java | 3 +++ .../scheduling/config/TaskSchedulerRouter.java | 1 + .../scheduling/support/CronTrigger.java | 1 + .../scheduling/support/QuartzCronField.java | 1 + .../scripting/config/ScriptingDefaultsParser.java | 2 ++ .../support/ScriptFactoryPostProcessor.java | 1 + .../validation/AbstractPropertyBindingResult.java | 2 ++ .../springframework/validation/SimpleErrors.java | 1 + .../validation/method/ParameterErrors.java | 5 +++++ .../aot/hint/BindingReflectionHintsRegistrar.java | 2 +- .../org/springframework/core/CoroutinesUtils.java | 4 ++-- .../core/NestedRuntimeException.java | 2 +- .../springframework/core/codec/CodecException.java | 4 ++-- .../core/codec/DecodingException.java | 4 ++-- .../java/org/springframework/util/StreamUtils.java | 2 +- .../EmbeddedDatabaseFactoryRuntimeHints.java | 3 ++- .../ObjectOptimisticLockingFailureException.java | 2 +- .../orm/jpa/EntityManagerRuntimeHints.java | 3 ++- .../dao/CannotAcquireLockException.java | 6 ++++-- .../dao/ConcurrencyFailureException.java | 4 ++-- .../springframework/dao/DataAccessException.java | 2 +- .../dao/DataAccessResourceFailureException.java | 4 ++-- .../dao/DataIntegrityViolationException.java | 6 ++++-- .../dao/DataRetrievalFailureException.java | 4 ++-- .../springframework/dao/DuplicateKeyException.java | 6 ++++-- .../dao/EmptyResultDataAccessException.java | 6 ++++-- .../IncorrectResultSizeDataAccessException.java | 8 +++++--- .../dao/InvalidDataAccessApiUsageException.java | 6 ++++-- .../InvalidDataAccessResourceUsageException.java | 6 ++++-- .../dao/NonTransientDataAccessException.java | 2 +- .../NonTransientDataAccessResourceException.java | 4 ++-- .../dao/OptimisticLockingFailureException.java | 4 ++-- .../dao/PessimisticLockingFailureException.java | 6 ++++-- .../springframework/dao/QueryTimeoutException.java | 6 ++++-- .../dao/TransientDataAccessException.java | 4 ++-- .../dao/TypeMismatchDataAccessException.java | 6 ++++-- .../jca/support/LocalConnectionFactoryBean.java | 1 + .../TransactionBeanRegistrationAotProcessor.java | 2 ++ .../annotation/TransactionRuntimeHints.java | 3 ++- .../springframework/http/ContentDisposition.java | 14 +++++++------- .../org/springframework/http/ProblemDetail.java | 2 +- .../springframework/http/ReadOnlyHttpHeaders.java | 2 ++ .../http/codec/cbor/Jackson2CborDecoder.java | 3 ++- .../http/codec/cbor/Jackson2CborEncoder.java | 4 +++- .../http/codec/json/AbstractJackson2Decoder.java | 1 + .../http/codec/json/AbstractJackson2Encoder.java | 1 + .../converter/ResourceHttpMessageConverter.java | 1 + .../json/Jackson2ObjectMapperFactoryBean.java | 1 + .../converter/json/JacksonModulesRuntimeHints.java | 3 ++- .../converter/json/ProblemDetailRuntimeHints.java | 3 ++- .../reactive/ServerHttpResponseDecorator.java | 2 ++ .../web/client/support/RestTemplateAdapter.java | 2 ++ .../AbstractRefreshableWebApplicationContext.java | 1 + .../AbstractMultipartHttpServletRequest.java | 1 + .../springframework/web/util/BindErrorUtils.java | 2 ++ .../web/util/WebUtilRuntimeHints.java | 3 ++- .../function/server/DefaultServerRequest.java | 1 + .../ServerWebExchangeMethodArgumentResolver.java | 1 + .../HandshakeWebSocketServiceRuntimeHints.java | 3 ++- .../web/servlet/function/DefaultServerRequest.java | 1 + .../support/HandshakeHandlerRuntimeHints.java | 3 ++- 88 files changed, 172 insertions(+), 72 deletions(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/target/LazyInitTargetSource.java b/spring-aop/src/main/java/org/springframework/aop/target/LazyInitTargetSource.java index e69a01842e..746a317f57 100644 --- a/spring-aop/src/main/java/org/springframework/aop/target/LazyInitTargetSource.java +++ b/spring-aop/src/main/java/org/springframework/aop/target/LazyInitTargetSource.java @@ -65,6 +65,7 @@ public class LazyInitTargetSource extends AbstractBeanFactoryBasedTargetSource { @Override + @Nullable public synchronized Object getTarget() throws BeansException { if (this.target == null) { this.target = getBeanFactory().getBean(getTargetBeanName()); diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCacheManager.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCacheManager.java index e4feb09554..0e87c8af53 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCacheManager.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/JCacheCacheManager.java @@ -121,6 +121,7 @@ public class JCacheCacheManager extends AbstractTransactionSupportingCacheManage } @Override + @Nullable protected Cache getMissingCache(String name) { CacheManager cacheManager = getCacheManager(); Assert.state(cacheManager != null, "No CacheManager set"); diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/AnnotationJCacheOperationSource.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/AnnotationJCacheOperationSource.java index ba7b5d8e9c..82db7a9a6a 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/AnnotationJCacheOperationSource.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/AnnotationJCacheOperationSource.java @@ -46,6 +46,7 @@ import org.springframework.util.StringUtils; public abstract class AnnotationJCacheOperationSource extends AbstractFallbackJCacheOperationSource { @Override + @Nullable protected JCacheOperation findCacheOperation(Method method, @Nullable Class targetType) { CacheResult cacheResult = method.getAnnotation(CacheResult.class); CachePut cachePut = method.getAnnotation(CachePut.class); diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CachePutInterceptor.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CachePutInterceptor.java index d71af3244d..f64c09a336 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CachePutInterceptor.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CachePutInterceptor.java @@ -23,6 +23,7 @@ import org.springframework.cache.Cache; import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.CacheOperationInvocationContext; import org.springframework.cache.interceptor.CacheOperationInvoker; +import org.springframework.lang.Nullable; /** * Intercept methods annotated with {@link CachePut}. @@ -39,6 +40,7 @@ class CachePutInterceptor extends AbstractKeyCacheInterceptor context, CacheOperationInvoker invoker) { diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveAllInterceptor.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveAllInterceptor.java index 66b583e378..dfd8f0a4cc 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveAllInterceptor.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveAllInterceptor.java @@ -22,6 +22,7 @@ import org.springframework.cache.Cache; import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.CacheOperationInvocationContext; import org.springframework.cache.interceptor.CacheOperationInvoker; +import org.springframework.lang.Nullable; /** * Intercept methods annotated with {@link CacheRemoveAll}. @@ -38,6 +39,7 @@ class CacheRemoveAllInterceptor extends AbstractCacheInterceptor context, CacheOperationInvoker invoker) { diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveEntryInterceptor.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveEntryInterceptor.java index 8485278316..a1075785bb 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveEntryInterceptor.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/CacheRemoveEntryInterceptor.java @@ -22,6 +22,7 @@ import org.springframework.cache.Cache; import org.springframework.cache.interceptor.CacheErrorHandler; import org.springframework.cache.interceptor.CacheOperationInvocationContext; import org.springframework.cache.interceptor.CacheOperationInvoker; +import org.springframework.lang.Nullable; /** * Intercept methods annotated with {@link CacheRemove}. @@ -38,6 +39,7 @@ class CacheRemoveEntryInterceptor extends AbstractKeyCacheInterceptor context, CacheOperationInvoker invoker) { diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java index 1dbf3c8ae6..de1ff1a293 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java @@ -180,6 +180,7 @@ public class JCacheAspectSupport extends AbstractCacheInvoker implements Initial } @Override + @Nullable public Object invoke() throws ThrowableWrapper { return invokeOperation(this.delegate); } diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/SimpleExceptionCacheResolver.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/SimpleExceptionCacheResolver.java index 1aa5695461..70eca3aad5 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/SimpleExceptionCacheResolver.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/SimpleExceptionCacheResolver.java @@ -24,6 +24,7 @@ import org.springframework.cache.interceptor.AbstractCacheResolver; import org.springframework.cache.interceptor.BasicOperation; import org.springframework.cache.interceptor.CacheOperationInvocationContext; import org.springframework.cache.interceptor.CacheResolver; +import org.springframework.lang.Nullable; /** * A simple {@link CacheResolver} that resolves the exception cache @@ -41,6 +42,7 @@ public class SimpleExceptionCacheResolver extends AbstractCacheResolver { } @Override + @Nullable protected Collection getCacheNames(CacheOperationInvocationContext context) { BasicOperation operation = context.getOperation(); if (!(operation instanceof CacheResultOperation cacheResultOperation)) { diff --git a/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java b/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java index 1c14c85a4b..45b5870dfe 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java +++ b/spring-context-support/src/main/java/org/springframework/cache/transaction/TransactionAwareCacheDecorator.java @@ -83,6 +83,7 @@ public class TransactionAwareCacheDecorator implements Cache { } @Override + @Nullable public T get(Object key, @Nullable Class type) { return this.targetCache.get(key, type); } diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java index cace9ab82e..d692c4bf74 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/MethodInvokingJobDetailFactoryBean.java @@ -199,6 +199,7 @@ public class MethodInvokingJobDetailFactoryBean extends ArgumentConvertingMethod * Overridden to support the {@link #setTargetBeanName "targetBeanName"} feature. */ @Override + @Nullable public Class getTargetClass() { Class targetClass = super.getTargetClass(); if (targetClass == null && this.targetBeanName != null) { @@ -212,6 +213,7 @@ public class MethodInvokingJobDetailFactoryBean extends ArgumentConvertingMethod * Overridden to support the {@link #setTargetBeanName "targetBeanName"} feature. */ @Override + @Nullable public Object getTargetObject() { Object targetObject = super.getTargetObject(); if (targetObject == null && this.targetBeanName != null) { diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBeanRuntimeHints.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBeanRuntimeHints.java index c2d727a455..811c8eaab4 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBeanRuntimeHints.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/SchedulerFactoryBeanRuntimeHints.java @@ -22,6 +22,7 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeHint.Builder; import org.springframework.aot.hint.TypeReference; import org.springframework.aot.hint.annotation.ReflectiveRuntimeHintsRegistrar; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -40,7 +41,7 @@ class SchedulerFactoryBeanRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { if (!ClassUtils.isPresent(SCHEDULER_FACTORY_CLASS_NAME, classLoader)) { return; } diff --git a/spring-context/src/main/java/org/springframework/cache/Cache.java b/spring-context/src/main/java/org/springframework/cache/Cache.java index 0d8b352ff2..3df983a9a2 100644 --- a/spring-context/src/main/java/org/springframework/cache/Cache.java +++ b/spring-context/src/main/java/org/springframework/cache/Cache.java @@ -315,7 +315,7 @@ public interface Cache { @Nullable private final Object key; - public ValueRetrievalException(@Nullable Object key, Callable loader, Throwable ex) { + public ValueRetrievalException(@Nullable Object key, Callable loader, @Nullable Throwable ex) { super(String.format("Value for key '%s' could not be loaded using '%s'", key, loader), ex); this.key = key; } diff --git a/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java b/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java index e3019f466c..0facea830e 100644 --- a/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java +++ b/spring-context/src/main/java/org/springframework/cache/concurrent/ConcurrentMapCache.java @@ -223,6 +223,7 @@ public class ConcurrentMapCache extends AbstractValueAdaptingCache { } @Override + @Nullable protected Object fromStoreValue(@Nullable Object storeValue) { if (storeValue != null && this.serialization != null) { try { diff --git a/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java b/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java index a8023cea59..61cfc4b469 100644 --- a/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java +++ b/spring-context/src/main/java/org/springframework/cache/interceptor/NamedCacheResolver.java @@ -52,6 +52,7 @@ public class NamedCacheResolver extends AbstractCacheResolver { } @Override + @Nullable protected Collection getCacheNames(CacheOperationInvocationContext context) { return this.cacheNames; } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java index e8de3b323d..15f044bbc3 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/CommonAnnotationBeanPostProcessor.java @@ -314,6 +314,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean } @Override + @Nullable public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) { BeanRegistrationAotContribution parentAotContribution = super.processAheadOfTime(registeredBean); Class beanClass = registeredBean.getBeanClass(); @@ -350,6 +351,7 @@ public class CommonAnnotationBeanPostProcessor extends InitDestroyAnnotationBean } @Override + @Nullable public Object postProcessBeforeInstantiation(Class beanClass, String beanName) { return null; } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java index 73a922b7cf..4d487d2b57 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassEnhancer.java @@ -334,6 +334,7 @@ class ConfigurationClassEnhancer { return resolveBeanReference(beanMethod, beanMethodArgs, beanFactory, beanName); } + @Nullable private Object resolveBeanReference(Method beanMethod, Object[] beanMethodArgs, ConfigurableBeanFactory beanFactory, String beanName) { diff --git a/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java b/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java index 9a2c88ced1..1c86b5646c 100644 --- a/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java +++ b/spring-context/src/main/java/org/springframework/context/event/ApplicationListenerMethodAdapter.java @@ -350,7 +350,7 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe * Invoke the event listener method with the given argument values. */ @Nullable - protected Object doInvoke(Object... args) { + protected Object doInvoke(@Nullable Object... args) { Object bean = getTargetBean(); // Detect package-protected NullBean instance through equals(null) check if (bean.equals(null)) { @@ -416,8 +416,8 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe * the given error message. * @param message error message to append the HandlerMethod details to */ - protected String getDetailedErrorMessage(Object bean, String message) { - StringBuilder sb = new StringBuilder(message).append('\n'); + protected String getDetailedErrorMessage(Object bean, @Nullable String message) { + StringBuilder sb = (StringUtils.hasLength(message) ? new StringBuilder(message).append('\n') : new StringBuilder()); sb.append("HandlerMethod details: \n"); sb.append("Bean [").append(bean.getClass().getName()).append("]\n"); sb.append("Method [").append(this.method.toGenericString()).append("]\n"); @@ -431,7 +431,7 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe * beans, and others). Event listener beans that require proxying should prefer * class-based proxy mechanisms. */ - private void assertTargetBean(Method method, Object targetBean, Object[] args) { + private void assertTargetBean(Method method, Object targetBean, @Nullable Object[] args) { Class methodDeclaringClass = method.getDeclaringClass(); Class targetBeanClass = targetBean.getClass(); if (!methodDeclaringClass.isAssignableFrom(targetBeanClass)) { @@ -443,7 +443,7 @@ public class ApplicationListenerMethodAdapter implements GenericApplicationListe } } - private String getInvocationErrorMessage(Object bean, String message, Object[] resolvedArgs) { + private String getInvocationErrorMessage(Object bean, @Nullable String message, @Nullable Object[] resolvedArgs) { StringBuilder sb = new StringBuilder(getDetailedErrorMessage(bean, message)); sb.append("Resolved arguments: \n"); for (int i = 0; i < resolvedArgs.length; i++) { 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 2f5cbce333..6036342c6c 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 @@ -1463,6 +1463,7 @@ public abstract class AbstractApplicationContext extends DefaultResourceLoader //--------------------------------------------------------------------- @Override + @Nullable 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 d58ceadb51..2f3840ed48 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 @@ -137,6 +137,7 @@ public abstract class AbstractMessageSource extends MessageSourceSupport impleme @Override + @Nullable public final String getMessage(String code, @Nullable Object[] args, @Nullable String defaultMessage, Locale locale) { String msg = getMessageInternal(code, args, locale); if (msg != null) { diff --git a/spring-context/src/main/java/org/springframework/context/support/ContextTypeMatchClassLoader.java b/spring-context/src/main/java/org/springframework/context/support/ContextTypeMatchClassLoader.java index 998d061ca2..525d916ca0 100644 --- a/spring-context/src/main/java/org/springframework/context/support/ContextTypeMatchClassLoader.java +++ b/spring-context/src/main/java/org/springframework/context/support/ContextTypeMatchClassLoader.java @@ -123,6 +123,7 @@ class ContextTypeMatchClassLoader extends DecoratingClassLoader implements Smart } @Override + @Nullable protected Class loadClassForOverriding(String name) throws ClassNotFoundException { byte[] bytes = bytesCache.get(name); if (bytes == null) { 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 3acaa03808..a254cbd9fa 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 @@ -191,6 +191,7 @@ public class ReloadableResourceBundleMessageSource extends AbstractResourceBased * returning the value found in the bundle as-is (without MessageFormat parsing). */ @Override + @Nullable protected String resolveCodeWithoutArguments(String code, Locale locale) { if (getCacheMillis() < 0) { PropertiesHolder propHolder = getMergedProperties(locale); diff --git a/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java b/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java index 012237889a..026977b4fe 100644 --- a/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java +++ b/spring-context/src/main/java/org/springframework/context/support/ResourceBundleMessageSource.java @@ -145,6 +145,7 @@ public class ResourceBundleMessageSource extends AbstractResourceBasedMessageSou * returning the value found in the bundle as-is (without MessageFormat parsing). */ @Override + @Nullable protected String resolveCodeWithoutArguments(String code, Locale locale) { Set basenames = getBasenameSet(); for (String basename : basenames) { diff --git a/spring-context/src/main/java/org/springframework/format/support/FormattingConversionServiceRuntimeHints.java b/spring-context/src/main/java/org/springframework/format/support/FormattingConversionServiceRuntimeHints.java index a6e87cec0c..d1f41d84fc 100644 --- a/spring-context/src/main/java/org/springframework/format/support/FormattingConversionServiceRuntimeHints.java +++ b/spring-context/src/main/java/org/springframework/format/support/FormattingConversionServiceRuntimeHints.java @@ -19,6 +19,7 @@ package org.springframework.format.support; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeReference; +import org.springframework.lang.Nullable; /** * {@link RuntimeHintsRegistrar} to register hints for {@link DefaultFormattingConversionService}. @@ -29,7 +30,7 @@ import org.springframework.aot.hint.TypeReference; class FormattingConversionServiceRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { hints.reflection().registerType(TypeReference.of("javax.money.MonetaryAmount")); } } diff --git a/spring-context/src/main/java/org/springframework/jmx/access/InvalidInvocationException.java b/spring-context/src/main/java/org/springframework/jmx/access/InvalidInvocationException.java index ea16a2fed8..2cd42366d2 100644 --- a/spring-context/src/main/java/org/springframework/jmx/access/InvalidInvocationException.java +++ b/spring-context/src/main/java/org/springframework/jmx/access/InvalidInvocationException.java @@ -18,6 +18,8 @@ package org.springframework.jmx.access; import javax.management.JMRuntimeException; +import org.springframework.lang.Nullable; + /** * Thrown when trying to invoke an operation on a proxy that is not exposed * by the proxied MBean resource's management interface. @@ -35,7 +37,7 @@ public class InvalidInvocationException extends JMRuntimeException { * error message. * @param msg the detail message */ - public InvalidInvocationException(String msg) { + public InvalidInvocationException(@Nullable String msg) { super(msg); } diff --git a/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java b/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java index 0acc722b26..b0c62aa13a 100644 --- a/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/jmx/access/MBeanProxyFactoryBean.java @@ -108,6 +108,7 @@ public class MBeanProxyFactoryBean extends MBeanClientInterceptor } @Override + @Nullable public Class getObjectType() { return this.proxyInterface; } diff --git a/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java b/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java index a237e6c731..b56ce01e0b 100644 --- a/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java +++ b/spring-context/src/main/java/org/springframework/jndi/JndiObjectFactoryBean.java @@ -273,6 +273,7 @@ public class JndiObjectFactoryBean extends JndiObjectLocator } @Override + @Nullable public Class getObjectType() { if (this.proxyInterfaces != null) { if (this.proxyInterfaces.length == 1) { diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurerSupport.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurerSupport.java index bf7a2d0baf..4c1e831468 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurerSupport.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/AsyncConfigurerSupport.java @@ -34,6 +34,7 @@ import org.springframework.lang.Nullable; public class AsyncConfigurerSupport implements AsyncConfigurer { @Override + @Nullable public Executor getAsyncExecutor() { return null; } diff --git a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java index c814b73821..0048321d2a 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java +++ b/spring-context/src/main/java/org/springframework/scheduling/concurrent/ConcurrentTaskScheduler.java @@ -334,16 +334,19 @@ public class ConcurrentTaskScheduler extends ConcurrentTaskExecutor implements T } @Override + @Nullable public Instant lastScheduledExecution() { return (this.le != null ? toInstant(this.le.getScheduledStart()) : null); } @Override + @Nullable public Instant lastActualExecution() { return (this.le != null ? toInstant(this.le.getRunStart()) : null); } @Override + @Nullable public Instant lastCompletion() { return (this.le != null ? toInstant(this.le.getRunEnd()) : null); } diff --git a/spring-context/src/main/java/org/springframework/scheduling/config/TaskSchedulerRouter.java b/spring-context/src/main/java/org/springframework/scheduling/config/TaskSchedulerRouter.java index 480bbca6fe..21898b50ef 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/config/TaskSchedulerRouter.java +++ b/spring-context/src/main/java/org/springframework/scheduling/config/TaskSchedulerRouter.java @@ -106,6 +106,7 @@ public class TaskSchedulerRouter implements TaskScheduler, BeanNameAware, BeanFa @Override + @Nullable public ScheduledFuture schedule(Runnable task, Trigger trigger) { return determineTargetScheduler(task).schedule(task, trigger); } diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/CronTrigger.java b/spring-context/src/main/java/org/springframework/scheduling/support/CronTrigger.java index 80778a1916..dc8c9a4ab5 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/CronTrigger.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/CronTrigger.java @@ -112,6 +112,7 @@ public class CronTrigger implements Trigger { * previous execution; therefore, overlapping executions won't occur. */ @Override + @Nullable public Instant nextExecution(TriggerContext triggerContext) { Instant timestamp = determineLatestTimestamp(triggerContext); ZoneId zone = (this.zoneId != null ? this.zoneId : triggerContext.getClock().getZone()); diff --git a/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java b/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java index 288957a99a..8c0873d151 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java +++ b/spring-context/src/main/java/org/springframework/scheduling/support/QuartzCronField.java @@ -338,6 +338,7 @@ final class QuartzCronField extends CronField { @Override + @Nullable public > T nextOrSame(T temporal) { T result = adjust(temporal); if (result != null) { diff --git a/spring-context/src/main/java/org/springframework/scripting/config/ScriptingDefaultsParser.java b/spring-context/src/main/java/org/springframework/scripting/config/ScriptingDefaultsParser.java index ba2e2c4e90..f4068e09cb 100644 --- a/spring-context/src/main/java/org/springframework/scripting/config/ScriptingDefaultsParser.java +++ b/spring-context/src/main/java/org/springframework/scripting/config/ScriptingDefaultsParser.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.TypedStringValue; import org.springframework.beans.factory.xml.BeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; /** @@ -38,6 +39,7 @@ class ScriptingDefaultsParser implements BeanDefinitionParser { @Override + @Nullable public BeanDefinition parse(Element element, ParserContext parserContext) { BeanDefinition bd = LangNamespaceUtils.registerScriptFactoryPostProcessorIfNecessary(parserContext.getRegistry()); 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 e181bc0020..6d8b6c5e2e 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 @@ -305,6 +305,7 @@ public class ScriptFactoryPostProcessor implements SmartInstantiationAwareBeanPo } @Override + @Nullable public Object postProcessBeforeInstantiation(Class beanClass, String beanName) { // We only apply special treatment to ScriptFactory implementations here. if (!ScriptFactory.class.isAssignableFrom(beanClass)) { diff --git a/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java b/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java index 15ef3ae466..61675d953e 100644 --- a/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java +++ b/spring-context/src/main/java/org/springframework/validation/AbstractPropertyBindingResult.java @@ -70,6 +70,7 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul * @see #getPropertyAccessor() */ @Override + @Nullable public PropertyEditorRegistry getPropertyEditorRegistry() { return (getTarget() != null ? getPropertyAccessor() : null); } @@ -109,6 +110,7 @@ public abstract class AbstractPropertyBindingResult extends AbstractBindingResul * @see #getCustomEditor */ @Override + @Nullable protected Object formatFieldValue(String field, @Nullable Object value) { String fixedField = fixedField(field); // Try custom editor... diff --git a/spring-context/src/main/java/org/springframework/validation/SimpleErrors.java b/spring-context/src/main/java/org/springframework/validation/SimpleErrors.java index 21c616ffdd..6854f26235 100644 --- a/spring-context/src/main/java/org/springframework/validation/SimpleErrors.java +++ b/spring-context/src/main/java/org/springframework/validation/SimpleErrors.java @@ -147,6 +147,7 @@ public class SimpleErrors implements Errors, Serializable { } @Override + @Nullable public Class getFieldType(String field) { PropertyDescriptor pd = BeanUtils.getPropertyDescriptor(this.target.getClass(), field); if (pd != null) { diff --git a/spring-context/src/main/java/org/springframework/validation/method/ParameterErrors.java b/spring-context/src/main/java/org/springframework/validation/method/ParameterErrors.java index 3fc328146f..aa76afd0c2 100644 --- a/spring-context/src/main/java/org/springframework/validation/method/ParameterErrors.java +++ b/spring-context/src/main/java/org/springframework/validation/method/ParameterErrors.java @@ -147,6 +147,7 @@ public class ParameterErrors extends ParameterValidationResult implements Errors } @Override + @Nullable public ObjectError getGlobalError() { return this.errors.getGlobalError(); } @@ -167,6 +168,7 @@ public class ParameterErrors extends ParameterValidationResult implements Errors } @Override + @Nullable public FieldError getFieldError() { return this.errors.getFieldError(); } @@ -187,16 +189,19 @@ public class ParameterErrors extends ParameterValidationResult implements Errors } @Override + @Nullable public FieldError getFieldError(String field) { return this.errors.getFieldError(field); } @Override + @Nullable public Object getFieldValue(String field) { return this.errors.getFieldError(field); } @Override + @Nullable public Class getFieldType(String field) { return this.errors.getFieldType(field); } diff --git a/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java b/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java index d4951f1514..f31cb20df6 100644 --- a/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java +++ b/spring-core/src/main/java/org/springframework/aot/hint/BindingReflectionHintsRegistrar.java @@ -62,7 +62,7 @@ public class BindingReflectionHintsRegistrar { * @param hints the hints instance to use * @param types the types to register */ - public void registerReflectionHints(ReflectionHints hints, Type... types) { + public void registerReflectionHints(ReflectionHints hints, @Nullable Type... types) { Set seen = new LinkedHashSet<>(); for (Type type : types) { registerReflectionHints(hints, seen, type); diff --git a/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java b/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java index 8ad247f15c..cf5781a60e 100644 --- a/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java +++ b/spring-core/src/main/java/org/springframework/core/CoroutinesUtils.java @@ -92,7 +92,7 @@ public abstract class CoroutinesUtils { * @return the method invocation result as reactive stream * @throws IllegalArgumentException if {@code method} is not a suspending function */ - public static Publisher invokeSuspendingFunction(Method method, Object target, Object... args) { + public static Publisher invokeSuspendingFunction(Method method, Object target, @Nullable Object... args) { return invokeSuspendingFunction(Dispatchers.getUnconfined(), method, target, args); } @@ -110,7 +110,7 @@ public abstract class CoroutinesUtils { */ @SuppressWarnings({"deprecation", "DataFlowIssue"}) public static Publisher invokeSuspendingFunction( - CoroutineContext context, Method method, @Nullable Object target, Object... args) { + CoroutineContext context, Method method, @Nullable Object target, @Nullable Object... args) { Assert.isTrue(KotlinDetector.isSuspendingFunction(method), "Method must be a suspending function"); KFunction function = ReflectJvmMapping.getKotlinFunction(method); diff --git a/spring-core/src/main/java/org/springframework/core/NestedRuntimeException.java b/spring-core/src/main/java/org/springframework/core/NestedRuntimeException.java index ab0eefb213..bd6afe4d14 100644 --- a/spring-core/src/main/java/org/springframework/core/NestedRuntimeException.java +++ b/spring-core/src/main/java/org/springframework/core/NestedRuntimeException.java @@ -41,7 +41,7 @@ public abstract class NestedRuntimeException extends RuntimeException { * Construct a {@code NestedRuntimeException} with the specified detail message. * @param msg the detail message */ - public NestedRuntimeException(String msg) { + public NestedRuntimeException(@Nullable String msg) { super(msg); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/CodecException.java b/spring-core/src/main/java/org/springframework/core/codec/CodecException.java index 0cdd1de57d..f621858783 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/CodecException.java +++ b/spring-core/src/main/java/org/springframework/core/codec/CodecException.java @@ -34,7 +34,7 @@ public class CodecException extends NestedRuntimeException { * Create a new CodecException. * @param msg the detail message */ - public CodecException(String msg) { + public CodecException(@Nullable String msg) { super(msg); } @@ -43,7 +43,7 @@ public class CodecException extends NestedRuntimeException { * @param msg the detail message * @param cause root cause for the exception, if any */ - public CodecException(String msg, @Nullable Throwable cause) { + public CodecException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-core/src/main/java/org/springframework/core/codec/DecodingException.java b/spring-core/src/main/java/org/springframework/core/codec/DecodingException.java index c825f08e8a..873996dbcb 100644 --- a/spring-core/src/main/java/org/springframework/core/codec/DecodingException.java +++ b/spring-core/src/main/java/org/springframework/core/codec/DecodingException.java @@ -39,7 +39,7 @@ public class DecodingException extends CodecException { * Create a new DecodingException. * @param msg the detail message */ - public DecodingException(String msg) { + public DecodingException(@Nullable String msg) { super(msg); } @@ -48,7 +48,7 @@ public class DecodingException extends CodecException { * @param msg the detail message * @param cause root cause for the exception, if any */ - public DecodingException(String msg, @Nullable Throwable cause) { + public DecodingException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-core/src/main/java/org/springframework/util/StreamUtils.java b/spring-core/src/main/java/org/springframework/util/StreamUtils.java index 9d982f89a6..c9d7035a9d 100644 --- a/spring-core/src/main/java/org/springframework/util/StreamUtils.java +++ b/spring-core/src/main/java/org/springframework/util/StreamUtils.java @@ -201,7 +201,7 @@ public abstract class StreamUtils { * @throws IOException in case of I/O errors * @since 4.3 */ - public static int drain(InputStream in) throws IOException { + public static int drain(@Nullable InputStream in) throws IOException { Assert.notNull(in, "No InputStream specified"); return (int) in.transferTo(OutputStream.nullOutputStream()); } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryRuntimeHints.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryRuntimeHints.java index f39c3cc0e2..f78c97c746 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryRuntimeHints.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseFactoryRuntimeHints.java @@ -21,6 +21,7 @@ import java.util.Collections; import org.springframework.aot.hint.ExecutableMode; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.lang.Nullable; /** * {@link RuntimeHintsRegistrar} implementation that registers reflection hints for @@ -33,7 +34,7 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; class EmbeddedDatabaseFactoryRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { hints.reflection().registerTypeIfPresent(classLoader, "org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory$EmbeddedDataSourceProxy", builder -> builder diff --git a/spring-orm/src/main/java/org/springframework/orm/ObjectOptimisticLockingFailureException.java b/spring-orm/src/main/java/org/springframework/orm/ObjectOptimisticLockingFailureException.java index 4598ddf9af..0799a5033e 100644 --- a/spring-orm/src/main/java/org/springframework/orm/ObjectOptimisticLockingFailureException.java +++ b/spring-orm/src/main/java/org/springframework/orm/ObjectOptimisticLockingFailureException.java @@ -42,7 +42,7 @@ public class ObjectOptimisticLockingFailureException extends OptimisticLockingFa * @param msg the detail message * @param cause the source exception */ - public ObjectOptimisticLockingFailureException(@Nullable String msg, Throwable cause) { + public ObjectOptimisticLockingFailureException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); this.persistentClass = null; this.identifier = null; diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java index eb6e204028..ad68ac63f9 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/EntityManagerRuntimeHints.java @@ -22,6 +22,7 @@ import org.springframework.aot.hint.ExecutableMode; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeReference; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -42,7 +43,7 @@ class EntityManagerRuntimeHints implements RuntimeHintsRegistrar { private static final String NATIVE_QUERY_IMPL_CLASS_NAME = "org.hibernate.query.sql.internal.NativeQueryImpl"; @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { if (ClassUtils.isPresent(HIBERNATE_SESSION_FACTORY_CLASS_NAME, classLoader)) { hints.proxies().registerJdkProxy(TypeReference.of(HIBERNATE_SESSION_FACTORY_CLASS_NAME), TypeReference.of(EntityManagerFactoryInfo.class)); diff --git a/spring-tx/src/main/java/org/springframework/dao/CannotAcquireLockException.java b/spring-tx/src/main/java/org/springframework/dao/CannotAcquireLockException.java index 5a36c23815..c385798a0f 100644 --- a/spring-tx/src/main/java/org/springframework/dao/CannotAcquireLockException.java +++ b/spring-tx/src/main/java/org/springframework/dao/CannotAcquireLockException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception thrown on failure to acquire a lock during an update, * for example during a "select for update" statement. @@ -32,7 +34,7 @@ public class CannotAcquireLockException extends PessimisticLockingFailureExcepti * Constructor for CannotAcquireLockException. * @param msg the detail message */ - public CannotAcquireLockException(String msg) { + public CannotAcquireLockException(@Nullable String msg) { super(msg); } @@ -41,7 +43,7 @@ public class CannotAcquireLockException extends PessimisticLockingFailureExcepti * @param msg the detail message * @param cause the root cause from the data access API in use */ - public CannotAcquireLockException(String msg, Throwable cause) { + public CannotAcquireLockException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/ConcurrencyFailureException.java b/spring-tx/src/main/java/org/springframework/dao/ConcurrencyFailureException.java index 4f1031ce3f..5487ffa670 100644 --- a/spring-tx/src/main/java/org/springframework/dao/ConcurrencyFailureException.java +++ b/spring-tx/src/main/java/org/springframework/dao/ConcurrencyFailureException.java @@ -36,7 +36,7 @@ public class ConcurrencyFailureException extends TransientDataAccessException { * Constructor for ConcurrencyFailureException. * @param msg the detail message */ - public ConcurrencyFailureException(String msg) { + public ConcurrencyFailureException(@Nullable String msg) { super(msg); } @@ -45,7 +45,7 @@ public class ConcurrencyFailureException extends TransientDataAccessException { * @param msg the detail message * @param cause the root cause from the data access API in use */ - public ConcurrencyFailureException(String msg, @Nullable Throwable cause) { + public ConcurrencyFailureException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/DataAccessException.java b/spring-tx/src/main/java/org/springframework/dao/DataAccessException.java index 19098424c0..32479d9c02 100644 --- a/spring-tx/src/main/java/org/springframework/dao/DataAccessException.java +++ b/spring-tx/src/main/java/org/springframework/dao/DataAccessException.java @@ -43,7 +43,7 @@ public abstract class DataAccessException extends NestedRuntimeException { * Constructor for DataAccessException. * @param msg the detail message */ - public DataAccessException(String msg) { + public DataAccessException(@Nullable String msg) { super(msg); } diff --git a/spring-tx/src/main/java/org/springframework/dao/DataAccessResourceFailureException.java b/spring-tx/src/main/java/org/springframework/dao/DataAccessResourceFailureException.java index f3cd851aaa..d484703785 100644 --- a/spring-tx/src/main/java/org/springframework/dao/DataAccessResourceFailureException.java +++ b/spring-tx/src/main/java/org/springframework/dao/DataAccessResourceFailureException.java @@ -32,7 +32,7 @@ public class DataAccessResourceFailureException extends NonTransientDataAccessRe * Constructor for DataAccessResourceFailureException. * @param msg the detail message */ - public DataAccessResourceFailureException(String msg) { + public DataAccessResourceFailureException(@Nullable String msg) { super(msg); } @@ -41,7 +41,7 @@ public class DataAccessResourceFailureException extends NonTransientDataAccessRe * @param msg the detail message * @param cause the root cause from the data access API in use */ - public DataAccessResourceFailureException(String msg, @Nullable Throwable cause) { + public DataAccessResourceFailureException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/DataIntegrityViolationException.java b/spring-tx/src/main/java/org/springframework/dao/DataIntegrityViolationException.java index 0e561e04e2..21e36f4720 100644 --- a/spring-tx/src/main/java/org/springframework/dao/DataIntegrityViolationException.java +++ b/spring-tx/src/main/java/org/springframework/dao/DataIntegrityViolationException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception thrown when an attempt to insert or update data * results in violation of an integrity constraint. Note that this @@ -36,7 +38,7 @@ public class DataIntegrityViolationException extends NonTransientDataAccessExcep * Constructor for DataIntegrityViolationException. * @param msg the detail message */ - public DataIntegrityViolationException(String msg) { + public DataIntegrityViolationException(@Nullable String msg) { super(msg); } @@ -45,7 +47,7 @@ public class DataIntegrityViolationException extends NonTransientDataAccessExcep * @param msg the detail message * @param cause the root cause from the data access API in use */ - public DataIntegrityViolationException(String msg, Throwable cause) { + public DataIntegrityViolationException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/DataRetrievalFailureException.java b/spring-tx/src/main/java/org/springframework/dao/DataRetrievalFailureException.java index 0ab0c91aaf..6b36a34ab5 100644 --- a/spring-tx/src/main/java/org/springframework/dao/DataRetrievalFailureException.java +++ b/spring-tx/src/main/java/org/springframework/dao/DataRetrievalFailureException.java @@ -33,7 +33,7 @@ public class DataRetrievalFailureException extends NonTransientDataAccessExcepti * Constructor for DataRetrievalFailureException. * @param msg the detail message */ - public DataRetrievalFailureException(String msg) { + public DataRetrievalFailureException(@Nullable String msg) { super(msg); } @@ -42,7 +42,7 @@ public class DataRetrievalFailureException extends NonTransientDataAccessExcepti * @param msg the detail message * @param cause the root cause from the data access API in use */ - public DataRetrievalFailureException(String msg, @Nullable Throwable cause) { + public DataRetrievalFailureException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/DuplicateKeyException.java b/spring-tx/src/main/java/org/springframework/dao/DuplicateKeyException.java index 36ee084c9e..06051f6e6e 100644 --- a/spring-tx/src/main/java/org/springframework/dao/DuplicateKeyException.java +++ b/spring-tx/src/main/java/org/springframework/dao/DuplicateKeyException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception thrown when an attempt to insert or update data * results in violation of a primary key or unique constraint. @@ -34,7 +36,7 @@ public class DuplicateKeyException extends DataIntegrityViolationException { * Constructor for DuplicateKeyException. * @param msg the detail message */ - public DuplicateKeyException(String msg) { + public DuplicateKeyException(@Nullable String msg) { super(msg); } @@ -43,7 +45,7 @@ public class DuplicateKeyException extends DataIntegrityViolationException { * @param msg the detail message * @param cause the root cause from the data access API in use */ - public DuplicateKeyException(String msg, Throwable cause) { + public DuplicateKeyException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/EmptyResultDataAccessException.java b/spring-tx/src/main/java/org/springframework/dao/EmptyResultDataAccessException.java index 535870a423..f3308118b7 100644 --- a/spring-tx/src/main/java/org/springframework/dao/EmptyResultDataAccessException.java +++ b/spring-tx/src/main/java/org/springframework/dao/EmptyResultDataAccessException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Data access exception thrown when a result was expected to have at least * one row (or element) but zero rows (or elements) were actually returned. @@ -40,7 +42,7 @@ public class EmptyResultDataAccessException extends IncorrectResultSizeDataAcces * @param msg the detail message * @param expectedSize the expected result size */ - public EmptyResultDataAccessException(String msg, int expectedSize) { + public EmptyResultDataAccessException(@Nullable String msg, int expectedSize) { super(msg, expectedSize, 0); } @@ -50,7 +52,7 @@ public class EmptyResultDataAccessException extends IncorrectResultSizeDataAcces * @param expectedSize the expected result size * @param ex the wrapped exception */ - public EmptyResultDataAccessException(String msg, int expectedSize, Throwable ex) { + public EmptyResultDataAccessException(@Nullable String msg, int expectedSize, Throwable ex) { super(msg, expectedSize, 0, ex); } diff --git a/spring-tx/src/main/java/org/springframework/dao/IncorrectResultSizeDataAccessException.java b/spring-tx/src/main/java/org/springframework/dao/IncorrectResultSizeDataAccessException.java index d0fdb2a542..66b5d79a23 100644 --- a/spring-tx/src/main/java/org/springframework/dao/IncorrectResultSizeDataAccessException.java +++ b/spring-tx/src/main/java/org/springframework/dao/IncorrectResultSizeDataAccessException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Data access exception thrown when a result was not of the expected size, * for example when expecting a single row but getting 0 or more than 1 rows. @@ -71,7 +73,7 @@ public class IncorrectResultSizeDataAccessException extends DataRetrievalFailure * @param expectedSize the expected result size * @param ex the wrapped exception */ - public IncorrectResultSizeDataAccessException(String msg, int expectedSize, Throwable ex) { + public IncorrectResultSizeDataAccessException(@Nullable String msg, int expectedSize, @Nullable Throwable ex) { super(msg, ex); this.expectedSize = expectedSize; this.actualSize = -1; @@ -83,7 +85,7 @@ public class IncorrectResultSizeDataAccessException extends DataRetrievalFailure * @param expectedSize the expected result size * @param actualSize the actual result size (or -1 if unknown) */ - public IncorrectResultSizeDataAccessException(String msg, int expectedSize, int actualSize) { + public IncorrectResultSizeDataAccessException(@Nullable String msg, int expectedSize, int actualSize) { super(msg); this.expectedSize = expectedSize; this.actualSize = actualSize; @@ -96,7 +98,7 @@ public class IncorrectResultSizeDataAccessException extends DataRetrievalFailure * @param actualSize the actual result size (or -1 if unknown) * @param ex the wrapped exception */ - public IncorrectResultSizeDataAccessException(String msg, int expectedSize, int actualSize, Throwable ex) { + public IncorrectResultSizeDataAccessException(@Nullable String msg, int expectedSize, int actualSize, @Nullable Throwable ex) { super(msg, ex); this.expectedSize = expectedSize; this.actualSize = actualSize; diff --git a/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessApiUsageException.java b/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessApiUsageException.java index 54daec40dc..dbf1b536dd 100644 --- a/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessApiUsageException.java +++ b/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessApiUsageException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception thrown on incorrect usage of the API, such as failing to * "compile" a query object that needed compilation before execution. @@ -32,7 +34,7 @@ public class InvalidDataAccessApiUsageException extends NonTransientDataAccessEx * Constructor for InvalidDataAccessApiUsageException. * @param msg the detail message */ - public InvalidDataAccessApiUsageException(String msg) { + public InvalidDataAccessApiUsageException(@Nullable String msg) { super(msg); } @@ -41,7 +43,7 @@ public class InvalidDataAccessApiUsageException extends NonTransientDataAccessEx * @param msg the detail message * @param cause the root cause from the data access API in use */ - public InvalidDataAccessApiUsageException(String msg, Throwable cause) { + public InvalidDataAccessApiUsageException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessResourceUsageException.java b/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessResourceUsageException.java index 218da9e056..e13fc2db7b 100644 --- a/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessResourceUsageException.java +++ b/spring-tx/src/main/java/org/springframework/dao/InvalidDataAccessResourceUsageException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Root for exceptions thrown when we use a data access resource incorrectly. * Thrown for example on specifying bad SQL when using a RDBMS. @@ -30,7 +32,7 @@ public class InvalidDataAccessResourceUsageException extends NonTransientDataAcc * Constructor for InvalidDataAccessResourceUsageException. * @param msg the detail message */ - public InvalidDataAccessResourceUsageException(String msg) { + public InvalidDataAccessResourceUsageException(@Nullable String msg) { super(msg); } @@ -39,7 +41,7 @@ public class InvalidDataAccessResourceUsageException extends NonTransientDataAcc * @param msg the detail message * @param cause the root cause from the data access API in use */ - public InvalidDataAccessResourceUsageException(String msg, Throwable cause) { + public InvalidDataAccessResourceUsageException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessException.java b/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessException.java index 4fb6b7498a..7620c039f2 100644 --- a/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessException.java +++ b/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessException.java @@ -34,7 +34,7 @@ public abstract class NonTransientDataAccessException extends DataAccessExceptio * Constructor for NonTransientDataAccessException. * @param msg the detail message */ - public NonTransientDataAccessException(String msg) { + public NonTransientDataAccessException(@Nullable String msg) { super(msg); } diff --git a/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessResourceException.java b/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessResourceException.java index 78094e6ce9..5d8a8ebfbf 100644 --- a/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessResourceException.java +++ b/spring-tx/src/main/java/org/springframework/dao/NonTransientDataAccessResourceException.java @@ -32,7 +32,7 @@ public class NonTransientDataAccessResourceException extends NonTransientDataAcc * Constructor for NonTransientDataAccessResourceException. * @param msg the detail message */ - public NonTransientDataAccessResourceException(String msg) { + public NonTransientDataAccessResourceException(@Nullable String msg) { super(msg); } @@ -41,7 +41,7 @@ public class NonTransientDataAccessResourceException extends NonTransientDataAcc * @param msg the detail message * @param cause the root cause from the data access API in use */ - public NonTransientDataAccessResourceException(String msg, @Nullable Throwable cause) { + public NonTransientDataAccessResourceException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/OptimisticLockingFailureException.java b/spring-tx/src/main/java/org/springframework/dao/OptimisticLockingFailureException.java index c1c8189d7a..09f16de1d7 100644 --- a/spring-tx/src/main/java/org/springframework/dao/OptimisticLockingFailureException.java +++ b/spring-tx/src/main/java/org/springframework/dao/OptimisticLockingFailureException.java @@ -35,7 +35,7 @@ public class OptimisticLockingFailureException extends ConcurrencyFailureExcepti * Constructor for OptimisticLockingFailureException. * @param msg the detail message */ - public OptimisticLockingFailureException(String msg) { + public OptimisticLockingFailureException(@Nullable String msg) { super(msg); } @@ -44,7 +44,7 @@ public class OptimisticLockingFailureException extends ConcurrencyFailureExcepti * @param msg the detail message * @param cause the root cause from the data access API in use */ - public OptimisticLockingFailureException(String msg, @Nullable Throwable cause) { + public OptimisticLockingFailureException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/PessimisticLockingFailureException.java b/spring-tx/src/main/java/org/springframework/dao/PessimisticLockingFailureException.java index 31599203a9..b0b5547679 100644 --- a/spring-tx/src/main/java/org/springframework/dao/PessimisticLockingFailureException.java +++ b/spring-tx/src/main/java/org/springframework/dao/PessimisticLockingFailureException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception thrown on a pessimistic locking violation. * Thrown by Spring's SQLException translation mechanism @@ -37,7 +39,7 @@ public class PessimisticLockingFailureException extends ConcurrencyFailureExcept * Constructor for PessimisticLockingFailureException. * @param msg the detail message */ - public PessimisticLockingFailureException(String msg) { + public PessimisticLockingFailureException(@Nullable String msg) { super(msg); } @@ -46,7 +48,7 @@ public class PessimisticLockingFailureException extends ConcurrencyFailureExcept * @param msg the detail message * @param cause the root cause from the data access API in use */ - public PessimisticLockingFailureException(String msg, Throwable cause) { + public PessimisticLockingFailureException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/QueryTimeoutException.java b/spring-tx/src/main/java/org/springframework/dao/QueryTimeoutException.java index 31dccdab20..6787815eba 100644 --- a/spring-tx/src/main/java/org/springframework/dao/QueryTimeoutException.java +++ b/spring-tx/src/main/java/org/springframework/dao/QueryTimeoutException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception to be thrown on a query timeout. This could have different causes depending on * the database API in use but most likely thrown after the database interrupts or stops @@ -34,7 +36,7 @@ public class QueryTimeoutException extends TransientDataAccessException { * Constructor for QueryTimeoutException. * @param msg the detail message */ - public QueryTimeoutException(String msg) { + public QueryTimeoutException(@Nullable String msg) { super(msg); } @@ -43,7 +45,7 @@ public class QueryTimeoutException extends TransientDataAccessException { * @param msg the detail message * @param cause the root cause from the data access API in use */ - public QueryTimeoutException(String msg, Throwable cause) { + public QueryTimeoutException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/TransientDataAccessException.java b/spring-tx/src/main/java/org/springframework/dao/TransientDataAccessException.java index 98981e6dc9..761baabca1 100644 --- a/spring-tx/src/main/java/org/springframework/dao/TransientDataAccessException.java +++ b/spring-tx/src/main/java/org/springframework/dao/TransientDataAccessException.java @@ -34,7 +34,7 @@ public abstract class TransientDataAccessException extends DataAccessException { * Constructor for TransientDataAccessException. * @param msg the detail message */ - public TransientDataAccessException(String msg) { + public TransientDataAccessException(@Nullable String msg) { super(msg); } @@ -44,7 +44,7 @@ public abstract class TransientDataAccessException extends DataAccessException { * @param cause the root cause (usually from using an underlying * data access API such as JDBC) */ - public TransientDataAccessException(String msg, @Nullable Throwable cause) { + public TransientDataAccessException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/dao/TypeMismatchDataAccessException.java b/spring-tx/src/main/java/org/springframework/dao/TypeMismatchDataAccessException.java index 2808cfe04e..ac8c75651f 100644 --- a/spring-tx/src/main/java/org/springframework/dao/TypeMismatchDataAccessException.java +++ b/spring-tx/src/main/java/org/springframework/dao/TypeMismatchDataAccessException.java @@ -16,6 +16,8 @@ package org.springframework.dao; +import org.springframework.lang.Nullable; + /** * Exception thrown on mismatch between Java type and database type: * for example on an attempt to set an object of the wrong type @@ -30,7 +32,7 @@ public class TypeMismatchDataAccessException extends InvalidDataAccessResourceUs * Constructor for TypeMismatchDataAccessException. * @param msg the detail message */ - public TypeMismatchDataAccessException(String msg) { + public TypeMismatchDataAccessException(@Nullable String msg) { super(msg); } @@ -39,7 +41,7 @@ public class TypeMismatchDataAccessException extends InvalidDataAccessResourceUs * @param msg the detail message * @param cause the root cause from the data access API in use */ - public TypeMismatchDataAccessException(String msg, Throwable cause) { + public TypeMismatchDataAccessException(@Nullable String msg, @Nullable Throwable cause) { super(msg, cause); } diff --git a/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java b/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java index 2a514d2a32..3c4d213367 100644 --- a/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java +++ b/spring-tx/src/main/java/org/springframework/jca/support/LocalConnectionFactoryBean.java @@ -132,6 +132,7 @@ public class LocalConnectionFactoryBean implements FactoryBean, Initiali } @Override + @Nullable public Class getObjectType() { return (this.connectionFactory != null ? this.connectionFactory.getClass() : null); } diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionBeanRegistrationAotProcessor.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionBeanRegistrationAotProcessor.java index 0469370120..e8abaa78eb 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionBeanRegistrationAotProcessor.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionBeanRegistrationAotProcessor.java @@ -28,6 +28,7 @@ import org.springframework.beans.factory.aot.BeanRegistrationAotProcessor; import org.springframework.beans.factory.aot.BeanRegistrationCode; import org.springframework.beans.factory.support.RegisteredBean; import org.springframework.core.annotation.MergedAnnotations; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; import org.springframework.util.ReflectionUtils; @@ -46,6 +47,7 @@ class TransactionBeanRegistrationAotProcessor implements BeanRegistrationAotProc @Override + @Nullable public BeanRegistrationAotContribution processAheadOfTime(RegisteredBean registeredBean) { Class beanClass = registeredBean.getBeanClass(); if (isTransactional(beanClass)) { diff --git a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionRuntimeHints.java b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionRuntimeHints.java index 975d93be0a..60dc32eb73 100644 --- a/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionRuntimeHints.java +++ b/spring-tx/src/main/java/org/springframework/transaction/annotation/TransactionRuntimeHints.java @@ -21,6 +21,7 @@ import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeHint; import org.springframework.aot.hint.TypeReference; +import org.springframework.lang.Nullable; /** * {@link RuntimeHintsRegistrar} implementation that registers runtime hints for @@ -33,7 +34,7 @@ import org.springframework.aot.hint.TypeReference; class TransactionRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { hints.reflection().registerTypes(TypeReference.listOf(Isolation.class, Propagation.class), TypeHint.builtWith(MemberCategory.DECLARED_FIELDS)); } 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 97f7735d33..7697538739 100644 --- a/spring-web/src/main/java/org/springframework/http/ContentDisposition.java +++ b/spring-web/src/main/java/org/springframework/http/ContentDisposition.java @@ -788,19 +788,19 @@ public final class ContentDisposition { } @Override - public Builder name(String name) { + public Builder name(@Nullable String name) { this.name = name; return this; } @Override - public Builder filename(String filename) { + public Builder filename(@Nullable String filename) { this.filename = filename; return this; } @Override - public Builder filename(String filename, Charset charset) { + public Builder filename(@Nullable String filename, @Nullable Charset charset) { this.filename = filename; this.charset = charset; return this; @@ -808,28 +808,28 @@ public final class ContentDisposition { @Override @SuppressWarnings("deprecation") - public Builder size(Long size) { + public Builder size(@Nullable Long size) { this.size = size; return this; } @Override @SuppressWarnings("deprecation") - public Builder creationDate(ZonedDateTime creationDate) { + public Builder creationDate(@Nullable ZonedDateTime creationDate) { this.creationDate = creationDate; return this; } @Override @SuppressWarnings("deprecation") - public Builder modificationDate(ZonedDateTime modificationDate) { + public Builder modificationDate(@Nullable ZonedDateTime modificationDate) { this.modificationDate = modificationDate; return this; } @Override @SuppressWarnings("deprecation") - public Builder readDate(ZonedDateTime readDate) { + public Builder readDate(@Nullable ZonedDateTime readDate) { this.readDate = readDate; return this; } diff --git a/spring-web/src/main/java/org/springframework/http/ProblemDetail.java b/spring-web/src/main/java/org/springframework/http/ProblemDetail.java index 4df2316b62..2ab996f9ad 100644 --- a/spring-web/src/main/java/org/springframework/http/ProblemDetail.java +++ b/spring-web/src/main/java/org/springframework/http/ProblemDetail.java @@ -301,7 +301,7 @@ public class ProblemDetail { /** * Create a {@code ProblemDetail} instance with the given status and detail. */ - public static ProblemDetail forStatusAndDetail(HttpStatusCode status, String detail) { + public static ProblemDetail forStatusAndDetail(HttpStatusCode status, @Nullable String detail) { Assert.notNull(status, "HttpStatusCode is required"); ProblemDetail problemDetail = forStatus(status.value()); problemDetail.setDetail(detail); diff --git a/spring-web/src/main/java/org/springframework/http/ReadOnlyHttpHeaders.java b/spring-web/src/main/java/org/springframework/http/ReadOnlyHttpHeaders.java index 7c16b19d67..0298fa2dff 100644 --- a/spring-web/src/main/java/org/springframework/http/ReadOnlyHttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/ReadOnlyHttpHeaders.java @@ -54,6 +54,7 @@ class ReadOnlyHttpHeaders extends HttpHeaders { @Override + @Nullable public MediaType getContentType() { if (this.cachedContentType != null) { return this.cachedContentType; @@ -83,6 +84,7 @@ class ReadOnlyHttpHeaders extends HttpHeaders { } @Override + @Nullable public List get(Object key) { List values = this.headers.get(key); return (values != null ? Collections.unmodifiableList(values) : null); diff --git a/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborDecoder.java b/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborDecoder.java index 35bb39f093..7d04e82c14 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborDecoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborDecoder.java @@ -28,6 +28,7 @@ import org.springframework.core.io.buffer.DataBuffer; import org.springframework.http.MediaType; import org.springframework.http.codec.json.AbstractJackson2Decoder; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; @@ -53,7 +54,7 @@ public class Jackson2CborDecoder extends AbstractJackson2Decoder { @Override - public Flux decode(Publisher input, ResolvableType elementType, MimeType mimeType, Map hints) { + public Flux decode(Publisher input, ResolvableType elementType, @Nullable MimeType mimeType, @Nullable Map hints) { throw new UnsupportedOperationException("Does not support stream decoding yet"); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborEncoder.java b/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborEncoder.java index 424e3ec4b6..bee3462e73 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborEncoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/cbor/Jackson2CborEncoder.java @@ -29,6 +29,7 @@ import org.springframework.core.io.buffer.DataBufferFactory; import org.springframework.http.MediaType; import org.springframework.http.codec.json.AbstractJackson2Encoder; import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.util.MimeType; @@ -54,7 +55,8 @@ public class Jackson2CborEncoder extends AbstractJackson2Encoder { @Override - public Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, ResolvableType elementType, MimeType mimeType, Map hints) { + public Flux encode(Publisher inputStream, DataBufferFactory bufferFactory, ResolvableType elementType, + @Nullable MimeType mimeType, @Nullable Map hints) { throw new UnsupportedOperationException("Does not support stream encoding yet"); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java index eefdb10a34..2cf3fc8b7f 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Decoder.java @@ -300,6 +300,7 @@ public abstract class AbstractJackson2Decoder extends Jackson2CodecSupport imple // Jackson2CodecSupport @Override + @Nullable protected A getAnnotation(MethodParameter parameter, Class annotType) { return parameter.getParameterAnnotation(annotType); } diff --git a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java index c8dd9c4c08..78e20160ef 100644 --- a/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java +++ b/spring-web/src/main/java/org/springframework/http/codec/json/AbstractJackson2Encoder.java @@ -426,6 +426,7 @@ public abstract class AbstractJackson2Encoder extends Jackson2CodecSupport imple // Jackson2CodecSupport @Override + @Nullable protected A getAnnotation(MethodParameter parameter, Class annotType) { return parameter.getMethodAnnotation(annotType); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java index 54c09b8823..90c89b7239 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/ResourceHttpMessageConverter.java @@ -82,6 +82,7 @@ public class ResourceHttpMessageConverter extends AbstractHttpMessageConverter getObjectType() { return (this.objectMapper != null ? this.objectMapper.getClass() : null); } diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java b/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java index b6619f1f20..2c41e5165b 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/JacksonModulesRuntimeHints.java @@ -22,6 +22,7 @@ import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeHint.Builder; +import org.springframework.lang.Nullable; /** * {@link RuntimeHintsRegistrar} implementation that registers reflection entries @@ -38,7 +39,7 @@ class JacksonModulesRuntimeHints implements RuntimeHintsRegistrar { .withMembers(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS); @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { hints.reflection() .registerTypeIfPresent(classLoader, "com.fasterxml.jackson.datatype.jdk8.Jdk8Module", asJacksonModule) diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailRuntimeHints.java b/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailRuntimeHints.java index 3f569c44d3..8d4ef0a39a 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailRuntimeHints.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/ProblemDetailRuntimeHints.java @@ -20,6 +20,7 @@ import org.springframework.aot.hint.BindingReflectionHintsRegistrar; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.http.ProblemDetail; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -33,7 +34,7 @@ import org.springframework.util.ClassUtils; class ProblemDetailRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar(); bindingRegistrar.registerReflectionHints(hints.reflection(), ProblemDetail.class); if (ClassUtils.isPresent("com.fasterxml.jackson.dataformat.xml.XmlMapper", classLoader)) { diff --git a/spring-web/src/main/java/org/springframework/http/server/reactive/ServerHttpResponseDecorator.java b/spring-web/src/main/java/org/springframework/http/server/reactive/ServerHttpResponseDecorator.java index e336284d38..d6f7f85b95 100644 --- a/spring-web/src/main/java/org/springframework/http/server/reactive/ServerHttpResponseDecorator.java +++ b/spring-web/src/main/java/org/springframework/http/server/reactive/ServerHttpResponseDecorator.java @@ -61,6 +61,7 @@ public class ServerHttpResponseDecorator implements ServerHttpResponse { } @Override + @Nullable public HttpStatusCode getStatusCode() { return getDelegate().getStatusCode(); } @@ -71,6 +72,7 @@ public class ServerHttpResponseDecorator implements ServerHttpResponse { } @Override + @Nullable @Deprecated public Integer getRawStatusCode() { return getDelegate().getRawStatusCode(); diff --git a/spring-web/src/main/java/org/springframework/web/client/support/RestTemplateAdapter.java b/spring-web/src/main/java/org/springframework/web/client/support/RestTemplateAdapter.java index 3cd2b927db..364caa6be3 100644 --- a/spring-web/src/main/java/org/springframework/web/client/support/RestTemplateAdapter.java +++ b/spring-web/src/main/java/org/springframework/web/client/support/RestTemplateAdapter.java @@ -26,6 +26,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; import org.springframework.util.Assert; import org.springframework.web.client.RestTemplate; import org.springframework.web.service.invoker.HttpExchangeAdapter; @@ -70,6 +71,7 @@ public final class RestTemplateAdapter implements HttpExchangeAdapter { } @Override + @Nullable public T exchangeForBody(HttpRequestValues values, ParameterizedTypeReference bodyType) { return this.restTemplate.exchange(newRequest(values), bodyType).getBody(); } diff --git a/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java index a1a9e27371..0c3d92fb7d 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/AbstractRefreshableWebApplicationContext.java @@ -144,6 +144,7 @@ public abstract class AbstractRefreshableWebApplicationContext extends AbstractR } @Override + @Nullable public String[] getConfigLocations() { return super.getConfigLocations(); } diff --git a/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java b/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java index a331034bf1..a7ba4dff74 100644 --- a/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java +++ b/spring-web/src/main/java/org/springframework/web/multipart/support/AbstractMultipartHttpServletRequest.java @@ -84,6 +84,7 @@ public abstract class AbstractMultipartHttpServletRequest extends HttpServletReq } @Override + @Nullable public MultipartFile getFile(String name) { return getMultipartFiles().getFirst(name); } diff --git a/spring-web/src/main/java/org/springframework/web/util/BindErrorUtils.java b/spring-web/src/main/java/org/springframework/web/util/BindErrorUtils.java index fbb951f6ed..9230d0fb0d 100644 --- a/spring-web/src/main/java/org/springframework/web/util/BindErrorUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/BindErrorUtils.java @@ -25,6 +25,7 @@ import java.util.stream.Collectors; import org.springframework.context.MessageSource; import org.springframework.context.MessageSourceResolvable; import org.springframework.context.support.StaticMessageSource; +import org.springframework.lang.Nullable; import org.springframework.util.StringUtils; import org.springframework.validation.FieldError; @@ -114,6 +115,7 @@ public abstract class BindErrorUtils { } @Override + @Nullable protected String getDefaultMessage(MessageSourceResolvable resolvable, Locale locale) { String message = super.getDefaultMessage(resolvable, locale); return (resolvable instanceof FieldError error ? error.getField() + ": " + message : message); diff --git a/spring-web/src/main/java/org/springframework/web/util/WebUtilRuntimeHints.java b/spring-web/src/main/java/org/springframework/web/util/WebUtilRuntimeHints.java index 06976e58cd..6c9213ae04 100644 --- a/spring-web/src/main/java/org/springframework/web/util/WebUtilRuntimeHints.java +++ b/spring-web/src/main/java/org/springframework/web/util/WebUtilRuntimeHints.java @@ -19,6 +19,7 @@ package org.springframework.web.util; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.core.io.ClassPathResource; +import org.springframework.lang.Nullable; /** * {@link RuntimeHintsRegistrar} implementation that registers resource @@ -30,7 +31,7 @@ import org.springframework.core.io.ClassPathResource; class WebUtilRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { hints.resources().registerResource( new ClassPathResource("HtmlCharacterEntityReferences.properties", getClass())); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java index f115fc95d8..c2ba3a9ff5 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/server/DefaultServerRequest.java @@ -337,6 +337,7 @@ class DefaultServerRequest implements ServerRequest { } @Override + @Nullable public InetSocketAddress host() { return this.httpHeaders.getHost(); } diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeMethodArgumentResolver.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeMethodArgumentResolver.java index 8837aea441..3231b4a87e 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeMethodArgumentResolver.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/ServerWebExchangeMethodArgumentResolver.java @@ -80,6 +80,7 @@ public class ServerWebExchangeMethodArgumentResolver extends HandlerMethodArgume } @Override + @Nullable public Object resolveArgumentValue( MethodParameter methodParameter, BindingContext context, ServerWebExchange exchange) { diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java index f10e55ce5e..83d29fe105 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/socket/server/support/HandshakeWebSocketServiceRuntimeHints.java @@ -19,6 +19,7 @@ package org.springframework.web.reactive.socket.server.support; import org.springframework.aot.hint.MemberCategory; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; +import org.springframework.lang.Nullable; /** * {@link RuntimeHintsRegistrar} implementation that registers reflection hints related to @@ -30,7 +31,7 @@ import org.springframework.aot.hint.RuntimeHintsRegistrar; class HandshakeWebSocketServiceRuntimeHints implements RuntimeHintsRegistrar { @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { hints.reflection().registerType(HandshakeWebSocketService.initUpgradeStrategy().getClass(), MemberCategory.INVOKE_DECLARED_CONSTRUCTORS); } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java index ed44e6b057..5737e66060 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/function/DefaultServerRequest.java @@ -378,6 +378,7 @@ class DefaultServerRequest implements ServerRequest { } @Override + @Nullable public InetSocketAddress host() { return this.httpHeaders.getHost(); } diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeHandlerRuntimeHints.java b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeHandlerRuntimeHints.java index 3bdc25ecb7..6998234705 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeHandlerRuntimeHints.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/server/support/HandshakeHandlerRuntimeHints.java @@ -21,6 +21,7 @@ import org.springframework.aot.hint.ReflectionHints; import org.springframework.aot.hint.RuntimeHints; import org.springframework.aot.hint.RuntimeHintsRegistrar; import org.springframework.aot.hint.TypeReference; +import org.springframework.lang.Nullable; import org.springframework.util.ClassUtils; /** @@ -61,7 +62,7 @@ class HandshakeHandlerRuntimeHints implements RuntimeHintsRegistrar { } @Override - public void registerHints(RuntimeHints hints, ClassLoader classLoader) { + public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) { ReflectionHints reflectionHints = hints.reflection(); if (tomcatWsPresent) { registerType(reflectionHints, "org.springframework.web.socket.server.standard.TomcatRequestUpgradeStrategy");