Package net.bytebuddy.build
Class CachedReturnPlugin
- java.lang.Object
-
- net.bytebuddy.build.Plugin.ForElementMatcher
-
- net.bytebuddy.build.CachedReturnPlugin
-
- All Implemented Interfaces:
Closeable
,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 definesfinal
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 avolatile
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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static interface
CachedReturnPlugin.CacheField
Indicates the field that stores the cached value.protected static class
CachedReturnPlugin.CacheFieldOffsetMapping
An offset mapping for the cached field.static interface
CachedReturnPlugin.Enhance
Indicates methods that should be cached, i.e.-
Nested classes/interfaces inherited from interface net.bytebuddy.matcher.ElementMatcher
ElementMatcher.Junction<S>
-
Nested classes/interfaces inherited from interface net.bytebuddy.build.Plugin
Plugin.Engine, Plugin.Factory, Plugin.ForElementMatcher, Plugin.NoOp, Plugin.WithPreprocessor
-
Nested classes/interfaces inherited from interface net.bytebuddy.build.Plugin.Factory
Plugin.Factory.Simple, Plugin.Factory.UsingReflection
-
-
Constructor Summary
Constructors Constructor Description CachedReturnPlugin()
Creates a plugin for caching method return values.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description DynamicType.Builder<?>
apply(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassFileLocator classFileLocator)
Applies this plugin.void
close()
Plugin
make()
Returns a plugin that can be used for a transformation and which is subsequently closed.-
Methods inherited from class net.bytebuddy.build.Plugin.ForElementMatcher
matches
-
-
-
-
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 interfacePlugin.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 interfacePlugin
- 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 interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
-
-