Class CachedReturnPlugin

  • All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, Plugin, Plugin.Factory, ElementMatcher<TypeDescription>

    @Enhance
    public class CachedReturnPlugin
    extends Plugin.ForElementMatcher
    implements Plugin.Factory
    A plugin that caches the return value of a method in a synthetic field. The caching mechanism is not thread-safe but can be used in a concurrent setup if the cached value is frozen, i.e. only defines final fields. In this context, it is possible that the method is executed multiple times by different threads but at the same time, this approach avoids a volatile field declaration. For methods with a primitive return type, the type's default value is used to indicate that a method was not yet invoked. For methods that return a reference type, null is used as an indicator. If a method returns such a value, this mechanism will not work. This plugin does not need to be closed.
    • Constructor Detail

      • CachedReturnPlugin

        public CachedReturnPlugin()
        Creates a plugin for caching method return values. If a field name exists before applying this plugin, an exception is raised.
      • CachedReturnPlugin

        public CachedReturnPlugin​(boolean ignoreExistingFields)
        Creates a plugin for caching method return values.
        Parameters:
        ignoreExistingFields - true if existing fields should be ignored if the field name was explicitly given.
    • Method Detail

      • make

        public Plugin make()
        Returns a plugin that can be used for a transformation and which is subsequently closed.
        Specified by:
        make in interface Plugin.Factory
        Returns:
        The plugin to use for type transformations.
      • apply

        public DynamicType.Builder<?> apply​(DynamicType.Builder<?> builder,
                                            TypeDescription typeDescription,
                                            ClassFileLocator classFileLocator)
        Applies this plugin.
        Specified by:
        apply in interface Plugin
        Parameters:
        builder - The builder to use as a basis for the applied transformation.
        typeDescription - The type being transformed.
        classFileLocator - A class file locator that can locate other types in the scope of the project.
        Returns:
        The supplied builder with additional transformations registered.
      • close

        public void close()
        Specified by:
        close in interface java.lang.AutoCloseable
        Specified by:
        close in interface java.io.Closeable