From 917c41fd52f655fc4a7c4448e1164afd7e77d21a Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Mon, 21 Nov 2022 15:57:32 +0100 Subject: [PATCH] Use Set.of() for constant sets where appropriate --- .../AspectJAdviceParameterNameDiscoverer.java | 16 ++-- .../aspectj/AspectJExpressionPointcut.java | 27 +++---- .../annotation/ConfigurationClassUtils.java | 13 ++-- .../SpringValidatorAdapter.java | 10 +-- .../core/CollectionFactory.java | 51 ++++++------ .../SQLStateSQLExceptionTranslator.java | 78 +++++++++---------- .../orm/jpa/SharedEntityManagerCreator.java | 36 ++++----- .../PersistenceManagedTypesScanner.java | 3 +- .../context/MergedContextConfiguration.java | 4 +- .../xml/SourceHttpMessageConverter.java | 16 ++-- .../server/adapter/HttpWebHandlerAdapter.java | 10 +-- .../socket/sockjs/client/SockJsClient.java | 10 +-- 12 files changed, 117 insertions(+), 157 deletions(-) diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAdviceParameterNameDiscoverer.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAdviceParameterNameDiscoverer.java index 13d21faab20..68918ee376b 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAdviceParameterNameDiscoverer.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJAdviceParameterNameDiscoverer.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -132,17 +132,17 @@ public class AspectJAdviceParameterNameDiscoverer implements ParameterNameDiscov private static final int STEP_REFERENCE_PCUT_BINDING = 7; private static final int STEP_FINISHED = 8; - private static final Set singleValuedAnnotationPcds = new HashSet<>(); + private static final Set singleValuedAnnotationPcds = Set.of( + "@this", + "@target", + "@within", + "@withincode", + "@annotation"); + private static final Set nonReferencePointcutTokens = new HashSet<>(); static { - singleValuedAnnotationPcds.add("@this"); - singleValuedAnnotationPcds.add("@target"); - singleValuedAnnotationPcds.add("@within"); - singleValuedAnnotationPcds.add("@withincode"); - singleValuedAnnotationPcds.add("@annotation"); - Set pointcutPrimitives = PointcutParser.getAllSupportedPointcutPrimitives(); for (PointcutPrimitive primitive : pointcutPrimitives) { nonReferencePointcutTokens.add(primitive.getName()); diff --git a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java index b5c8b87ed84..27281367b69 100644 --- a/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java +++ b/spring-aop/src/main/java/org/springframework/aop/aspectj/AspectJExpressionPointcut.java @@ -21,7 +21,6 @@ import java.io.ObjectInputStream; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays; -import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -85,21 +84,17 @@ import org.springframework.util.StringUtils; public class AspectJExpressionPointcut extends AbstractExpressionPointcut implements ClassFilter, IntroductionAwareMethodMatcher, BeanFactoryAware { - private static final Set SUPPORTED_PRIMITIVES = new HashSet<>(); - - static { - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.EXECUTION); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.ARGS); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.REFERENCE); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.THIS); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.TARGET); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.WITHIN); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ANNOTATION); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_WITHIN); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_ARGS); - SUPPORTED_PRIMITIVES.add(PointcutPrimitive.AT_TARGET); - } - + private static final Set SUPPORTED_PRIMITIVES = Set.of( + PointcutPrimitive.EXECUTION, + PointcutPrimitive.ARGS, + PointcutPrimitive.REFERENCE, + PointcutPrimitive.THIS, + PointcutPrimitive.TARGET, + PointcutPrimitive.WITHIN, + PointcutPrimitive.AT_ANNOTATION, + PointcutPrimitive.AT_WITHIN, + PointcutPrimitive.AT_ARGS, + PointcutPrimitive.AT_TARGET); private static final Log logger = LogFactory.getLog(AspectJExpressionPointcut.class); diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java index f16c0404046..b957179e548 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ConfigurationClassUtils.java @@ -17,7 +17,6 @@ package org.springframework.context.annotation; import java.io.IOException; -import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -66,14 +65,12 @@ public abstract class ConfigurationClassUtils { private static final Log logger = LogFactory.getLog(ConfigurationClassUtils.class); - private static final Set candidateIndicators = new HashSet<>(8); + private static final Set candidateIndicators = Set.of( + Component.class.getName(), + ComponentScan.class.getName(), + Import.class.getName(), + ImportResource.class.getName()); - static { - candidateIndicators.add(Component.class.getName()); - candidateIndicators.add(ComponentScan.class.getName()); - candidateIndicators.add(Import.class.getName()); - candidateIndicators.add(ImportResource.class.getName()); - } /** * Initialize a configuration class proxy for the specified class. diff --git a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java index ef6d19b3afb..7fae422343e 100644 --- a/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java +++ b/spring-context/src/main/java/org/springframework/validation/beanvalidation/SpringValidatorAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,6 @@ package org.springframework.validation.beanvalidation; import java.io.Serializable; import java.util.ArrayList; -import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -66,13 +65,8 @@ import org.springframework.validation.SmartValidator; */ public class SpringValidatorAdapter implements SmartValidator, jakarta.validation.Validator { - private static final Set internalAnnotationAttributes = new HashSet<>(4); + private static final Set internalAnnotationAttributes = Set.of("message", "groups", "payload"); - static { - internalAnnotationAttributes.add("message"); - internalAnnotationAttributes.add("groups"); - internalAnnotationAttributes.add("payload"); - } @Nullable private jakarta.validation.Validator targetValidator; diff --git a/spring-core/src/main/java/org/springframework/core/CollectionFactory.java b/spring-core/src/main/java/org/springframework/core/CollectionFactory.java index ea284fc269e..cbda0925500 100644 --- a/spring-core/src/main/java/org/springframework/core/CollectionFactory.java +++ b/spring-core/src/main/java/org/springframework/core/CollectionFactory.java @@ -55,34 +55,31 @@ import org.springframework.util.ReflectionUtils; */ public final class CollectionFactory { - private static final Set> approximableCollectionTypes = new HashSet<>(); + private static final Set> approximableCollectionTypes = Set.of( + // Standard collection interfaces + Collection.class, + List.class, + Set.class, + SortedSet.class, + NavigableSet.class, + // Common concrete collection classes + ArrayList.class, + LinkedList.class, + HashSet.class, + LinkedHashSet.class, + TreeSet.class, + EnumSet.class); - private static final Set> approximableMapTypes = new HashSet<>(); - - - static { - // Standard collection interfaces - approximableCollectionTypes.add(Collection.class); - approximableCollectionTypes.add(List.class); - approximableCollectionTypes.add(Set.class); - approximableCollectionTypes.add(SortedSet.class); - approximableCollectionTypes.add(NavigableSet.class); - approximableMapTypes.add(Map.class); - approximableMapTypes.add(SortedMap.class); - approximableMapTypes.add(NavigableMap.class); - - // Common concrete collection classes - approximableCollectionTypes.add(ArrayList.class); - approximableCollectionTypes.add(LinkedList.class); - approximableCollectionTypes.add(HashSet.class); - approximableCollectionTypes.add(LinkedHashSet.class); - approximableCollectionTypes.add(TreeSet.class); - approximableCollectionTypes.add(EnumSet.class); - approximableMapTypes.add(HashMap.class); - approximableMapTypes.add(LinkedHashMap.class); - approximableMapTypes.add(TreeMap.class); - approximableMapTypes.add(EnumMap.class); - } + private static final Set> approximableMapTypes = Set.of( + // Standard map interfaces + Map.class, + SortedMap.class, + NavigableMap.class, + // Common concrete map classes + HashMap.class, + LinkedHashMap.class, + TreeMap.class, + EnumMap.class); private CollectionFactory() { diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java index 45859935cd0..9bdec521d59 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/support/SQLStateSQLExceptionTranslator.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2019 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,6 @@ package org.springframework.jdbc.support; import java.sql.SQLException; -import java.util.HashSet; import java.util.Set; import org.springframework.dao.ConcurrencyFailureException; @@ -46,45 +45,42 @@ import org.springframework.lang.Nullable; */ public class SQLStateSQLExceptionTranslator extends AbstractFallbackSQLExceptionTranslator { - private static final Set BAD_SQL_GRAMMAR_CODES = new HashSet<>(8); - - private static final Set DATA_INTEGRITY_VIOLATION_CODES = new HashSet<>(8); - - private static final Set DATA_ACCESS_RESOURCE_FAILURE_CODES = new HashSet<>(8); - - private static final Set TRANSIENT_DATA_ACCESS_RESOURCE_CODES = new HashSet<>(8); - - private static final Set CONCURRENCY_FAILURE_CODES = new HashSet<>(4); - - - static { - BAD_SQL_GRAMMAR_CODES.add("07"); // Dynamic SQL error - BAD_SQL_GRAMMAR_CODES.add("21"); // Cardinality violation - BAD_SQL_GRAMMAR_CODES.add("2A"); // Syntax error direct SQL - BAD_SQL_GRAMMAR_CODES.add("37"); // Syntax error dynamic SQL - BAD_SQL_GRAMMAR_CODES.add("42"); // General SQL syntax error - BAD_SQL_GRAMMAR_CODES.add("65"); // Oracle: unknown identifier - - DATA_INTEGRITY_VIOLATION_CODES.add("01"); // Data truncation - DATA_INTEGRITY_VIOLATION_CODES.add("02"); // No data found - DATA_INTEGRITY_VIOLATION_CODES.add("22"); // Value out of range - DATA_INTEGRITY_VIOLATION_CODES.add("23"); // Integrity constraint violation - DATA_INTEGRITY_VIOLATION_CODES.add("27"); // Triggered data change violation - DATA_INTEGRITY_VIOLATION_CODES.add("44"); // With check violation - - DATA_ACCESS_RESOURCE_FAILURE_CODES.add("08"); // Connection exception - DATA_ACCESS_RESOURCE_FAILURE_CODES.add("53"); // PostgreSQL: insufficient resources (e.g. disk full) - DATA_ACCESS_RESOURCE_FAILURE_CODES.add("54"); // PostgreSQL: program limit exceeded (e.g. statement too complex) - DATA_ACCESS_RESOURCE_FAILURE_CODES.add("57"); // DB2: out-of-memory exception / database not started - DATA_ACCESS_RESOURCE_FAILURE_CODES.add("58"); // DB2: unexpected system error - - TRANSIENT_DATA_ACCESS_RESOURCE_CODES.add("JW"); // Sybase: internal I/O error - TRANSIENT_DATA_ACCESS_RESOURCE_CODES.add("JZ"); // Sybase: unexpected I/O error - TRANSIENT_DATA_ACCESS_RESOURCE_CODES.add("S1"); // DB2: communication failure - - CONCURRENCY_FAILURE_CODES.add("40"); // Transaction rollback - CONCURRENCY_FAILURE_CODES.add("61"); // Oracle: deadlock - } + private static final Set BAD_SQL_GRAMMAR_CODES = Set.of( + "07", // Dynamic SQL error + "21", // Cardinality violation + "2A", // Syntax error direct SQL + "37", // Syntax error dynamic SQL + "42", // General SQL syntax error + "65" // Oracle: unknown identifier + ); + + private static final Set DATA_INTEGRITY_VIOLATION_CODES = Set.of( + "01", // Data truncation + "02", // No data found + "22", // Value out of range + "23", // Integrity constraint violation + "27", // Triggered data change violation + "44" // With check violation + ); + + private static final Set DATA_ACCESS_RESOURCE_FAILURE_CODES = Set.of( + "08", // Connection exception + "53", // PostgreSQL: insufficient resources (e.g. disk full) + "54", // PostgreSQL: program limit exceeded (e.g. statement too complex) + "57", // DB2: out-of-memory exception / database not started + "58" // DB2: unexpected system error + ); + + private static final Set TRANSIENT_DATA_ACCESS_RESOURCE_CODES = Set.of( + "JW", // Sybase: internal I/O error + "JZ", // Sybase: unexpected I/O error + "S1" // DB2: communication failure + ); + + private static final Set CONCURRENCY_FAILURE_CODES = Set.of( + "40", // Transaction rollback + "61" // Oracle: deadlock + ); @Override diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java index f0665ec7e68..eb4967245b9 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/SharedEntityManagerCreator.java @@ -23,7 +23,6 @@ import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Proxy; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.Map; import java.util.Set; @@ -73,25 +72,22 @@ public abstract class SharedEntityManagerCreator { private static final Map, Class[]> cachedQueryInterfaces = new ConcurrentReferenceHashMap<>(4); - private static final Set transactionRequiringMethods = new HashSet<>(8); - - private static final Set queryTerminatingMethods = new HashSet<>(8); - - static { - transactionRequiringMethods.add("joinTransaction"); - transactionRequiringMethods.add("flush"); - transactionRequiringMethods.add("persist"); - transactionRequiringMethods.add("merge"); - transactionRequiringMethods.add("remove"); - transactionRequiringMethods.add("refresh"); - - queryTerminatingMethods.add("execute"); // JPA 2.1 StoredProcedureQuery - queryTerminatingMethods.add("executeUpdate"); - queryTerminatingMethods.add("getSingleResult"); - queryTerminatingMethods.add("getResultStream"); - queryTerminatingMethods.add("getResultList"); - queryTerminatingMethods.add("list"); // Hibernate Query.list() method - } + private static final Set transactionRequiringMethods = Set.of( + "joinTransaction", + "flush", + "persist", + "merge", + "remove", + "refresh"); + + private static final Set queryTerminatingMethods = Set.of( + "execute", // JPA 2.1 StoredProcedureQuery + "executeUpdate", + "getSingleResult", + "getResultStream", + "getResultList", + "list" // Hibernate Query.list() method + ); /** diff --git a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java index 74ab9bb8e77..48b5d11fa6d 100644 --- a/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java +++ b/spring-orm/src/main/java/org/springframework/orm/jpa/persistenceunit/PersistenceManagedTypesScanner.java @@ -58,10 +58,9 @@ public final class PersistenceManagedTypesScanner { private static final String PACKAGE_INFO_SUFFIX = ".package-info"; - private static final Set entityTypeFilters; + private static final Set entityTypeFilters = new LinkedHashSet<>(4); static { - entityTypeFilters = new LinkedHashSet<>(8); entityTypeFilters.add(new AnnotationTypeFilter(Entity.class, false)); entityTypeFilters.add(new AnnotationTypeFilter(Embeddable.class, false)); entityTypeFilters.add(new AnnotationTypeFilter(MappedSuperclass.class, false)); diff --git a/spring-test/src/main/java/org/springframework/test/context/MergedContextConfiguration.java b/spring-test/src/main/java/org/springframework/test/context/MergedContextConfiguration.java index 05427a80dac..49d0181e251 100644 --- a/spring-test/src/main/java/org/springframework/test/context/MergedContextConfiguration.java +++ b/spring-test/src/main/java/org/springframework/test/context/MergedContextConfiguration.java @@ -75,9 +75,9 @@ public class MergedContextConfiguration implements Serializable { private static final Class[] EMPTY_CLASS_ARRAY = new Class[0]; private static final Set>> EMPTY_INITIALIZER_CLASSES = - Collections.>> emptySet(); + Collections.emptySet(); - private static final Set EMPTY_CONTEXT_CUSTOMIZERS = Collections. emptySet(); + private static final Set EMPTY_CONTEXT_CUSTOMIZERS = Collections.emptySet(); private final Class testClass; diff --git a/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java index a2a6c77afee..40d4b4de422 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/xml/SourceHttpMessageConverter.java @@ -21,7 +21,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.StringReader; -import java.util.HashSet; import java.util.Set; import javax.xml.parsers.DocumentBuilder; @@ -75,15 +74,12 @@ public class SourceHttpMessageConverter extends AbstractHttpMe private static final XMLResolver NO_OP_XML_RESOLVER = (publicID, systemID, base, ns) -> InputStream.nullInputStream(); - private static final Set> SUPPORTED_CLASSES = new HashSet<>(8); - - static { - SUPPORTED_CLASSES.add(DOMSource.class); - SUPPORTED_CLASSES.add(SAXSource.class); - SUPPORTED_CLASSES.add(StAXSource.class); - SUPPORTED_CLASSES.add(StreamSource.class); - SUPPORTED_CLASSES.add(Source.class); - } + private static final Set> SUPPORTED_CLASSES = Set.of( + DOMSource.class, + SAXSource.class, + StAXSource.class, + StreamSource.class, + Source.class); private final TransformerFactory transformerFactory = TransformerFactory.newInstance(); diff --git a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java index 7dddb1f26ca..6c8405a5651 100644 --- a/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java +++ b/spring-web/src/main/java/org/springframework/web/server/adapter/HttpWebHandlerAdapter.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2021 the original author or authors. + * Copyright 2002-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,8 +16,6 @@ package org.springframework.web.server.adapter; -import java.util.Arrays; -import java.util.HashSet; import java.util.Map; import java.util.Set; import java.util.function.Function; @@ -73,9 +71,9 @@ public class HttpWebHandlerAdapter extends WebHandlerDecorator implements HttpHa private static final String DISCONNECTED_CLIENT_LOG_CATEGORY = "org.springframework.web.server.DisconnectedClient"; - // Similar declaration exists in AbstractSockJsSession.. - private static final Set DISCONNECTED_CLIENT_EXCEPTIONS = new HashSet<>( - Arrays.asList("AbortedException", "ClientAbortException", "EOFException", "EofException")); + // Similar declaration exists in AbstractSockJsSession. + private static final Set DISCONNECTED_CLIENT_EXCEPTIONS = + Set.of("AbortedException", "ClientAbortException", "EOFException", "EofException"); private static final Log logger = LogFactory.getLog(HttpWebHandlerAdapter.class); diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java index 0292e6e0556..39d51fc6dac 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/sockjs/client/SockJsClient.java @@ -19,7 +19,6 @@ package org.springframework.web.socket.sockjs.client; import java.net.URI; import java.security.Principal; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -67,14 +66,7 @@ public class SockJsClient implements WebSocketClient, Lifecycle { private static final Log logger = LogFactory.getLog(SockJsClient.class); - private static final Set supportedProtocols = new HashSet<>(4); - - static { - supportedProtocols.add("ws"); - supportedProtocols.add("wss"); - supportedProtocols.add("http"); - supportedProtocols.add("https"); - } + private static final Set supportedProtocols = Set.of("ws", "wss", "http", "https"); private final List transports;