Browse Source

Refine SingletonSupplier<T> static methods nullability

SingletonSupplier<T> supplier-based static methods nullability should
be refined to accept in a flexible way nullable or non-nullable T.

Closes gh-35559
pull/35567/head
Sébastien Deleuze 3 months ago
parent
commit
1e3f8651b8
  1. 5
      spring-context-support/src/main/java/org/springframework/cache/jcache/config/AbstractJCacheConfiguration.java
  2. 6
      spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/DefaultJCacheOperationSource.java
  3. 14
      spring-context/src/main/java/org/springframework/cache/annotation/AbstractCachingConfiguration.java
  4. 6
      spring-core/src/main/java/org/springframework/util/function/SingletonSupplier.java
  5. 2
      spring-core/src/main/java/org/springframework/util/function/SupplierUtils.java

5
spring-context-support/src/main/java/org/springframework/cache/jcache/config/AbstractJCacheConfiguration.java vendored

@ -41,11 +41,12 @@ import org.springframework.context.annotation.Role; @@ -41,11 +41,12 @@ import org.springframework.context.annotation.Role;
@Configuration(proxyBeanMethods = false)
public abstract class AbstractJCacheConfiguration extends AbstractCachingConfiguration {
protected @Nullable Supplier<@Nullable CacheResolver> exceptionCacheResolver;
@SuppressWarnings("NullAway.Init")
protected Supplier<@Nullable CacheResolver> exceptionCacheResolver;
@Override
@SuppressWarnings("NullAway") // https://github.com/uber/NullAway/issues/1128
@SuppressWarnings("NullAway") // See https://github.com/uber/NullAway/issues/1290
protected void useCachingConfigurer(CachingConfigurerSupplier cachingConfigurerSupplier) {
super.useCachingConfigurer(cachingConfigurerSupplier);
this.exceptionCacheResolver = cachingConfigurerSupplier.adapt(config -> {

6
spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/DefaultJCacheOperationSource.java vendored

@ -50,11 +50,11 @@ import org.springframework.util.function.SupplierUtils; @@ -50,11 +50,11 @@ import org.springframework.util.function.SupplierUtils;
public class DefaultJCacheOperationSource extends AnnotationJCacheOperationSource
implements BeanFactoryAware, SmartInitializingSingleton {
private @Nullable SingletonSupplier<CacheManager> cacheManager;
private @Nullable SingletonSupplier<@Nullable CacheManager> cacheManager;
private @Nullable SingletonSupplier<CacheResolver> cacheResolver;
private @Nullable SingletonSupplier<@Nullable CacheResolver> cacheResolver;
private @Nullable SingletonSupplier<CacheResolver> exceptionCacheResolver;
private @Nullable SingletonSupplier<@Nullable CacheResolver> exceptionCacheResolver;
private SingletonSupplier<KeyGenerator> keyGenerator;

14
spring-context/src/main/java/org/springframework/cache/annotation/AbstractCachingConfiguration.java vendored

@ -50,13 +50,17 @@ public abstract class AbstractCachingConfiguration implements ImportAware { @@ -50,13 +50,17 @@ public abstract class AbstractCachingConfiguration implements ImportAware {
protected @Nullable AnnotationAttributes enableCaching;
protected @Nullable Supplier<@Nullable CacheManager> cacheManager;
@SuppressWarnings("NullAway.Init")
protected Supplier<@Nullable CacheManager> cacheManager;
protected @Nullable Supplier<@Nullable CacheResolver> cacheResolver;
@SuppressWarnings("NullAway.Init")
protected Supplier<@Nullable CacheResolver> cacheResolver;
protected @Nullable Supplier<@Nullable KeyGenerator> keyGenerator;
@SuppressWarnings("NullAway.Init")
protected Supplier<@Nullable KeyGenerator> keyGenerator;
protected @Nullable Supplier<@Nullable CacheErrorHandler> errorHandler;
@SuppressWarnings("NullAway.Init")
protected Supplier<@Nullable CacheErrorHandler> errorHandler;
@Override
@ -101,7 +105,7 @@ public abstract class AbstractCachingConfiguration implements ImportAware { @@ -101,7 +105,7 @@ public abstract class AbstractCachingConfiguration implements ImportAware {
protected static class CachingConfigurerSupplier {
private final SingletonSupplier<CachingConfigurer> supplier;
private final SingletonSupplier<@Nullable CachingConfigurer> supplier;
public CachingConfigurerSupplier(Supplier<@Nullable CachingConfigurer> supplier) {
this.supplier = SingletonSupplier.ofNullable(supplier);

6
spring-core/src/main/java/org/springframework/util/function/SingletonSupplier.java

@ -143,7 +143,7 @@ public class SingletonSupplier<T extends @Nullable Object> implements Supplier<T @@ -143,7 +143,7 @@ public class SingletonSupplier<T extends @Nullable Object> implements Supplier<T
* @return the singleton supplier, or {@code null} if the instance was {@code null}
*/
@Contract("null -> null; !null -> !null")
public static <T> @Nullable SingletonSupplier<T> ofNullable(@Nullable T instance) {
public static <T extends @Nullable Object> @Nullable SingletonSupplier<T> ofNullable(T instance) {
return (instance != null ? new SingletonSupplier<>(instance) : null);
}
@ -152,7 +152,7 @@ public class SingletonSupplier<T extends @Nullable Object> implements Supplier<T @@ -152,7 +152,7 @@ public class SingletonSupplier<T extends @Nullable Object> implements Supplier<T
* @param supplier the instance supplier (never {@code null})
* @return the singleton supplier (never {@code null})
*/
public static <T> SingletonSupplier<T> of(Supplier<T> supplier) {
public static <T extends @Nullable Object> SingletonSupplier<T> of(Supplier<T> supplier) {
return new SingletonSupplier<>(supplier);
}
@ -162,7 +162,7 @@ public class SingletonSupplier<T extends @Nullable Object> implements Supplier<T @@ -162,7 +162,7 @@ public class SingletonSupplier<T extends @Nullable Object> implements Supplier<T
* @return the singleton supplier, or {@code null} if the instance supplier was {@code null}
*/
@Contract("null -> null; !null -> !null")
public static <T> @Nullable SingletonSupplier<T> ofNullable(@Nullable Supplier<@Nullable T> supplier) {
public static <T extends @Nullable Object> @Nullable SingletonSupplier<T> ofNullable(@Nullable Supplier<T> supplier) {
return (supplier != null ? new SingletonSupplier<>(supplier) : null);
}

2
spring-core/src/main/java/org/springframework/util/function/SupplierUtils.java

@ -38,7 +38,7 @@ public abstract class SupplierUtils { @@ -38,7 +38,7 @@ public abstract class SupplierUtils {
* @return the supplier's result, or {@code null} if none
*/
@Contract("null -> null")
public static <T> @Nullable T resolve(@Nullable Supplier<T> supplier) {
public static <T extends @Nullable Object> @Nullable T resolve(@Nullable Supplier<T> supplier) {
return (supplier != null ? supplier.get() : null);
}

Loading…
Cancel
Save