From 9a485959c465fd9e384d786bdd0215a624579540 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Wed, 6 Aug 2025 13:40:40 +0200 Subject: [PATCH] Add nullability annotations to module/spring-boot-validation See gh-46587 --- .../PrimaryDefaultValidatorPostProcessor.java | 8 ++++++-- .../boot/validation/autoconfigure/ValidatorAdapter.java | 9 ++++++--- .../boot/validation/autoconfigure/package-info.java | 3 +++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/PrimaryDefaultValidatorPostProcessor.java b/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/PrimaryDefaultValidatorPostProcessor.java index 39ae0a1f525..d7ec00615bc 100644 --- a/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/PrimaryDefaultValidatorPostProcessor.java +++ b/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/PrimaryDefaultValidatorPostProcessor.java @@ -16,6 +16,8 @@ package org.springframework.boot.validation.autoconfigure; +import org.jspecify.annotations.Nullable; + import org.springframework.beans.BeansException; import org.springframework.beans.factory.BeanFactory; import org.springframework.beans.factory.BeanFactoryAware; @@ -24,6 +26,7 @@ import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.BeanDefinitionRegistry; import org.springframework.context.annotation.ImportBeanDefinitionRegistrar; import org.springframework.core.type.AnnotationMetadata; +import org.springframework.util.Assert; import org.springframework.validation.Validator; import org.springframework.validation.beanvalidation.LocalValidatorFactoryBean; @@ -46,7 +49,7 @@ class PrimaryDefaultValidatorPostProcessor implements ImportBeanDefinitionRegist */ private static final String VALIDATOR_BEAN_NAME = "defaultValidator"; - private ConfigurableListableBeanFactory beanFactory; + private @Nullable ConfigurableListableBeanFactory beanFactory; @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { @@ -63,7 +66,7 @@ class PrimaryDefaultValidatorPostProcessor implements ImportBeanDefinitionRegist } } - private BeanDefinition getAutoConfiguredValidator(BeanDefinitionRegistry registry) { + private @Nullable BeanDefinition getAutoConfiguredValidator(BeanDefinitionRegistry registry) { if (registry.containsBeanDefinition(VALIDATOR_BEAN_NAME)) { BeanDefinition definition = registry.getBeanDefinition(VALIDATOR_BEAN_NAME); if (definition.getRole() == BeanDefinition.ROLE_INFRASTRUCTURE @@ -79,6 +82,7 @@ class PrimaryDefaultValidatorPostProcessor implements ImportBeanDefinitionRegist } private boolean hasPrimarySpringValidator() { + Assert.state(this.beanFactory != null, "'beanFactory' must not be null"); String[] validatorBeans = this.beanFactory.getBeanNamesForType(Validator.class, false, false); for (String validatorBean : validatorBeans) { BeanDefinition definition = this.beanFactory.getBeanDefinition(validatorBean); diff --git a/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/ValidatorAdapter.java b/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/ValidatorAdapter.java index 69605c39151..86a7ac21a17 100644 --- a/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/ValidatorAdapter.java +++ b/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/ValidatorAdapter.java @@ -17,6 +17,7 @@ package org.springframework.boot.validation.autoconfigure; import jakarta.validation.ValidationException; +import org.jspecify.annotations.Nullable; import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; @@ -26,6 +27,7 @@ import org.springframework.boot.validation.MessageInterpolatorFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.MessageSource; +import org.springframework.util.Assert; import org.springframework.validation.Errors; import org.springframework.validation.SmartValidator; import org.springframework.validation.Validator; @@ -104,7 +106,7 @@ public class ValidatorAdapter implements SmartValidator, ApplicationContextAware * @param validator an existing validator to use or {@code null} * @return the validator to use */ - public static Validator get(ApplicationContext applicationContext, Validator validator) { + public static Validator get(ApplicationContext applicationContext, @Nullable Validator validator) { if (validator != null) { return wrap(validator, false); } @@ -119,7 +121,7 @@ public class ValidatorAdapter implements SmartValidator, ApplicationContextAware return create(applicationContext); } - private static Validator getExisting(ApplicationContext applicationContext) { + private static @Nullable Validator getExisting(ApplicationContext applicationContext) { try { jakarta.validation.Validator validatorBean = applicationContext.getBean(jakarta.validation.Validator.class); if (validatorBean instanceof Validator validator) { @@ -156,7 +158,8 @@ public class ValidatorAdapter implements SmartValidator, ApplicationContextAware @Override @SuppressWarnings("unchecked") - public T unwrap(Class type) { + public @Nullable T unwrap(@Nullable Class type) { + Assert.state(type != null, "'type' must not be null"); if (type.isInstance(this.target)) { return (T) this.target; } diff --git a/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/package-info.java b/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/package-info.java index dd70c0b9290..6a7dbcdfdc9 100644 --- a/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/package-info.java +++ b/module/spring-boot-validation/src/main/java/org/springframework/boot/validation/autoconfigure/package-info.java @@ -17,4 +17,7 @@ /** * Auto-configuration for (JSR-303) Validation. */ +@NullMarked package org.springframework.boot.validation.autoconfigure; + +import org.jspecify.annotations.NullMarked;