From 4f86282b142045b2e8f9002eee413d90c9e50567 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sun, 1 Dec 2019 01:55:26 +0100 Subject: [PATCH] Polishing --- .../groovy/GroovyBeanDefinitionReader.java | 65 ++++++++++++------- .../groovy/GroovyBeanDefinitionWrapper.java | 4 +- .../support/DefaultSingletonBeanRegistry.java | 1 + .../interceptor/JCacheAspectSupport.java | 1 + .../quartz/LocalDataSourceJobStore.java | 6 +- .../quartz/ResourceLoaderClassLoadHelper.java | 3 +- .../GenericGroovyApplicationContext.java | 5 ++ .../jms/connection/CachedMessageProducer.java | 2 + .../support/GroovyWebApplicationContext.java | 5 ++ .../view/groovy/GroovyMarkupConfigurer.java | 1 + 10 files changed, 63 insertions(+), 30 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java b/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java index bdfb2d05bab..cf13a408173 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionReader.java @@ -182,10 +182,12 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } + @Override public void setMetaClass(MetaClass metaClass) { this.metaClass = metaClass; } + @Override public MetaClass getMetaClass() { return this.metaClass; } @@ -216,6 +218,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * @return the number of bean definitions found * @throws BeanDefinitionStoreException in case of loading or parsing errors */ + @Override public int loadBeanDefinitions(Resource resource) throws BeanDefinitionStoreException { return loadBeanDefinitions(new EncodedResource(resource)); } @@ -240,10 +243,11 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp logger.trace("Loading Groovy bean definitions from " + encodedResource); } - Closure beans = new Closure(this) { + @SuppressWarnings("serial") + Closure beans = new Closure(this) { @Override - public Object call(Object[] args) { - invokeBeanDefiningClosure((Closure) args[0]); + public Object call(Object... args) { + invokeBeanDefiningClosure((Closure) args[0]); return null; } }; @@ -285,7 +289,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * @param closure the block or closure * @return this {@code GroovyBeanDefinitionReader} instance */ - public GroovyBeanDefinitionReader beans(Closure closure) { + public GroovyBeanDefinitionReader beans(Closure closure) { return invokeBeanDefiningClosure(closure); } @@ -309,13 +313,13 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp public AbstractBeanDefinition bean(Class type, Object...args) { GroovyBeanDefinitionWrapper current = this.currentBeanDefinition; try { - Closure callable = null; + Closure callable = null; Collection constructorArgs = null; if (!ObjectUtils.isEmpty(args)) { int index = args.length; Object lastArg = args[index - 1]; - if (lastArg instanceof Closure) { - callable = (Closure) lastArg; + if (lastArg instanceof Closure) { + callable = (Closure) lastArg; index--; } constructorArgs = resolveConstructorArguments(args, 0, index); @@ -370,10 +374,11 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * This method overrides method invocation to create beans for each method name that * takes a class argument. */ + @Override public Object invokeMethod(String name, Object arg) { Object[] args = (Object[])arg; if ("beans".equals(name) && args.length == 1 && args[0] instanceof Closure) { - return beans((Closure) args[0]); + return beans((Closure) args[0]); } else if ("ref".equals(name)) { String refName; @@ -426,10 +431,10 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp private void finalizeDeferredProperties() { for (DeferredProperty dp : this.deferredProperties.values()) { if (dp.value instanceof List) { - dp.value = manageListIfNecessary((List) dp.value); + dp.value = manageListIfNecessary((List) dp.value); } else if (dp.value instanceof Map) { - dp.value = manageMapIfNecessary((Map) dp.value); + dp.value = manageMapIfNecessary((Map) dp.value); } dp.apply(); } @@ -441,7 +446,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * @param callable the closure argument * @return this {@code GroovyBeanDefinitionReader} instance */ - protected GroovyBeanDefinitionReader invokeBeanDefiningClosure(Closure callable) { + protected GroovyBeanDefinitionReader invokeBeanDefiningClosure(Closure callable) { callable.setDelegate(this); callable.call(); finalizeDeferredProperties(); @@ -480,9 +485,10 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp else if (args[0] instanceof Map) { // named constructor arguments if (args.length > 1 && args[1] instanceof Class) { - List constructorArgs = resolveConstructorArguments(args, 2, hasClosureArgument ? args.length - 1 : args.length); - this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, (Class)args[1], constructorArgs); - Map namedArgs = (Map)args[0]; + List constructorArgs = + resolveConstructorArguments(args, 2, hasClosureArgument ? args.length - 1 : args.length); + this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, (Class) args[1], constructorArgs); + Map namedArgs = (Map) args[0]; for (Object o : namedArgs.keySet()) { String propName = (String) o; setProperty(propName, namedArgs.get(propName)); @@ -491,8 +497,8 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp // factory method syntax else { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName); - //First arg is the map containing factoryBean : factoryMethod - Map.Entry factoryBeanEntry = (Map.Entry) ((Map) args[0]).entrySet().iterator().next(); + // First arg is the map containing factoryBean : factoryMethod + Map.Entry factoryBeanEntry = ((Map) args[0]).entrySet().iterator().next(); // If we have a closure body, that will be the last argument. // In between are the constructor args int constructorArgsTest = (hasClosureArgument ? 2 : 1); @@ -516,12 +522,13 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp this.currentBeanDefinition.getBeanDefinition().setAbstract(true); } else { - List constructorArgs = resolveConstructorArguments(args, 0, hasClosureArgument ? args.length - 1 : args.length); + List constructorArgs = + resolveConstructorArguments(args, 0, hasClosureArgument ? args.length - 1 : args.length); this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(beanName, null, constructorArgs); } if (hasClosureArgument) { - Closure callable = (Closure) args[args.length - 1]; + Closure callable = (Closure) args[args.length - 1]; callable.setDelegate(this); callable.setResolveStrategy(Closure.DELEGATE_FIRST); callable.call(this.currentBeanDefinition); @@ -541,10 +548,10 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp constructorArgs[i] = constructorArgs[i].toString(); } else if (constructorArgs[i] instanceof List) { - constructorArgs[i] = manageListIfNecessary((List) constructorArgs[i]); + constructorArgs[i] = manageListIfNecessary((List) constructorArgs[i]); } else if (constructorArgs[i] instanceof Map){ - constructorArgs[i] = manageMapIfNecessary((Map) constructorArgs[i]); + constructorArgs[i] = manageMapIfNecessary((Map) constructorArgs[i]); } } return Arrays.asList(constructorArgs); @@ -598,6 +605,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * This method overrides property setting in the scope of the {@code GroovyBeanDefinitionReader} * to set properties on the current bean definition. */ + @Override public void setProperty(String name, Object value) { if (this.currentBeanDefinition != null) { applyPropertyToBeanDefinition(name, value); @@ -614,7 +622,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp else if (value instanceof Closure) { GroovyBeanDefinitionWrapper current = this.currentBeanDefinition; try { - Closure callable = (Closure) value; + Closure callable = (Closure) value; Class parameterType = callable.getParameterTypes()[0]; if (Object.class == parameterType) { this.currentBeanDefinition = new GroovyBeanDefinitionWrapper(""); @@ -644,6 +652,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp * properties from the {@code GroovyBeanDefinitionReader} itself * */ + @Override public Object getProperty(String name) { Binding binding = getBinding(); if (binding != null && binding.hasVariable(name)) { @@ -687,8 +696,8 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } private GroovyDynamicElementReader createDynamicElementReader(String namespace) { - XmlReaderContext readerContext = this.groovyDslXmlBeanDefinitionReader.createReaderContext(new DescriptiveResource( - "Groovy")); + XmlReaderContext readerContext = this.groovyDslXmlBeanDefinitionReader.createReaderContext( + new DescriptiveResource("Groovy")); BeanDefinitionParserDelegate delegate = new BeanDefinitionParserDelegate(readerContext); boolean decorating = (this.currentBeanDefinition != null); if (!decorating) { @@ -746,10 +755,12 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp this.metaClass = InvokerHelper.getMetaClass(this); } + @Override public MetaClass getMetaClass() { return this.metaClass; } + @Override public Object getProperty(String property) { if (property.equals("beanName")) { return getBeanName(); @@ -766,14 +777,17 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp } } + @Override public Object invokeMethod(String name, Object args) { return this.metaClass.invokeMethod(this, name, args); } + @Override public void setMetaClass(MetaClass metaClass) { this.metaClass = metaClass; } + @Override public void setProperty(String property, Object newValue) { if (!addDeferredProperty(property, newValue)) { this.beanDefinition.getBeanDefinition().getPropertyValues().add(property, newValue); @@ -782,7 +796,7 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp /** - * Wraps a bean definition property an ensures that any RuntimeBeanReference + * Wraps a bean definition property and ensures that any RuntimeBeanReference * additions to it are deferred for resolution later. */ private class GroovyPropertyValue extends GroovyObjectSupport { @@ -796,17 +810,20 @@ public class GroovyBeanDefinitionReader extends AbstractBeanDefinitionReader imp this.propertyValue = propertyValue; } + @SuppressWarnings("unused") public void leftShift(Object value) { InvokerHelper.invokeMethod(this.propertyValue, "leftShift", value); updateDeferredProperties(value); } + @SuppressWarnings("unused") public boolean add(Object value) { boolean retVal = (Boolean) InvokerHelper.invokeMethod(this.propertyValue, "add", value); updateDeferredProperties(value); return retVal; } + @SuppressWarnings("unused") public boolean addAll(Collection values) { boolean retVal = (Boolean) InvokerHelper.invokeMethod(this.propertyValue, "addAll", values); for (Object value : values) { diff --git a/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java b/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java index 9afc6e9c303..d1aeff7d0bc 100644 --- a/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java +++ b/spring-beans/src/main/java/org/springframework/beans/factory/groovy/GroovyBeanDefinitionWrapper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -196,7 +196,7 @@ class GroovyBeanDefinitionWrapper extends GroovyObjectSupport { // constructorArgs else if (CONSTRUCTOR_ARGS.equals(property) && newValue instanceof List) { ConstructorArgumentValues cav = new ConstructorArgumentValues(); - List args = (List) newValue; + List args = (List) newValue; for (Object arg : args) { cav.addGenericArgumentValue(arg); } 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 185a5807631..73756669126 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 @@ -612,6 +612,7 @@ public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements * should not have their own mutexes involved in singleton creation, * to avoid the potential for deadlocks in lazy-init situations. */ + @Override public final Object getSingletonMutex() { return this.singletonObjects; } diff --git a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java index dca7f6135f2..893e4a6b792 100644 --- a/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java +++ b/spring-context-support/src/main/java/org/springframework/cache/jcache/interceptor/JCacheAspectSupport.java @@ -88,6 +88,7 @@ public class JCacheAspectSupport extends AbstractCacheInvoker implements Initial return this.cacheOperationSource; } + @Override public void afterPropertiesSet() { getCacheOperationSource(); diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/LocalDataSourceJobStore.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/LocalDataSourceJobStore.java index db86dd4e368..d47fa28c0ea 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/LocalDataSourceJobStore.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/LocalDataSourceJobStore.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2018 the original author or authors. + * Copyright 2002-2019 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. @@ -110,7 +110,7 @@ public class LocalDataSourceJobStore extends JobStoreCMT { public void shutdown() { // Do nothing - a Spring-managed DataSource has its own lifecycle. } - /* Quartz 2.2 initialize method */ + @Override public void initialize() { // Do nothing - a Spring-managed DataSource has its own lifecycle. } @@ -138,7 +138,7 @@ public class LocalDataSourceJobStore extends JobStoreCMT { public void shutdown() { // Do nothing - a Spring-managed DataSource has its own lifecycle. } - /* Quartz 2.2 initialize method */ + @Override public void initialize() { // Do nothing - a Spring-managed DataSource has its own lifecycle. } diff --git a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/ResourceLoaderClassLoadHelper.java b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/ResourceLoaderClassLoadHelper.java index 63cbb800bfa..996a598460d 100644 --- a/spring-context-support/src/main/java/org/springframework/scheduling/quartz/ResourceLoaderClassLoadHelper.java +++ b/spring-context-support/src/main/java/org/springframework/scheduling/quartz/ResourceLoaderClassLoadHelper.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2019 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. @@ -82,6 +82,7 @@ public class ResourceLoaderClassLoadHelper implements ClassLoadHelper { } @SuppressWarnings("unchecked") + @Override public Class loadClass(String name, Class clazz) throws ClassNotFoundException { return (Class) loadClass(name); } diff --git a/spring-context/src/main/java/org/springframework/context/support/GenericGroovyApplicationContext.java b/spring-context/src/main/java/org/springframework/context/support/GenericGroovyApplicationContext.java index 79950d44576..8e1f74ba45d 100644 --- a/spring-context/src/main/java/org/springframework/context/support/GenericGroovyApplicationContext.java +++ b/spring-context/src/main/java/org/springframework/context/support/GenericGroovyApplicationContext.java @@ -225,18 +225,22 @@ public class GenericGroovyApplicationContext extends GenericApplicationContext i // Implementation of the GroovyObject interface + @Override public void setMetaClass(MetaClass metaClass) { this.metaClass = metaClass; } + @Override public MetaClass getMetaClass() { return this.metaClass; } + @Override public Object invokeMethod(String name, Object args) { return this.metaClass.invokeMethod(this, name, args); } + @Override public void setProperty(String property, Object newValue) { if (newValue instanceof BeanDefinition) { registerBeanDefinition(property, (BeanDefinition) newValue); @@ -246,6 +250,7 @@ public class GenericGroovyApplicationContext extends GenericApplicationContext i } } + @Override @Nullable public Object getProperty(String property) { if (containsBean(property)) { diff --git a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java index e7960c2e5e4..daae35af0aa 100644 --- a/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java +++ b/spring-jms/src/main/java/org/springframework/jms/connection/CachedMessageProducer.java @@ -89,6 +89,7 @@ class CachedMessageProducer implements MessageProducer, QueueSender, TopicPublis return this.target.getDisableMessageTimestamp(); } + @Override public void setDeliveryDelay(long deliveryDelay) throws JMSException { if (this.originalDeliveryDelay == null) { this.originalDeliveryDelay = this.target.getDeliveryDelay(); @@ -96,6 +97,7 @@ class CachedMessageProducer implements MessageProducer, QueueSender, TopicPublis this.target.setDeliveryDelay(deliveryDelay); } + @Override public long getDeliveryDelay() throws JMSException { return this.target.getDeliveryDelay(); } diff --git a/spring-web/src/main/java/org/springframework/web/context/support/GroovyWebApplicationContext.java b/spring-web/src/main/java/org/springframework/web/context/support/GroovyWebApplicationContext.java index ca344393bea..25610fd6a3d 100644 --- a/spring-web/src/main/java/org/springframework/web/context/support/GroovyWebApplicationContext.java +++ b/spring-web/src/main/java/org/springframework/web/context/support/GroovyWebApplicationContext.java @@ -154,22 +154,27 @@ public class GroovyWebApplicationContext extends AbstractRefreshableWebApplicati // Implementation of the GroovyObject interface + @Override public void setMetaClass(MetaClass metaClass) { this.metaClass = metaClass; } + @Override public MetaClass getMetaClass() { return this.metaClass; } + @Override public Object invokeMethod(String name, Object args) { return this.metaClass.invokeMethod(this, name, args); } + @Override public void setProperty(String property, Object newValue) { this.metaClass.setProperty(this, property, newValue); } + @Override @Nullable public Object getProperty(String property) { if (containsBean(property)) { diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupConfigurer.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupConfigurer.java index 741ca35b14a..8c80a96ad7a 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupConfigurer.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/view/groovy/GroovyMarkupConfigurer.java @@ -121,6 +121,7 @@ public class GroovyMarkupConfigurer extends TemplateConfiguration this.templateEngine = templateEngine; } + @Override public MarkupTemplateEngine getTemplateEngine() { Assert.state(this.templateEngine != null, "No MarkupTemplateEngine set"); return this.templateEngine;