From 346d0e271daac3389a8b29aef69a0ef704773218 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 7 Mar 2018 16:24:40 +0100 Subject: [PATCH] Polishing --- .../beans/PropertyMatches.java | 67 ++++++++----------- .../cache/config/spring-cache-4.1.xsd | 20 +++--- .../cache/config/spring-cache-4.2.xsd | 20 +++--- .../cache/config/spring-cache-4.3.xsd | 20 +++--- .../jms/config/spring-jms-4.1.xsd | 38 +++++------ .../jms/config/spring-jms-4.2.xsd | 40 ++++++----- .../jms/config/spring-jms-4.3.xsd | 40 ++++++----- .../org/springframework/http/HttpHeaders.java | 4 +- .../json/GsonHttpMessageConverter.java | 6 +- .../RequestMappingInfoHandlerMapping.java | 8 +-- 10 files changed, 116 insertions(+), 147 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java b/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java index 8a9404cdf3..8cfbc4a046 100644 --- a/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java +++ b/spring-beans/src/main/java/org/springframework/beans/PropertyMatches.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -156,8 +156,8 @@ public abstract class PropertyMatches { if (s2.isEmpty()) { return s1.length(); } - int[][] d = new int[s1.length() + 1][s2.length() + 1]; + int[][] d = new int[s1.length() + 1][s2.length() + 1]; for (int i = 0; i <= s1.length(); i++) { d[i][0] = i; } @@ -166,18 +166,17 @@ public abstract class PropertyMatches { } for (int i = 1; i <= s1.length(); i++) { - char s_i = s1.charAt(i - 1); + char c1 = s1.charAt(i - 1); for (int j = 1; j <= s2.length(); j++) { int cost; - char t_j = s2.charAt(j - 1); - if (s_i == t_j) { + char c2 = s2.charAt(j - 1); + if (c1 == c2) { cost = 0; } else { cost = 1; } - d[i][j] = Math.min(Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1), - d[i - 1][j - 1] + cost); + d[i][j] = Math.min(Math.min(d[i - 1][j] + 1, d[i][j - 1] + 1), d[i - 1][j - 1] + cost); } } @@ -190,24 +189,23 @@ public abstract class PropertyMatches { private static class BeanPropertyMatches extends PropertyMatches { public BeanPropertyMatches(String propertyName, Class beanClass, int maxDistance) { - super(propertyName, calculateMatches(propertyName, - BeanUtils.getPropertyDescriptors(beanClass), maxDistance)); + super(propertyName, + calculateMatches(propertyName, BeanUtils.getPropertyDescriptors(beanClass), maxDistance)); } /** - * Generate possible property alternatives for the given property and - * class. Internally uses the {@code getStringDistance} method, which - * in turn uses the Levenshtein algorithm to determine the distance between - * two Strings. - * @param propertyDescriptors the JavaBeans property descriptors to search + * Generate possible property alternatives for the given property and class. + * Internally uses the {@code getStringDistance} method, which in turn uses + * the Levenshtein algorithm to determine the distance between two Strings. + * @param descriptors the JavaBeans property descriptors to search * @param maxDistance the maximum distance to accept */ - private static String[] calculateMatches(String propertyName, PropertyDescriptor[] propertyDescriptors, int maxDistance) { + private static String[] calculateMatches(String name, PropertyDescriptor[] descriptors, int maxDistance) { List candidates = new ArrayList(); - for (PropertyDescriptor pd : propertyDescriptors) { + for (PropertyDescriptor pd : descriptors) { if (pd.getWriteMethod() != null) { String possibleAlternative = pd.getName(); - if (calculateStringDistance(propertyName, possibleAlternative) <= maxDistance) { + if (calculateStringDistance(name, possibleAlternative) <= maxDistance) { candidates.add(possibleAlternative); } } @@ -216,21 +214,16 @@ public abstract class PropertyMatches { return StringUtils.toStringArray(candidates); } - @Override public String buildErrorMessage() { - String propertyName = getPropertyName(); - String[] possibleMatches = getPossibleMatches(); - StringBuilder msg = new StringBuilder(); - msg.append("Bean property '"); - msg.append(propertyName); - msg.append("' is not writable or has an invalid setter method. "); - - if (ObjectUtils.isEmpty(possibleMatches)) { - msg.append("Does the parameter type of the setter match the return type of the getter?"); + StringBuilder msg = new StringBuilder(160); + msg.append("Bean property '").append(getPropertyName()).append( + "' is not writable or has an invalid setter method. "); + if (!ObjectUtils.isEmpty(getPossibleMatches())) { + appendHintMessage(msg); } else { - appendHintMessage(msg); + msg.append("Does the parameter type of the setter match the return type of the getter?"); } return msg.toString(); } @@ -243,13 +236,13 @@ public abstract class PropertyMatches { super(propertyName, calculateMatches(propertyName, beanClass, maxDistance)); } - private static String[] calculateMatches(final String propertyName, Class beanClass, final int maxDistance) { + private static String[] calculateMatches(final String name, Class clazz, final int maxDistance) { final List candidates = new ArrayList(); - ReflectionUtils.doWithFields(beanClass, new ReflectionUtils.FieldCallback() { + ReflectionUtils.doWithFields(clazz, new ReflectionUtils.FieldCallback() { @Override public void doWith(Field field) throws IllegalArgumentException, IllegalAccessException { String possibleAlternative = field.getName(); - if (calculateStringDistance(propertyName, possibleAlternative) <= maxDistance) { + if (calculateStringDistance(name, possibleAlternative) <= maxDistance) { candidates.add(possibleAlternative); } } @@ -260,14 +253,10 @@ public abstract class PropertyMatches { @Override public String buildErrorMessage() { - String propertyName = getPropertyName(); - String[] possibleMatches = getPossibleMatches(); - StringBuilder msg = new StringBuilder(); - msg.append("Bean property '"); - msg.append(propertyName); - msg.append("' has no matching field. "); - - if (!ObjectUtils.isEmpty(possibleMatches)) { + StringBuilder msg = new StringBuilder(80); + msg.append("Bean property '").append(getPropertyName()).append("' has no matching field."); + if (!ObjectUtils.isEmpty(getPossibleMatches())) { + msg.append(' '); appendHintMessage(msg); } return msg.toString(); diff --git a/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.1.xsd b/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.1.xsd index 66104b98db..5d1fb7d806 100644 --- a/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.1.xsd +++ b/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.1.xsd @@ -22,17 +22,16 @@ @@ -148,8 +147,7 @@ - @@ -296,7 +293,6 @@ invoked (default) or before.]]> - diff --git a/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.2.xsd b/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.2.xsd index b549fecbc1..5ae377e0ae 100644 --- a/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.2.xsd +++ b/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.2.xsd @@ -22,17 +22,16 @@ @@ -148,8 +147,7 @@ - @@ -296,7 +293,6 @@ invoked (default) or before.]]> - diff --git a/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.3.xsd b/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.3.xsd index 6b1103acb2..ae07b7ac1a 100644 --- a/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.3.xsd +++ b/spring-context/src/main/resources/org/springframework/cache/config/spring-cache-4.3.xsd @@ -22,17 +22,16 @@ @@ -148,8 +147,7 @@ - @@ -303,7 +300,6 @@ invoked (default) or before.]]> - diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd index 8b93766fba..36a73a1229 100644 --- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd +++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.1.xsd @@ -20,12 +20,12 @@ @@ -68,7 +68,7 @@ processor. By default, DefaultMessageHandlerMethodFactory is used and it can be configured further to support additional method arguments or to customize conversion and validation support. See org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory - Javadoc for more details. + javadoc for more details. ]]> @@ -77,8 +77,6 @@ - - @@ -180,7 +178,7 @@ A reference to the DestinationResolver strategy for resolving destination names. Default is a DynamicDestinationResolver, using the JMS provider's queue/topic name resolution. Alternatively, specify a reference to a JndiDestinationResolver - (typically in a J2EE environment). + (typically in a Java EE environment). ]]> @@ -248,7 +246,7 @@ The cache level for JMS resources: "none", "connection", "session", "consumer" or "auto". By default ("auto"), the cache level will effectively be "consumer", unless an external transaction manager has been specified - in which case the - effective default will be "none" (assuming J2EE-style transaction management + effective default will be "none" (assuming Java EE-style transaction management where the given ConnectionFactory is an XA-aware pool). ]]> @@ -364,14 +362,13 @@ @@ -386,7 +383,8 @@ @@ -423,7 +421,7 @@ @@ -588,7 +586,7 @@ The name of the default response destination to send response messages to. This will be applied in case of a request message that does not carry a "JMSReplyTo" field. The type of this destination will be determined - by the listener-container's "destination-type" attribute. + by the listener-container's "response-destination-type" attribute. Note: This only applies to a listener method with a return value, for which each result object will be converted into a response message. ]]> diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.2.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.2.xsd index 5122b3c44c..edd9ea3f57 100644 --- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.2.xsd +++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.2.xsd @@ -20,12 +20,12 @@ @@ -68,7 +68,7 @@ processor. By default, DefaultMessageHandlerMethodFactory is used and it can be configured further to support additional method arguments or to customize conversion and validation support. See org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory - Javadoc for more details. + javadoc for more details. ]]> @@ -77,8 +77,6 @@ - - @@ -180,7 +178,7 @@ A reference to the DestinationResolver strategy for resolving destination names. Default is a DynamicDestinationResolver, using the JMS provider's queue/topic name resolution. Alternatively, specify a reference to a JndiDestinationResolver - (typically in a J2EE environment). + (typically in a Java EE environment). ]]> @@ -262,7 +260,7 @@ The cache level for JMS resources: "none", "connection", "session", "consumer" or "auto". By default ("auto"), the cache level will effectively be "consumer", unless an external transaction manager has been specified - in which case the - effective default will be "none" (assuming J2EE-style transaction management + effective default will be "none" (assuming Java EE-style transaction management where the given ConnectionFactory is an XA-aware pool). ]]> @@ -378,14 +376,13 @@ @@ -400,7 +397,8 @@ @@ -437,7 +435,7 @@ @@ -478,8 +476,8 @@ diff --git a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.3.xsd b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.3.xsd index 223c63bfd6..f6b15a7f69 100644 --- a/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.3.xsd +++ b/spring-jms/src/main/resources/org/springframework/jms/config/spring-jms-4.3.xsd @@ -20,12 +20,12 @@ @@ -68,7 +68,7 @@ processor. By default, DefaultMessageHandlerMethodFactory is used and it can be configured further to support additional method arguments or to customize conversion and validation support. See org.springframework.messaging.handler.annotation.support.DefaultMessageHandlerMethodFactory - Javadoc for more details. + javadoc for more details. ]]> @@ -77,8 +77,6 @@ - - @@ -180,7 +178,7 @@ A reference to the DestinationResolver strategy for resolving destination names. Default is a DynamicDestinationResolver, using the JMS provider's queue/topic name resolution. Alternatively, specify a reference to a JndiDestinationResolver - (typically in a J2EE environment). + (typically in a Java EE environment). ]]> @@ -262,7 +260,7 @@ The cache level for JMS resources: "none", "connection", "session", "consumer" or "auto". By default ("auto"), the cache level will effectively be "consumer", unless an external transaction manager has been specified - in which case the - effective default will be "none" (assuming J2EE-style transaction management + effective default will be "none" (assuming Java EE-style transaction management where the given ConnectionFactory is an XA-aware pool). ]]> @@ -378,14 +376,13 @@ @@ -400,7 +397,8 @@ @@ -437,7 +435,7 @@ @@ -478,8 +476,8 @@ diff --git a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java index ed5b5e59bc..9f74a8978b 100644 --- a/spring-web/src/main/java/org/springframework/http/HttpHeaders.java +++ b/spring-web/src/main/java/org/springframework/http/HttpHeaders.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2017 the original author or authors. + * Copyright 2002-2018 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. @@ -775,7 +775,7 @@ public class HttpHeaders implements MultiValueMap, Serializable * by the {@code Date} header. *

The date is returned as the number of milliseconds since * January 1, 1970 GMT. Returns -1 when the date is unknown. - * @throws IllegalArgumentException if the value can't be converted to a date + * @throws IllegalArgumentException if the value cannot be converted to a date */ public long getDate() { return getFirstDate(DATE); diff --git a/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java b/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java index a7e3373439..1106490a01 100644 --- a/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java +++ b/spring-web/src/main/java/org/springframework/http/converter/json/GsonHttpMessageConverter.java @@ -70,18 +70,18 @@ public class GsonHttpMessageConverter extends AbstractGenericHttpMessageConverte */ public GsonHttpMessageConverter() { super(MediaType.APPLICATION_JSON, new MediaType("application", "*+json")); - this.setDefaultCharset(DEFAULT_CHARSET); + setDefaultCharset(DEFAULT_CHARSET); } /** * Set the {@code Gson} instance to use. - * If not set, a default {@link Gson#Gson() Gson} instance is used. + * If not set, a default {@link Gson#Gson() Gson} instance will be used. *

Setting a custom-configured {@code Gson} is one way to take further * control of the JSON serialization process. */ public void setGson(Gson gson) { - Assert.notNull(gson, "'gson' is required"); + Assert.notNull(gson, "A Gson instance is required"); this.gson = gson; } diff --git a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java index 448fb8ea4e..1d57b6b054 100644 --- a/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java +++ b/spring-webmvc/src/main/java/org/springframework/web/servlet/mvc/method/RequestMappingInfoHandlerMapping.java @@ -24,7 +24,6 @@ import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -155,7 +154,7 @@ public abstract class RequestMappingInfoHandlerMapping extends AbstractHandlerMe HttpServletRequest request, Map uriVariables) { Map> result = new LinkedHashMap>(); - for (Entry uriVar : uriVariables.entrySet()) { + for (Map.Entry uriVar : uriVariables.entrySet()) { String uriVarValue = uriVar.getValue(); int equalsIndex = uriVarValue.indexOf('='); @@ -189,11 +188,10 @@ public abstract class RequestMappingInfoHandlerMapping extends AbstractHandlerMe * but not by consumable/producible media types */ @Override - protected HandlerMethod handleNoMatch(Set infos, String lookupPath, - HttpServletRequest request) throws ServletException { + protected HandlerMethod handleNoMatch( + Set infos, String lookupPath, HttpServletRequest request) throws ServletException { PartialMatchHelper helper = new PartialMatchHelper(infos, request); - if (helper.isEmpty()) { return null; }