org.springframework.core
Class LocalVariableTableParameterNameDiscoverer

java.lang.Object
  extended by org.springframework.core.LocalVariableTableParameterNameDiscoverer
All Implemented Interfaces:
ParameterNameDiscoverer

public class LocalVariableTableParameterNameDiscoverer
extends java.lang.Object
implements ParameterNameDiscoverer

Implementation of ParameterNameDiscoverer that uses the LocalVariableTable information in the method attributes to discover parameter names. Returns null if the class file was compiled without debug information.

Uses ObjectWeb's ASM library for analyzing class files. Each discoverer instance caches the ASM discovered information for each introspected Class, in a thread-safe manner. It is recommended to reuse discoverer instances as far as possible.

Since:
2.0
Author:
Adrian Colyer, Costin Leau, Juergen Hoeller

Nested Class Summary
private static class LocalVariableTableParameterNameDiscoverer.LocalVariableTableVisitor
           
private static class LocalVariableTableParameterNameDiscoverer.ParameterNameDiscoveringVisitor
          Helper class that inspects all methods (constructor included) and then attempts to find the parameter names for that member.
 
Field Summary
private static Log logger
           
private static java.util.Map<java.lang.reflect.Member,java.lang.String[]> NO_DEBUG_INFO_MAP
           
private  java.util.Map<java.lang.Class<?>,java.util.Map<java.lang.reflect.Member,java.lang.String[]>> parameterNamesCache
           
 
Constructor Summary
LocalVariableTableParameterNameDiscoverer()
           
 
Method Summary
 java.lang.String[] getParameterNames(java.lang.reflect.Constructor ctor)
          Return parameter names for this constructor, or null if they cannot be determined.
 java.lang.String[] getParameterNames(java.lang.reflect.Method method)
          Return parameter names for this method, or null if they cannot be determined.
private  java.util.Map<java.lang.reflect.Member,java.lang.String[]> inspectClass(java.lang.Class<?> clazz)
          Inspects the target class.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

logger

private static Log logger

NO_DEBUG_INFO_MAP

private static final java.util.Map<java.lang.reflect.Member,java.lang.String[]> NO_DEBUG_INFO_MAP

parameterNamesCache

private final java.util.Map<java.lang.Class<?>,java.util.Map<java.lang.reflect.Member,java.lang.String[]>> parameterNamesCache
Constructor Detail

LocalVariableTableParameterNameDiscoverer

public LocalVariableTableParameterNameDiscoverer()
Method Detail

getParameterNames

public java.lang.String[] getParameterNames(java.lang.reflect.Method method)
Description copied from interface: ParameterNameDiscoverer
Return parameter names for this method, or null if they cannot be determined.

Specified by:
getParameterNames in interface ParameterNameDiscoverer
Parameters:
method - method to find parameter names for
Returns:
an array of parameter names if the names can be resolved, or null if they cannot

getParameterNames

public java.lang.String[] getParameterNames(java.lang.reflect.Constructor ctor)
Description copied from interface: ParameterNameDiscoverer
Return parameter names for this constructor, or null if they cannot be determined.

Specified by:
getParameterNames in interface ParameterNameDiscoverer
Parameters:
ctor - constructor to find parameter names for
Returns:
an array of parameter names if the names can be resolved, or null if they cannot

inspectClass

private java.util.Map<java.lang.reflect.Member,java.lang.String[]> inspectClass(java.lang.Class<?> clazz)
Inspects the target class. Exceptions will be logged and a maker map returned to indicate the lack of debug information.