Package com.thoughtworks.paranamer

## Class CachingParanamer

- java.lang.Object
- - com.thoughtworks.paranamer.CachingParanamer

- All Implemented Interfaces:
    `Paranamer`
  Direct Known Subclasses:
    `CachingParanamer.WithoutWeakReferences`

      public class CachingParanamer
      extends Object
      implements Paranamer

  Implementation of Paranamer which delegate to another Paranamer implementation, adding caching functionality to speed up usage. It also uses a WeakHashmap as an implementation detail (wrapped in Collections.synchronizedMap(..)), to allow large usages to garbage collect things as big as whole classloaders (after working through all the refs that originated from that classloader). Tomcat and other 'containers' do this during hot application deployment, undeployment and most importantly for Paranamer redeployment. Basically, this will allow a perm-gen usage keeps growing scenario.
  Author:
    Paul Hammant, Mauro Talevi

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `static class` | `CachingParanamer.WithoutWeakReferences` | This implementation has a better concurrent design (ConcurrentHashMap) which has a better strategy to implement concurrency: segments instead of synchronized.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static String` | `__PARANAMER_DATA` |

    - ### Fields inherited from interface com.thoughtworks.paranamer.Paranamer

      `EMPTY_NAMES`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `CachingParanamer()` | Uses a DefaultParanamer as the implementation it delegates to.
    `CachingParanamer​(Paranamer delegate)` | Specify a Paranamer instance to delegates to.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `String[]` | `lookupParameterNames​(AccessibleObject methodOrConstructor)` | Lookup the parameter names of a given method.
    `String[]` | `lookupParameterNames​(AccessibleObject methodOrCtor, boolean throwExceptionIfMissing)` | Lookup the parameter names of a given method.
    `protected Map<AccessibleObject,​String[]>` | `makeMethodCache()` |

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### __PARANAMER_DATA

          public static final String __PARANAMER_DATA

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### CachingParanamer

          public CachingParanamer()

      Uses a DefaultParanamer as the implementation it delegates to.

    - #### CachingParanamer

          public CachingParanamer​(Paranamer delegate)

      Specify a Paranamer instance to delegates to.
      Parameters:
        `delegate` - the paranamer instance to use

  - ### Method Detail

    - #### makeMethodCache

          protected Map<AccessibleObject,​String[]> makeMethodCache()

    - #### lookupParameterNames

          public String[] lookupParameterNames​(AccessibleObject methodOrConstructor)

      Description copied from interface: `Paranamer`
      Lookup the parameter names of a given method.
      Specified by:
        `lookupParameterNames` in interface `Paranamer`
      Parameters:
        `methodOrConstructor` - the `Method` or `Constructor` for which the parameter names are looked up.
      Returns:
        A list of the parameter names.

    - #### lookupParameterNames

          public String[] lookupParameterNames​(AccessibleObject methodOrCtor,
                                               boolean throwExceptionIfMissing)

      Description copied from interface: `Paranamer`
      Lookup the parameter names of a given method.
      Specified by:
        `lookupParameterNames` in interface `Paranamer`
      Parameters:
        `methodOrCtor` - the `Method` or `Constructor` for which the parameter names are looked up.
        `throwExceptionIfMissing` - whether to throw an exception if no Paranamer data found (versus return null).
      Returns:
        A list of the parameter names.