From aec2bc097e56995abf39b60678b6f5e45e1cd85c Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Fri, 25 Sep 2009 09:45:10 +0000 Subject: [PATCH] polishing --- .../org/springframework/core/Conventions.java | 8 +- .../convert/support/GenericConverter.java | 12 ++- .../AbstractCachingLabeledEnumResolver.java | 2 +- .../springframework/util/ReflectionUtils.java | 87 +++++-------------- .../AbstractDetectingUrlHandlerMapping.java | 7 +- .../AnnotationMethodHandlerAdapter.java | 9 +- .../ServletAnnotationMappingUtils.java | 19 ++-- 7 files changed, 48 insertions(+), 96 deletions(-) diff --git a/org.springframework.core/src/main/java/org/springframework/core/Conventions.java b/org.springframework.core/src/main/java/org/springframework/core/Conventions.java index 7cc5f09dcdf..8a03d43f240 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/Conventions.java +++ b/org.springframework.core/src/main/java/org/springframework/core/Conventions.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 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. @@ -75,7 +75,7 @@ public abstract class Conventions { */ public static String getVariableName(Object value) { Assert.notNull(value, "Value must not be null"); - Class valueClass = null; + Class valueClass; boolean pluralize = false; if (value.getClass().isArray()) { @@ -107,7 +107,7 @@ public abstract class Conventions { */ public static String getVariableNameForParameter(MethodParameter parameter) { Assert.notNull(parameter, "MethodParameter must not be null"); - Class valueClass = null; + Class valueClass; boolean pluralize = false; if (parameter.getParameterType().isArray()) { @@ -173,7 +173,7 @@ public abstract class Conventions { return getVariableName(value); } - Class valueClass = null; + Class valueClass; boolean pluralize = false; if (resolvedType.isArray()) { diff --git a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConverter.java b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConverter.java index 050ca426c53..7ecd565524e 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConverter.java +++ b/org.springframework.core/src/main/java/org/springframework/core/convert/support/GenericConverter.java @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.springframework.core.convert.support; import org.springframework.core.convert.TypeDescriptor; @@ -20,20 +21,23 @@ import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.ConverterFactory; /** - * Uniform Converter interface used by GenericConversionService. - * This interface is primarily an internal detail of the GenericConversionService implementation. - * It should generally not be implemented by application code directly. + * Uniform converter interface as returned from {@link GenericConversionService#getConverter}. + * + *

This interface is primarily an internal detail of the {@link GenericConversionService} + * implementation. It should generally not be implemented by application code directly. * See {@link Converter} and {@link ConverterFactory} interfaces for simpler public converter SPIs. + * * @author Keith Donald * @since 3.0 * @see Converter * @see ConverterFactory + * @see GenericConversionService */ public interface GenericConverter { /** * Convert the source to the targetType described by the TypeDescriptor. - * @param source the source object to convert (never null) + * @param source the source object to convert (never null) * @param sourceType context about the source type to convert from * @param targetType context about the target type to convert to * @return the converted object diff --git a/org.springframework.core/src/main/java/org/springframework/core/enums/AbstractCachingLabeledEnumResolver.java b/org.springframework.core/src/main/java/org/springframework/core/enums/AbstractCachingLabeledEnumResolver.java index 798dacc8004..72df710897f 100644 --- a/org.springframework.core/src/main/java/org/springframework/core/enums/AbstractCachingLabeledEnumResolver.java +++ b/org.springframework.core/src/main/java/org/springframework/core/enums/AbstractCachingLabeledEnumResolver.java @@ -124,7 +124,7 @@ public abstract class AbstractCachingLabeledEnumResolver implements LabeledEnumR @Override protected boolean useWeakValue(Class key, Map value) { if (!ClassUtils.isCacheSafe(key, AbstractCachingLabeledEnumResolver.this.getClass().getClassLoader())) { - if (logger.isDebugEnabled()) { + if (logger != null && logger.isDebugEnabled()) { logger.debug("Not strongly caching class [" + key.getName() + "] because it is not cache-safe"); } return true; diff --git a/org.springframework.core/src/main/java/org/springframework/util/ReflectionUtils.java b/org.springframework.core/src/main/java/org/springframework/util/ReflectionUtils.java index d9a9d882cdd..6173671bcff 100644 --- a/org.springframework.core/src/main/java/org/springframework/util/ReflectionUtils.java +++ b/org.springframework.core/src/main/java/org/springframework/util/ReflectionUtils.java @@ -29,9 +29,9 @@ import java.util.List; /** * Simple utility class for working with the reflection API and handling * reflection exceptions. - *

- * Only intended for internal use. - * + * + *

Only intended for internal use. + * * @author Juergen Hoeller * @author Rob Harrop * @author Rod Johnson @@ -45,7 +45,6 @@ public abstract class ReflectionUtils { * Attempt to find a {@link Field field} on the supplied {@link Class} with * the supplied name. Searches all superclasses up to * {@link Object}. - * * @param clazz the class to introspect * @param name the name of the field * @return the corresponding Field object, or null if not found @@ -58,7 +57,6 @@ public abstract class ReflectionUtils { * Attempt to find a {@link Field field} on the supplied {@link Class} with * the supplied name and/or {@link Class type}. Searches all * superclasses up to {@link Object}. - * * @param clazz the class to introspect * @param name the name of the field (may be null if type is * specified) @@ -88,10 +86,8 @@ public abstract class ReflectionUtils { * value. In accordance with {@link Field#set(Object, Object)} * semantics, the new value is automatically unwrapped if the underlying * field has a primitive type. - *

- * Thrown exceptions are handled via a call to + *

Thrown exceptions are handled via a call to * {@link #handleReflectionException(Exception)}. - * * @param field the field to set * @param target the target object on which to set the field * @param value the value to set; may be null @@ -112,10 +108,8 @@ public abstract class ReflectionUtils { * the specified {@link Object target object}. In accordance with * {@link Field#get(Object)} semantics, the returned value is automatically * wrapped if the underlying field has a primitive type. - *

- * Thrown exceptions are handled via a call to + *

Thrown exceptions are handled via a call to * {@link #handleReflectionException(Exception)}. - * * @param field the field to get * @param target the target object from which to get the field * @return the field's current value @@ -135,9 +129,7 @@ public abstract class ReflectionUtils { * Attempt to find a {@link Method} on the supplied class with the supplied * name and no parameters. Searches all superclasses up to * Object. - *

- * Returns null if no {@link Method} can be found. - * + *

Returns null if no {@link Method} can be found. * @param clazz the class to introspect * @param name the name of the method * @return the Method object, or null if none found @@ -150,9 +142,7 @@ public abstract class ReflectionUtils { * Attempt to find a {@link Method} on the supplied class with the supplied * name and parameter types. Searches all superclasses up to * Object. - *

- * Returns null if no {@link Method} can be found. - * + *

Returns null if no {@link Method} can be found. * @param clazz the class to introspect * @param name the name of the method * @param paramTypes the parameter types of the method (may be @@ -180,10 +170,8 @@ public abstract class ReflectionUtils { * Invoke the specified {@link Method} against the supplied target object * with no arguments. The target object can be null when * invoking a static {@link Method}. - *

- * Thrown exceptions are handled via a call to + *

Thrown exceptions are handled via a call to * {@link #handleReflectionException}. - * * @param method the method to invoke * @param target the target object to invoke the method on * @return the invocation result, if any @@ -197,10 +185,8 @@ public abstract class ReflectionUtils { * Invoke the specified {@link Method} against the supplied target object * with the supplied arguments. The target object can be null * when invoking a static {@link Method}. - *

- * Thrown exceptions are handled via a call to + *

Thrown exceptions are handled via a call to * {@link #handleReflectionException}. - * * @param method the method to invoke * @param target the target object to invoke the method on * @param args the invocation arguments (may be null) @@ -219,7 +205,6 @@ public abstract class ReflectionUtils { /** * Invoke the specified JDBC API {@link Method} against the supplied target * object with no arguments. - * * @param method the method to invoke * @param target the target object to invoke the method on * @return the invocation result, if any @@ -233,7 +218,6 @@ public abstract class ReflectionUtils { /** * Invoke the specified JDBC API {@link Method} against the supplied target * object with the supplied arguments. - * * @param method the method to invoke * @param target the target object to invoke the method on * @param args the invocation arguments (may be null) @@ -260,11 +244,9 @@ public abstract class ReflectionUtils { /** * Handle the given reflection exception. Should only be called if no * checked exception is expected to be thrown by the target method. - *

- * Throws the underlying RuntimeException or Error in case of an + *

Throws the underlying RuntimeException or Error in case of an * InvocationTargetException with such a root cause. Throws an * IllegalStateException with an appropriate message else. - * * @param ex the reflection exception to handle */ public static void handleReflectionException(Exception ex) { @@ -286,10 +268,8 @@ public abstract class ReflectionUtils { /** * Handle the given invocation target exception. Should only be called if no * checked exception is expected to be thrown by the target method. - *

- * Throws the underlying RuntimeException or Error in case of such a root + *

Throws the underlying RuntimeException or Error in case of such a root * cause. Throws an IllegalStateException else. - * * @param ex the invocation target exception to handle */ public static void handleInvocationTargetException(InvocationTargetException ex) { @@ -301,11 +281,9 @@ public abstract class ReflectionUtils { * target exception of an {@link InvocationTargetException}. Should * only be called if no checked exception is expected to be thrown by the * target method. - *

- * Rethrows the underlying exception cast to an {@link RuntimeException} or + *

Rethrows the underlying exception cast to an {@link RuntimeException} or * {@link Error} if appropriate; otherwise, throws an * {@link IllegalStateException}. - * * @param ex the exception to rethrow * @throws RuntimeException the rethrown exception */ @@ -324,11 +302,9 @@ public abstract class ReflectionUtils { * target exception of an {@link InvocationTargetException}. Should * only be called if no checked exception is expected to be thrown by the * target method. - *

- * Rethrows the underlying exception cast to an {@link Exception} or + *

Rethrows the underlying exception cast to an {@link Exception} or * {@link Error} if appropriate; otherwise, throws an * {@link IllegalStateException}. - * * @param ex the exception to rethrow * @throws Exception the rethrown exception (in case of a checked exception) */ @@ -344,7 +320,6 @@ public abstract class ReflectionUtils { /** * Throws an IllegalStateException with the given exception as root cause. - * * @param ex the unexpected exception */ private static void handleUnexpectedException(Throwable ex) { @@ -355,7 +330,6 @@ public abstract class ReflectionUtils { * Determine whether the given method explicitly declares the given * exception or one of its superclasses, which means that an exception of * that type can be propagated as-is within a reflective invocation. - * * @param method the declaring method * @param exceptionType the exception to throw * @return true if the exception can be thrown as-is; @@ -374,7 +348,6 @@ public abstract class ReflectionUtils { /** * Determine whether the given field is a "public static final" constant. - * * @param field the field to check */ public static boolean isPublicStaticFinal(Field field) { @@ -384,8 +357,7 @@ public abstract class ReflectionUtils { /** * Determine whether the given method is an "equals" method. - * - * @see java.lang.Object#equals + * @see java.lang.Object#equals(Object) */ public static boolean isEqualsMethod(Method method) { if (method == null || !method.getName().equals("equals")) { @@ -397,8 +369,7 @@ public abstract class ReflectionUtils { /** * Determine whether the given method is a "hashCode" method. - * - * @see java.lang.Object#hashCode + * @see java.lang.Object#hashCode() */ public static boolean isHashCodeMethod(Method method) { return (method != null && method.getName().equals("hashCode") && method.getParameterTypes().length == 0); @@ -406,7 +377,6 @@ public abstract class ReflectionUtils { /** * Determine whether the given method is a "toString" method. - * * @see java.lang.Object#toString() */ public static boolean isToStringMethod(Method method) { @@ -418,7 +388,6 @@ public abstract class ReflectionUtils { * necessary. The setAccessible(true) method is only called * when actually necessary, to avoid unnecessary conflicts with a JVM * SecurityManager (if active). - * * @param field the field to make accessible * @see java.lang.reflect.Field#setAccessible */ @@ -434,7 +403,6 @@ public abstract class ReflectionUtils { * necessary. The setAccessible(true) method is only called * when actually necessary, to avoid unnecessary conflicts with a JVM * SecurityManager (if active). - * * @param method the method to make accessible * @see java.lang.reflect.Method#setAccessible */ @@ -450,7 +418,6 @@ public abstract class ReflectionUtils { * if necessary. The setAccessible(true) method is only called * when actually necessary, to avoid unnecessary conflicts with a JVM * SecurityManager (if active). - * * @param ctor the constructor to make accessible * @see java.lang.reflect.Constructor#setAccessible */ @@ -464,10 +431,8 @@ public abstract class ReflectionUtils { /** * Perform the given callback operation on all matching methods of the given * class and superclasses. - *

- * The same named method occurring on subclass and superclass will appear + *

The same named method occurring on subclass and superclass will appear * twice, unless excluded by a {@link MethodFilter}. - * * @param targetClass class to start looking at * @param mc the callback to invoke for each method * @see #doWithMethods(Class, MethodCallback, MethodFilter) @@ -479,10 +444,8 @@ public abstract class ReflectionUtils { /** * Perform the given callback operation on all matching methods of the given * class and superclasses. - *

- * The same named method occurring on subclass and superclass will appear + *

The same named method occurring on subclass and superclass will appear * twice, unless excluded by the specified {@link MethodFilter}. - * * @param targetClass class to start looking at * @param mc the callback to invoke for each method * @param mf the filter that determines the methods to apply the callback to @@ -516,7 +479,6 @@ public abstract class ReflectionUtils { public static Method[] getAllDeclaredMethods(Class leafClass) throws IllegalArgumentException { final List methods = new ArrayList(32); doWithMethods(leafClass, new MethodCallback() { - public void doWith(Method method) { methods.add(method); } @@ -527,7 +489,6 @@ public abstract class ReflectionUtils { /** * Invoke the given callback on all fields in the target class, going up the * class hierarchy to get all declared fields. - * * @param targetClass the target class to analyze * @param fc the callback to invoke for each field */ @@ -538,7 +499,6 @@ public abstract class ReflectionUtils { /** * Invoke the given callback on all fields in the target class, going up the * class hierarchy to get all declared fields. - * * @param targetClass the target class to analyze * @param fc the callback to invoke for each field * @param ff the filter that determines the fields to apply the callback to @@ -571,7 +531,6 @@ public abstract class ReflectionUtils { * Given the source object and the destination, which must be the same class * or a subclass, copy all fields, including inherited fields. Designed to * work on objects with public no-arg constructors. - * * @throws IllegalArgumentException if the arguments are incompatible */ public static void shallowCopyFieldState(final Object src, final Object dest) throws IllegalArgumentException { @@ -603,21 +562,19 @@ public abstract class ReflectionUtils { /** * Perform an operation using the given method. - * * @param method the method to operate on */ void doWith(Method method) throws IllegalArgumentException, IllegalAccessException; } + /** - * Callback optionally used to method fields to be operated on by a method - * callback. + * Callback optionally used to method fields to be operated on by a method callback. */ public static interface MethodFilter { /** * Determine whether the given method matches. - * * @param method the method to check */ boolean matches(Method method); @@ -630,21 +587,19 @@ public abstract class ReflectionUtils { /** * Perform an operation using the given field. - * * @param field the field to operate on */ void doWith(Field field) throws IllegalArgumentException, IllegalAccessException; } + /** - * Callback optionally used to filter fields to be operated on by a field - * callback. + * Callback optionally used to filter fields to be operated on by a field callback. */ public static interface FieldFilter { /** * Determine whether the given field matches. - * * @param field the field to check */ boolean matches(Field field); diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractDetectingUrlHandlerMapping.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractDetectingUrlHandlerMapping.java index a3973682aae..041d0ead17a 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractDetectingUrlHandlerMapping.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/handler/AbstractDetectingUrlHandlerMapping.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * Copyright 2002-2009 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. @@ -75,8 +75,7 @@ public abstract class AbstractDetectingUrlHandlerMapping extends AbstractUrlHand getApplicationContext().getBeanNamesForType(Object.class)); // Take any bean name that we can determine URLs for. - for (int i = 0; i < beanNames.length; i++) { - String beanName = beanNames[i]; + for (String beanName : beanNames) { String[] urls = determineUrlsForHandler(beanName); if (!ObjectUtils.isEmpty(urls)) { // URL paths found: Let's consider it a handler. @@ -84,7 +83,7 @@ public abstract class AbstractDetectingUrlHandlerMapping extends AbstractUrlHand } else { if (logger.isDebugEnabled()) { - logger.debug("Rejected bean name '" + beanNames[i] + "': no URL paths identified"); + logger.debug("Rejected bean name '" + beanName + "': no URL paths identified"); } } } diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java index 17ccb6a312c..fe90229ccb8 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/AnnotationMethodHandlerAdapter.java @@ -454,7 +454,8 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen if (match && mappingInfo.methods.length == 0 && mappingInfo.params.length == 0 && resolvedMethodName != null && !resolvedMethodName.equals(handlerMethod.getName())) { match = false; - } else { + } + else { for (RequestMethod requestMethod : mappingInfo.methods) { allowedMethods.add(requestMethod.toString()); } @@ -786,7 +787,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen for (MediaType acceptedMediaType : acceptedMediaTypes) { if (supportedMediaType.includes(acceptedMediaType)) { messageConverter.write(returnValue, outputMessage); - responseArgumentUsed = true; + this.responseArgumentUsed = true; return; } } @@ -811,8 +812,8 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator implemen String[] headers = new String[0]; - String bestMatchedPath() { - return matchedPaths.isEmpty() ? null : matchedPaths.get(0); + public String bestMatchedPath() { + return (!this.matchedPaths.isEmpty() ? this.matchedPaths.get(0) : null); } public boolean matches(HttpServletRequest request) { diff --git a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.java b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.java index 9fa4ab88f17..067dc76fe4a 100644 --- a/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.java +++ b/org.springframework.web.servlet/src/main/java/org/springframework/web/servlet/mvc/annotation/ServletAnnotationMappingUtils.java @@ -35,7 +35,6 @@ abstract class ServletAnnotationMappingUtils { /** * Check whether the given request matches the specified request methods. - * * @param methods the HTTP request methods to check against * @param request the current HTTP request to check */ @@ -53,8 +52,7 @@ abstract class ServletAnnotationMappingUtils { /** * Check whether the given request matches the specified parameter conditions. - * - * @param params the parameter conditions, following {@link org.springframework.web.bind.annotation.RequestMapping#params()} + * @param params the parameter conditions, following {@link RequestMapping#params()} * @param request the current HTTP request to check */ public static boolean checkParameters(String[] params, HttpServletRequest request) { @@ -85,8 +83,7 @@ abstract class ServletAnnotationMappingUtils { /** * Check whether the given request matches the specified header conditions. - * - * @param headers the header conditions, following {@link org.springframework.web.bind.annotation.RequestMapping#headers()} + * @param headers the header conditions, following {@link RequestMapping#headers()} * @param request the current HTTP request to check */ public static boolean checkHeaders(String[] headers, HttpServletRequest request) { @@ -95,11 +92,11 @@ abstract class ServletAnnotationMappingUtils { int separator = header.indexOf('='); if (separator == -1) { if (header.startsWith("!")) { - if (hasHeader(request, header.substring(1))) { + if (request.getHeader(header.substring(1)) != null) { return false; } } - else if (!hasHeader(request, header)) { + else if (request.getHeader(header) == null) { return false; } } @@ -111,9 +108,9 @@ abstract class ServletAnnotationMappingUtils { List valueMediaTypes = MediaType.parseMediaTypes(value); boolean found = false; for (Iterator valIter = valueMediaTypes.iterator(); valIter.hasNext() && !found;) { - MediaType valueMediaType = valIter.next(); + MediaType valueMediaType = valIter.next(); for (Iterator reqIter = requestMediaTypes.iterator(); reqIter.hasNext() && !found;) { - MediaType requestMediaType = reqIter.next(); + MediaType requestMediaType = reqIter.next(); if (valueMediaType.includes(requestMediaType)) { found = true; } @@ -133,10 +130,6 @@ abstract class ServletAnnotationMappingUtils { return true; } - private static boolean hasHeader(HttpServletRequest request, String headerName) { - return request.getHeader(headerName) != null; - } - private static boolean isMediaTypeHeader(String headerName) { return "Accept".equalsIgnoreCase(headerName) || "Content-Type".equalsIgnoreCase(headerName); }