From 4ff1e3e74bdcbc539e4f2fe211b7a5a4a89ba174 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 1 Jul 2018 02:31:20 +0200 Subject: [PATCH] Consistent abstract declaration for utility classes (plus polishing) Issue: SPR-16968 --- .../beans/ExtendedBeanInfo.java | 24 +++++++++++-------- .../beans/PropertyDescriptorUtils.java | 11 ++------- .../support/BeanDefinitionReaderUtils.java | 6 +---- .../config/CacheManagementConfigUtils.java | 6 +---- .../annotation/BeanAnnotationHelper.java | 1 - .../annotation/ScopedProxyCreator.java | 1 - .../PostProcessorRegistrationDelegate.java | 3 +-- .../datetime/joda/JodaTimeConverters.java | 1 - .../datetime/standard/DateTimeConverters.java | 1 - .../jmx/support/ObjectNameManager.java | 1 - .../config/TaskManagementConfigUtils.java | 7 +----- .../springframework/core/SpringVersion.java | 3 +-- .../core/env/ProfilesParser.java | 6 ++++- .../config/DatabasePopulatorConfigUtils.java | 7 +----- .../EmbeddedDatabaseConfigurerFactory.java | 1 - .../embedded/OutputStreamFactory.java | 1 - .../test/annotation/TestAnnotationUtils.java | 7 +----- .../test/jdbc/JdbcTestUtils.java | 6 +---- .../web/servlet/setup/MockMvcBuilders.java | 1 - .../web/util/JavaScriptUtils.java | 7 +----- .../config/WebSocketNamespaceUtils.java | 7 +----- 21 files changed, 31 insertions(+), 77 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java b/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java index 4571190b2b2..25e6f772fb1 100644 --- a/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java +++ b/spring-beans/src/main/java/org/springframework/beans/ExtendedBeanInfo.java @@ -43,8 +43,10 @@ import org.springframework.util.ObjectUtils; * Decorator for a standard {@link BeanInfo} object, e.g. as created by * {@link Introspector#getBeanInfo(Class)}, designed to discover and register static * and/or non-void returning setter methods. For example: + * *
  * public class Bean {
+ *
  *     private Foo foo;
  *
  *     public Foo getFoo() {
@@ -56,6 +58,7 @@ import org.springframework.util.ObjectUtils;
  *         return this;
  *     }
  * }
+ * * The standard JavaBeans {@code Introspector} will discover the {@code getFoo} read * method, but will bypass the {@code #setFoo(Foo)} write method, because its non-void * returning signature does not comply with the JavaBeans specification. @@ -68,6 +71,7 @@ import org.springframework.util.ObjectUtils; * indexed properties are fully supported. * * @author Chris Beams + * @author Juergen Hoeller * @since 3.1 * @see #ExtendedBeanInfo(BeanInfo) * @see ExtendedBeanInfoFactory @@ -79,8 +83,7 @@ class ExtendedBeanInfo implements BeanInfo { private final BeanInfo delegate; - private final Set propertyDescriptors = - new TreeSet<>(new PropertyDescriptorComparator()); + private final Set propertyDescriptors = new TreeSet<>(new PropertyDescriptorComparator()); /** @@ -91,11 +94,9 @@ class ExtendedBeanInfo implements BeanInfo { * through its method descriptors to find any non-void returning write methods and * update or create the corresponding {@link PropertyDescriptor} for each one found. * @param delegate the wrapped {@code BeanInfo}, which is never modified - * @throws IntrospectionException if any problems occur creating and adding new - * property descriptors * @see #getPropertyDescriptors() */ - public ExtendedBeanInfo(BeanInfo delegate) throws IntrospectionException { + public ExtendedBeanInfo(BeanInfo delegate) { this.delegate = delegate; for (PropertyDescriptor pd : delegate.getPropertyDescriptors()) { try { @@ -214,8 +215,8 @@ class ExtendedBeanInfo implements BeanInfo { /** * Return the set of {@link PropertyDescriptor PropertyDescriptors} from the wrapped - * {@link BeanInfo} object as well as {@code PropertyDescriptor BeanInfo} object as well as {@code PropertyDescriptors} - * for each non-void returning setter method found during construction. + * {@link BeanInfo} object as well as {@code PropertyDescriptors} for each non-void + * returning setter method found during construction. * @see #ExtendedBeanInfo(BeanInfo) */ @Override @@ -281,7 +282,9 @@ class ExtendedBeanInfo implements BeanInfo { PropertyDescriptorUtils.copyNonMethodProperties(original, this); } - public SimplePropertyDescriptor(String propertyName, @Nullable Method readMethod, Method writeMethod) throws IntrospectionException { + public SimplePropertyDescriptor(String propertyName, @Nullable Method readMethod, Method writeMethod) + throws IntrospectionException { + super(propertyName, null, null); this.readMethod = readMethod; this.writeMethod = writeMethod; @@ -385,8 +388,9 @@ class ExtendedBeanInfo implements BeanInfo { PropertyDescriptorUtils.copyNonMethodProperties(original, this); } - public SimpleIndexedPropertyDescriptor(String propertyName, @Nullable Method readMethod, @Nullable Method writeMethod, - @Nullable Method indexedReadMethod, Method indexedWriteMethod) throws IntrospectionException { + public SimpleIndexedPropertyDescriptor(String propertyName, @Nullable Method readMethod, + @Nullable Method writeMethod, @Nullable Method indexedReadMethod, Method indexedWriteMethod) + throws IntrospectionException { super(propertyName, null, null, null, null); this.readMethod = readMethod; diff --git a/spring-beans/src/main/java/org/springframework/beans/PropertyDescriptorUtils.java b/spring-beans/src/main/java/org/springframework/beans/PropertyDescriptorUtils.java index 9e1120dd50c..c549c9c4757 100644 --- a/spring-beans/src/main/java/org/springframework/beans/PropertyDescriptorUtils.java +++ b/spring-beans/src/main/java/org/springframework/beans/PropertyDescriptorUtils.java @@ -30,19 +30,12 @@ import org.springframework.util.ObjectUtils; * @author Chris Beams * @author Juergen Hoeller */ -final class PropertyDescriptorUtils { - - - private PropertyDescriptorUtils() { - } - +abstract class PropertyDescriptorUtils { /** * See {@link java.beans.FeatureDescriptor}. */ - public static void copyNonMethodProperties(PropertyDescriptor source, PropertyDescriptor target) - throws IntrospectionException { - + public static void copyNonMethodProperties(PropertyDescriptor source, PropertyDescriptor target) { target.setExpert(source.isExpert()); target.setHidden(source.isHidden()); target.setPreferred(source.isPreferred()); diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionReaderUtils.java b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionReaderUtils.java index 144176d3300..5be980df091 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionReaderUtils.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/support/BeanDefinitionReaderUtils.java @@ -35,7 +35,7 @@ import org.springframework.util.StringUtils; * @see PropertiesBeanDefinitionReader * @see org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader */ -public final class BeanDefinitionReaderUtils { +public abstract class BeanDefinitionReaderUtils { /** * Separator for generated bean names. If a class name or parent name is not @@ -44,10 +44,6 @@ public final class BeanDefinitionReaderUtils { public static final String GENERATED_BEAN_NAME_SEPARATOR = BeanFactoryUtils.GENERATED_BEAN_NAME_SEPARATOR; - private BeanDefinitionReaderUtils() { - } - - /** * Create a new GenericBeanDefinition for the given parent name and class name, * eagerly loading the bean class if a ClassLoader has been specified. diff --git a/spring-context/src/main/java/org/springframework/cache/config/CacheManagementConfigUtils.java b/spring-context/src/main/java/org/springframework/cache/config/CacheManagementConfigUtils.java index ffddc844f24..4cdf217ef57 100644 --- a/spring-context/src/main/java/org/springframework/cache/config/CacheManagementConfigUtils.java +++ b/spring-context/src/main/java/org/springframework/cache/config/CacheManagementConfigUtils.java @@ -22,7 +22,7 @@ package org.springframework.cache.config; * @author Juergen Hoeller * @since 4.1 */ -public final class CacheManagementConfigUtils { +public abstract class CacheManagementConfigUtils { /** * The name of the cache advisor bean. @@ -48,8 +48,4 @@ public final class CacheManagementConfigUtils { public static final String JCACHE_ASPECT_BEAN_NAME = "org.springframework.cache.config.internalJCacheAspect"; - - private CacheManagementConfigUtils() { - } - } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/BeanAnnotationHelper.java b/spring-context/src/main/java/org/springframework/context/annotation/BeanAnnotationHelper.java index d54a19c85d7..cb7dabd3a6c 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/BeanAnnotationHelper.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/BeanAnnotationHelper.java @@ -29,7 +29,6 @@ import org.springframework.core.annotation.AnnotatedElementUtils; */ final class BeanAnnotationHelper { - private BeanAnnotationHelper() { } diff --git a/spring-context/src/main/java/org/springframework/context/annotation/ScopedProxyCreator.java b/spring-context/src/main/java/org/springframework/context/annotation/ScopedProxyCreator.java index 58e9b0b0b29..910d5c38423 100644 --- a/spring-context/src/main/java/org/springframework/context/annotation/ScopedProxyCreator.java +++ b/spring-context/src/main/java/org/springframework/context/annotation/ScopedProxyCreator.java @@ -30,7 +30,6 @@ import org.springframework.beans.factory.support.BeanDefinitionRegistry; */ final class ScopedProxyCreator { - private ScopedProxyCreator() { } diff --git a/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java b/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java index f276e56b8e8..a021d30bd06 100644 --- a/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java +++ b/spring-context/src/main/java/org/springframework/context/support/PostProcessorRegistrationDelegate.java @@ -49,7 +49,6 @@ import org.springframework.lang.Nullable; */ final class PostProcessorRegistrationDelegate { - private PostProcessorRegistrationDelegate() { } @@ -306,7 +305,7 @@ final class PostProcessorRegistrationDelegate { * BeanPostProcessor instantiation, i.e. when a bean is not eligible for * getting processed by all BeanPostProcessors. */ - private static class BeanPostProcessorChecker implements BeanPostProcessor { + private static final class BeanPostProcessorChecker implements BeanPostProcessor { private static final Log logger = LogFactory.getLog(BeanPostProcessorChecker.class); diff --git a/spring-context/src/main/java/org/springframework/format/datetime/joda/JodaTimeConverters.java b/spring-context/src/main/java/org/springframework/format/datetime/joda/JodaTimeConverters.java index c0c66cc39a6..b3b02fb26d7 100644 --- a/spring-context/src/main/java/org/springframework/format/datetime/joda/JodaTimeConverters.java +++ b/spring-context/src/main/java/org/springframework/format/datetime/joda/JodaTimeConverters.java @@ -46,7 +46,6 @@ import org.springframework.format.datetime.DateFormatterRegistrar; */ final class JodaTimeConverters { - private JodaTimeConverters() { } diff --git a/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeConverters.java b/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeConverters.java index e073e864824..74afc0d59d0 100644 --- a/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeConverters.java +++ b/spring-context/src/main/java/org/springframework/format/datetime/standard/DateTimeConverters.java @@ -43,7 +43,6 @@ import org.springframework.format.datetime.DateFormatterRegistrar; */ final class DateTimeConverters { - private DateTimeConverters() { } diff --git a/spring-context/src/main/java/org/springframework/jmx/support/ObjectNameManager.java b/spring-context/src/main/java/org/springframework/jmx/support/ObjectNameManager.java index 70e822cab4a..1ca1d86b41c 100644 --- a/spring-context/src/main/java/org/springframework/jmx/support/ObjectNameManager.java +++ b/spring-context/src/main/java/org/springframework/jmx/support/ObjectNameManager.java @@ -30,7 +30,6 @@ import javax.management.ObjectName; */ public final class ObjectNameManager { - private ObjectNameManager() { } diff --git a/spring-context/src/main/java/org/springframework/scheduling/config/TaskManagementConfigUtils.java b/spring-context/src/main/java/org/springframework/scheduling/config/TaskManagementConfigUtils.java index 47c6d5dfd1c..fdaf6be4b03 100644 --- a/spring-context/src/main/java/org/springframework/scheduling/config/TaskManagementConfigUtils.java +++ b/spring-context/src/main/java/org/springframework/scheduling/config/TaskManagementConfigUtils.java @@ -22,7 +22,7 @@ package org.springframework.scheduling.config; * @author Juergen Hoeller * @since 4.1 */ -public final class TaskManagementConfigUtils { +public abstract class TaskManagementConfigUtils { /** * The bean name of the internally managed Scheduled annotation processor. @@ -42,9 +42,4 @@ public final class TaskManagementConfigUtils { public static final String ASYNC_EXECUTION_ASPECT_BEAN_NAME = "org.springframework.scheduling.config.internalAsyncExecutionAspect"; - - private TaskManagementConfigUtils() { - } - - } diff --git a/spring-core/src/main/java/org/springframework/core/SpringVersion.java b/spring-core/src/main/java/org/springframework/core/SpringVersion.java index 13cf4f49e46..84484a07333 100644 --- a/spring-core/src/main/java/org/springframework/core/SpringVersion.java +++ b/spring-core/src/main/java/org/springframework/core/SpringVersion.java @@ -25,7 +25,7 @@ import org.springframework.lang.Nullable; *

Note that some ClassLoaders do not expose the package metadata, * hence this class might not be able to determine the Spring version * in all environments. Consider using a reflection-based check instead: - * For example, checking for the presence of a specific Spring 2.0 + * For example, checking for the presence of a specific Spring 5.0 * method that you intend to call. * * @author Juergen Hoeller @@ -33,7 +33,6 @@ import org.springframework.lang.Nullable; */ public final class SpringVersion { - private SpringVersion() { } diff --git a/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java b/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java index 3b06a942281..f724a8c1e69 100644 --- a/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java +++ b/spring-core/src/main/java/org/springframework/core/env/ProfilesParser.java @@ -32,7 +32,11 @@ import org.springframework.util.StringUtils; * @author Phillip Webb * @since 5.1 */ -abstract class ProfilesParser { +final class ProfilesParser { + + private ProfilesParser() { + } + static Profiles parse(String... expressions) { Assert.notEmpty(expressions, "Must specify at least one profile"); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/config/DatabasePopulatorConfigUtils.java b/spring-jdbc/src/main/java/org/springframework/jdbc/config/DatabasePopulatorConfigUtils.java index 38f32fc8786..a20745ba212 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/config/DatabasePopulatorConfigUtils.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/config/DatabasePopulatorConfigUtils.java @@ -38,12 +38,7 @@ import org.springframework.util.xml.DomUtils; * @author Stephane Nicoll * @since 3.1 */ -final class DatabasePopulatorConfigUtils { - - - private DatabasePopulatorConfigUtils() { - } - +abstract class DatabasePopulatorConfigUtils { public static void setDatabasePopulator(Element element, BeanDefinitionBuilder builder) { List scripts = DomUtils.getChildElementsByTagName(element, "script"); diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java index a32090aad42..8d4e65d65ab 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/EmbeddedDatabaseConfigurerFactory.java @@ -29,7 +29,6 @@ import org.springframework.util.Assert; */ final class EmbeddedDatabaseConfigurerFactory { - private EmbeddedDatabaseConfigurerFactory() { } diff --git a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/OutputStreamFactory.java b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/OutputStreamFactory.java index 31ffda5bf78..21b84ff2fb1 100644 --- a/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/OutputStreamFactory.java +++ b/spring-jdbc/src/main/java/org/springframework/jdbc/datasource/embedded/OutputStreamFactory.java @@ -28,7 +28,6 @@ import java.io.OutputStream; */ public final class OutputStreamFactory { - private OutputStreamFactory() { } diff --git a/spring-test/src/main/java/org/springframework/test/annotation/TestAnnotationUtils.java b/spring-test/src/main/java/org/springframework/test/annotation/TestAnnotationUtils.java index 21e7361802b..f15b06cb3bc 100644 --- a/spring-test/src/main/java/org/springframework/test/annotation/TestAnnotationUtils.java +++ b/spring-test/src/main/java/org/springframework/test/annotation/TestAnnotationUtils.java @@ -26,12 +26,7 @@ import org.springframework.core.annotation.AnnotatedElementUtils; * @author Sam Brannen * @since 4.2 */ -public final class TestAnnotationUtils { - - - private TestAnnotationUtils() { - } - +public abstract class TestAnnotationUtils { /** * Get the {@code timeout} configured via the {@link Timed @Timed} diff --git a/spring-test/src/main/java/org/springframework/test/jdbc/JdbcTestUtils.java b/spring-test/src/main/java/org/springframework/test/jdbc/JdbcTestUtils.java index d836c30399f..ee93494518c 100644 --- a/spring-test/src/main/java/org/springframework/test/jdbc/JdbcTestUtils.java +++ b/spring-test/src/main/java/org/springframework/test/jdbc/JdbcTestUtils.java @@ -38,15 +38,11 @@ import org.springframework.util.StringUtils; * @see org.springframework.jdbc.datasource.init.ResourceDatabasePopulator * @see org.springframework.jdbc.datasource.init.DatabasePopulatorUtils */ -public final class JdbcTestUtils { +public abstract class JdbcTestUtils { private static final Log logger = LogFactory.getLog(JdbcTestUtils.class); - private JdbcTestUtils() { - } - - /** * Count the rows in the given table. * @param jdbcTemplate the JdbcTemplate with which to perform JDBC operations diff --git a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java index 9bd26766db8..7b1db354a5f 100644 --- a/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java +++ b/spring-test/src/main/java/org/springframework/test/web/servlet/setup/MockMvcBuilders.java @@ -35,7 +35,6 @@ import org.springframework.web.context.WebApplicationContext; */ public final class MockMvcBuilders { - private MockMvcBuilders() { } diff --git a/spring-web/src/main/java/org/springframework/web/util/JavaScriptUtils.java b/spring-web/src/main/java/org/springframework/web/util/JavaScriptUtils.java index c17b86493da..c03dca99bdc 100644 --- a/spring-web/src/main/java/org/springframework/web/util/JavaScriptUtils.java +++ b/spring-web/src/main/java/org/springframework/web/util/JavaScriptUtils.java @@ -29,12 +29,7 @@ package org.springframework.web.util; * @author Rossen Stoyanchev * @since 1.1.1 */ -public final class JavaScriptUtils { - - - private JavaScriptUtils() { - } - +public abstract class JavaScriptUtils { /** * Turn JavaScript special characters into escaped characters. diff --git a/spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java b/spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java index 73611765e72..4d4a1009354 100644 --- a/spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java +++ b/spring-websocket/src/main/java/org/springframework/web/socket/config/WebSocketNamespaceUtils.java @@ -44,12 +44,7 @@ import org.springframework.web.socket.sockjs.transport.handler.WebSocketTranspor * @author Rossen Stoyanchev * @since 4.0 */ -final class WebSocketNamespaceUtils { - - - private WebSocketNamespaceUtils() { - } - +abstract class WebSocketNamespaceUtils { public static RuntimeBeanReference registerHandshakeHandler( Element element, ParserContext context, @Nullable Object source) {