org.codehaus.plexus.interpolation.object

## Class FieldBasedObjectInterpolator

- java.lang.Object
- - org.codehaus.plexus.interpolation.object.FieldBasedObjectInterpolator

All Implemented Interfaces:
  ObjectInterpolator

    public class FieldBasedObjectInterpolator
    extends java.lang.Object
    implements ObjectInterpolator

Reflectively traverses an object graph and uses an `Interpolator` instance to resolve any String fields in the graph.
NOTE: This code is based on a reimplementation of ModelInterpolator in maven-project 2.1.0-M1, which became a performance bottleneck when the interpolation process became a hotspot.

Author:
  jdcasey

### Field Summary

Fields
`static java.util.Set` `DEFAULT_BLACKLISTED_FIELD_NAMES`
`static java.util.Set` `DEFAULT_BLACKLISTED_PACKAGE_PREFIXES`

### Constructor Summary

Constructors
Constructor and Description
`FieldBasedObjectInterpolator()` Use the default settings for blacklisted fields and packages, where fields named 'parent' and classes in packages starting with 'java' will not be interpolated.
`FieldBasedObjectInterpolator(java.util.Set blacklistedFieldNames, java.util.Set blacklistedPackagePrefixes)` Use the given black-lists to limit the interpolation of fields and classes (by package).

### Method Summary

Methods
`static void` `clearCaches()` Clear out the Reflection caches kept for the most expensive operations encountered: field lookup and primitive queries for fields.
`java.util.List` `getWarnings()` Retrieve the `List` of warnings (`ObjectInterpolationWarning` instances) generated during the last interpolation execution.
`boolean` `hasWarnings()` Returns true if the last interpolation execution generated warnings.
`void` `interpolate(java.lang.Object target, Interpolator interpolator)` Using reflective field access and mutation, traverse the object graph from the given starting point and interpolate any Strings found in that graph using the given `Interpolator`.
`void` `interpolate(java.lang.Object target, Interpolator interpolator, RecursionInterceptor recursionInterceptor)` Using reflective field access and mutation, traverse the object graph from the given starting point and interpolate any Strings found in that graph using the given `Interpolator`.

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

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

### Field Detail

#### DEFAULT_BLACKLISTED_FIELD_NAMES

    public static final java.util.Set DEFAULT_BLACKLISTED_FIELD_NAMES

#### DEFAULT_BLACKLISTED_PACKAGE_PREFIXES

    public static final java.util.Set DEFAULT_BLACKLISTED_PACKAGE_PREFIXES

### Constructor Detail

#### FieldBasedObjectInterpolator

    public FieldBasedObjectInterpolator()

Use the default settings for blacklisted fields and packages, where fields named 'parent' and classes in packages starting with 'java' will not be interpolated.

#### FieldBasedObjectInterpolator

    public FieldBasedObjectInterpolator(java.util.Set blacklistedFieldNames,
                                java.util.Set blacklistedPackagePrefixes)

Use the given black-lists to limit the interpolation of fields and classes (by package).

Parameters:
  `blacklistedFieldNames` - The list of field names to ignore
  `blacklistedPackagePrefixes` - The list of package prefixes whose classes should be ignored

### Method Detail

#### clearCaches

    public static void clearCaches()

Clear out the Reflection caches kept for the most expensive operations encountered: field lookup and primitive queries for fields. These caches are static since they apply at the class level, not the instance level.

#### hasWarnings

    public boolean hasWarnings()

Returns true if the last interpolation execution generated warnings.

Specified by:
  `hasWarnings` in interface `ObjectInterpolator`

#### getWarnings

    public java.util.List getWarnings()

Retrieve the `List` of warnings (`ObjectInterpolationWarning` instances) generated during the last interpolation execution.

Specified by:
  `getWarnings` in interface `ObjectInterpolator`

#### interpolate

    public void interpolate(java.lang.Object target,
                   Interpolator interpolator)
                     throws InterpolationException

Using reflective field access and mutation, traverse the object graph from the given starting point and interpolate any Strings found in that graph using the given `Interpolator`. Limits to this process can be managed using the black lists configured in the constructor.

Specified by:
  `interpolate` in interface `ObjectInterpolator`
Parameters:
  `target` - The starting point of the object graph to traverse
  `interpolator` - The `Interpolator` used to resolve any Strings encountered during traversal. NOTE: Uses `SimpleRecursionInterceptor`.
Throws:
  `InterpolationException`

#### interpolate

    public void interpolate(java.lang.Object target,
                   Interpolator interpolator,
                   RecursionInterceptor recursionInterceptor)
                     throws InterpolationException

Using reflective field access and mutation, traverse the object graph from the given starting point and interpolate any Strings found in that graph using the given `Interpolator`. Limits to this process can be managed using the black lists configured in the constructor.

Specified by:
  `interpolate` in interface `ObjectInterpolator`
Parameters:
  `target` - The starting point of the object graph to traverse
  `interpolator` - The `Interpolator` used to resolve any Strings encountered during traversal.
  `recursionInterceptor` - The `RecursionInterceptor` used to detect cyclical expressions in the graph
Throws:
  `InterpolationException`