Class 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.

    • Field Detail

      • DEFAULT_BLACKLISTED_FIELD_NAMES

        public static final java.util.Set<java.lang.String> DEFAULT_BLACKLISTED_FIELD_NAMES
      • DEFAULT_BLACKLISTED_PACKAGE_PREFIXES

        public static final java.util.Set<java.lang.String> DEFAULT_BLACKLISTED_PACKAGE_PREFIXES
      • fieldsByClass

        private static final java.util.Map<java.lang.Class,​java.lang.reflect.Field[]> fieldsByClass
      • fieldIsPrimitiveByClass

        private static final java.util.Map<java.lang.Class,​java.lang.Boolean> fieldIsPrimitiveByClass
      • blacklistedFieldNames

        private java.util.Set<java.lang.String> blacklistedFieldNames
      • blacklistedPackagePrefixes

        private java.util.Set<java.lang.String> blacklistedPackagePrefixes
    • 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<java.lang.String> blacklistedFieldNames,
                                            java.util.Set<java.lang.String> 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
        Returns:
        true/false.
      • interpolate

        public void interpolate​(java.lang.Object target,
                                BasicInterpolator 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 - in case of an error.
      • interpolate

        public void interpolate​(java.lang.Object target,
                                BasicInterpolator 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 - in case of an error.