From f9fe8efb2e456516da760a67b4005a20d39b27a4 Mon Sep 17 00:00:00 2001 From: Patrick Strawderman Date: Mon, 19 Feb 2024 08:57:33 -0800 Subject: [PATCH] Use ConcurrentHashMap.newKeySet In places where a ConcurrentHashMap was used as a set by wrapping it with Collections.newSetFromMap, switch to just using the set returned by ConcurrentHashMap.newKeySet directly. Closes gh-32294 --- .../aop/framework/autoproxy/AbstractAutoProxyCreator.java | 3 +-- .../springframework/beans/CachedIntrospectionResults.java | 3 +-- .../annotation/AutowiredAnnotationBeanPostProcessor.java | 3 +-- .../beans/factory/config/PropertyOverrideConfigurer.java | 3 +-- .../beans/factory/support/AbstractBeanFactory.java | 3 +-- .../beans/factory/support/DefaultListableBeanFactory.java | 3 +-- .../factory/support/DefaultSingletonBeanRegistry.java | 7 ++----- .../context/event/EventListenerMethodProcessor.java | 3 +-- .../context/support/DefaultLifecycleProcessor.java | 2 +- .../annotation/ScheduledAnnotationBeanPostProcessor.java | 3 +-- .../org/springframework/core/DecoratingClassLoader.java | 5 ++--- .../springframework/core/task/SimpleAsyncTaskExecutor.java | 3 +-- .../web/method/annotation/SessionAttributesHandler.java | 2 +- .../result/method/annotation/SessionAttributesHandler.java | 2 +- 14 files changed, 16 insertions(+), 29 deletions(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java index 611a1bac8b9..c58ecb6b803 100644 --- a/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java +++ b/spring-aop/src/main/java/org/springframework/aop/framework/autoproxy/AbstractAutoProxyCreator.java @@ -20,7 +20,6 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -136,7 +135,7 @@ public abstract class AbstractAutoProxyCreator extends ProxyProcessorSupport @Nullable private BeanFactory beanFactory; - private final Set targetSourcedBeans = Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + private final Set targetSourcedBeans = ConcurrentHashMap.newKeySet(16); private final Map earlyBeanReferences = new ConcurrentHashMap<>(16); diff --git a/spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java b/spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java index 96d9f94548d..b6ad325f5de 100644 --- a/spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java +++ b/spring-beans/src/main/java/org/springframework/beans/CachedIntrospectionResults.java @@ -23,7 +23,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.net.URL; import java.security.ProtectionDomain; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -88,7 +87,7 @@ public final class CachedIntrospectionResults { * accept classes from, even if the classes do not qualify as cache-safe. */ static final Set acceptedClassLoaders = - Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + ConcurrentHashMap.newKeySet(16); /** * Map keyed by Class containing CachedIntrospectionResults, strongly held. diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java index c52bddcc623..93cd5b17c08 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/annotation/AutowiredAnnotationBeanPostProcessor.java @@ -29,7 +29,6 @@ import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -178,7 +177,7 @@ public class AutowiredAnnotationBeanPostProcessor implements SmartInstantiationA @Nullable private MetadataReaderFactory metadataReaderFactory; - private final Set lookupMethodsChecked = Collections.newSetFromMap(new ConcurrentHashMap<>(256)); + private final Set lookupMethodsChecked = ConcurrentHashMap.newKeySet(256); private final Map, Constructor[]> candidateConstructorsCache = new ConcurrentHashMap<>(256); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyOverrideConfigurer.java b/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyOverrideConfigurer.java index e073d81b47d..0e17d159e01 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyOverrideConfigurer.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/config/PropertyOverrideConfigurer.java @@ -16,7 +16,6 @@ package org.springframework.beans.factory.config; -import java.util.Collections; import java.util.Enumeration; import java.util.Properties; import java.util.Set; @@ -77,7 +76,7 @@ public class PropertyOverrideConfigurer extends PropertyResourceConfigurer { /** * Contains names of beans that have overrides. */ - private final Set beanNames = Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + private final Set beanNames = ConcurrentHashMap.newKeySet(16); /** diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java index 8f2e431b09e..06d3448d569 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/AbstractBeanFactory.java @@ -20,7 +20,6 @@ import java.beans.PropertyEditor; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -165,7 +164,7 @@ public abstract class AbstractBeanFactory extends FactoryBeanRegistrySupport imp private final Map mergedBeanDefinitions = new ConcurrentHashMap<>(256); /** Names of beans that have already been created at least once. */ - private final Set alreadyCreated = Collections.newSetFromMap(new ConcurrentHashMap<>(256)); + private final Set alreadyCreated = ConcurrentHashMap.newKeySet(256); /** Names of beans that are currently in creation. */ private final ThreadLocal prototypesCurrentlyInCreation = diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java index dabb08abbae..3efb785f6dd 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultListableBeanFactory.java @@ -29,7 +29,6 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.Comparator; import java.util.IdentityHashMap; import java.util.Iterator; @@ -169,7 +168,7 @@ public class DefaultListableBeanFactory extends AbstractAutowireCapableBeanFacto private final Map mergedBeanDefinitionHolders = new ConcurrentHashMap<>(256); // Set of bean definition names with a primary marker. */ - private final Set primaryBeanNames = Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + private final Set primaryBeanNames = ConcurrentHashMap.newKeySet(16); /** Map of singleton and non-singleton bean names, keyed by dependency type. */ private final Map, String[]> allBeanNamesByType = new ConcurrentHashMap<>(64); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java index bc595b9036f..be14aa03b4f 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/DefaultSingletonBeanRegistry.java @@ -16,7 +16,6 @@ package org.springframework.beans.factory.support; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; @@ -91,12 +90,10 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements private final Lock singletonLock = new ReentrantLock(); /** Names of beans that are currently in creation. */ - private final Set singletonsCurrentlyInCreation = - Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + private final Set singletonsCurrentlyInCreation = ConcurrentHashMap.newKeySet(16); /** Names of beans currently excluded from in creation checks. */ - private final Set inCreationCheckExclusions = - Collections.newSetFromMap(new ConcurrentHashMap<>(16)); + private final Set inCreationCheckExclusions = ConcurrentHashMap.newKeySet(16); @Nullable private volatile Thread singletonCreationThread; diff --git a/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java b/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java index 4e16ecadfab..01b2fa6523a 100644 --- a/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/event/EventListenerMethodProcessor.java @@ -18,7 +18,6 @@ package org.springframework.context.event; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Set; @@ -82,7 +81,7 @@ public class EventListenerMethodProcessor @Nullable private final EventExpressionEvaluator evaluator; - private final Set> nonAnnotatedClasses = Collections.newSetFromMap(new ConcurrentHashMap<>(64)); + private final Set> nonAnnotatedClasses = ConcurrentHashMap.newKeySet(64); public EventListenerMethodProcessor() { diff --git a/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java b/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java index 43e4c52926b..2bdebcc5444 100644 --- a/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java +++ b/spring-context/src/main/java/org/springframework/context/support/DefaultLifecycleProcessor.java @@ -229,7 +229,7 @@ public class DefaultLifecycleProcessor implements LifecycleProcessor, BeanFactor void stopForRestart() { if (this.running) { - this.stoppedBeans = Collections.newSetFromMap(new ConcurrentHashMap<>()); + this.stoppedBeans = ConcurrentHashMap.newKeySet(); stopBeans(); this.running = false; } diff --git a/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java b/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java index 9bf79177cf0..08369a2caa3 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java +++ b/spring-context/src/main/java/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.java @@ -20,7 +20,6 @@ import java.lang.reflect.Method; import java.time.Duration; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.IdentityHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -149,7 +148,7 @@ public class ScheduledAnnotationBeanPostProcessor @Nullable private TaskSchedulerRouter localScheduler; - private final Set> nonAnnotatedClasses = Collections.newSetFromMap(new ConcurrentHashMap<>(64)); + private final Set> nonAnnotatedClasses = ConcurrentHashMap.newKeySet(64); private final Map> scheduledTasks = new IdentityHashMap<>(16); diff --git a/spring-core/src/main/java/org/springframework/core/DecoratingClassLoader.java b/spring-core/src/main/java/org/springframework/core/DecoratingClassLoader.java index a8563cafbeb..12fda56e524 100644 --- a/spring-core/src/main/java/org/springframework/core/DecoratingClassLoader.java +++ b/spring-core/src/main/java/org/springframework/core/DecoratingClassLoader.java @@ -16,7 +16,6 @@ package org.springframework.core; -import java.util.Collections; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -39,9 +38,9 @@ public abstract class DecoratingClassLoader extends ClassLoader { } - private final Set excludedPackages = Collections.newSetFromMap(new ConcurrentHashMap<>(8)); + private final Set excludedPackages = ConcurrentHashMap.newKeySet(8); - private final Set excludedClasses = Collections.newSetFromMap(new ConcurrentHashMap<>(8)); + private final Set excludedClasses = ConcurrentHashMap.newKeySet(8); /** diff --git a/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java b/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java index 4206695f0b4..d71d77dd8f8 100644 --- a/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java +++ b/spring-core/src/main/java/org/springframework/core/task/SimpleAsyncTaskExecutor.java @@ -17,7 +17,6 @@ package org.springframework.core.task; import java.io.Serializable; -import java.util.Collections; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; @@ -183,7 +182,7 @@ public class SimpleAsyncTaskExecutor extends CustomizableThreadCreator public void setTaskTerminationTimeout(long timeout) { Assert.isTrue(timeout >= 0, "Timeout value must be >=0"); this.taskTerminationTimeout = timeout; - this.activeThreads = (timeout > 0 ? Collections.newSetFromMap(new ConcurrentHashMap<>()) : null); + this.activeThreads = (timeout > 0 ? ConcurrentHashMap.newKeySet() : null); } /** diff --git a/spring-web/src/main/java/org/springframework/web/method/annotation/SessionAttributesHandler.java b/spring-web/src/main/java/org/springframework/web/method/annotation/SessionAttributesHandler.java index 6cabf637457..b9071f44843 100644 --- a/spring-web/src/main/java/org/springframework/web/method/annotation/SessionAttributesHandler.java +++ b/spring-web/src/main/java/org/springframework/web/method/annotation/SessionAttributesHandler.java @@ -64,7 +64,7 @@ public class SessionAttributesHandler { private final Set> attributeTypes = new HashSet<>(); - private final Set knownAttributeNames = Collections.newSetFromMap(new ConcurrentHashMap<>(4)); + private final Set knownAttributeNames = ConcurrentHashMap.newKeySet(4); private final SessionAttributeStore sessionAttributeStore; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/SessionAttributesHandler.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/SessionAttributesHandler.java index 2ecc6881b4c..56474dad8ee 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/SessionAttributesHandler.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/annotation/SessionAttributesHandler.java @@ -42,7 +42,7 @@ class SessionAttributesHandler { private final Set> attributeTypes = new HashSet<>(); - private final Set knownAttributeNames = Collections.newSetFromMap(new ConcurrentHashMap<>(4)); + private final Set knownAttributeNames = ConcurrentHashMap.newKeySet(4); /**