Class CachedReturnPlugin
java.lang.Object
net.bytebuddy.build.Plugin.ForElementMatcher
net.bytebuddy.build.CachedReturnPlugin
- All Implemented Interfaces:
Closeable, AutoCloseable, Plugin, Plugin.Factory, ElementMatcher<TypeDescription>
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.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected static enumA resolver forAdvicethat caches a method's return type.protected static @interfaceIndicates the field that stores the cached value.protected static classAn offset mapping for the cached field.static @interfaceIndicates methods that should be cached, i.e.Nested classes/interfaces inherited from interface ElementMatcher
ElementMatcher.Junction<S>Nested classes/interfaces inherited from interface Plugin
Plugin.Engine, Plugin.Factory, Plugin.ForElementMatcher, Plugin.NoOp, Plugin.WithInitialization, Plugin.WithPreprocessorNested classes/interfaces inherited from interface Plugin.Factory
Plugin.Factory.Simple, Plugin.Factory.UsingReflection -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final MethodDescription.InDefinedShapeA description of theCachedReturnPlugin.Enhance.value()method.private final booleantrueif existing fields should be ignored if the field name was explicitly given.private static final StringAn infix between a field and the random suffix if no field name is chosen.private final RandomStringA random string to use for avoid field name collisions. -
Constructor Summary
ConstructorsConstructorDescriptionCreates a plugin for caching method return values.CachedReturnPlugin(boolean ignoreExistingFields) Creates a plugin for caching method return values. -
Method Summary
Modifier and TypeMethodDescriptionapply(DynamicType.Builder<?> builder, TypeDescription typeDescription, ClassFileLocator classFileLocator) Applies this plugin.voidclose()make()Returns a plugin that can be used for a transformation and which is subsequently closed.Methods inherited from class Plugin.ForElementMatcher
matches
-
Field Details
-
NAME_INFIX
An infix between a field and the random suffix if no field name is chosen.- See Also:
-
ENHANCE_VALUE
A description of theCachedReturnPlugin.Enhance.value()method. -
ignoreExistingFields
private final boolean ignoreExistingFieldstrueif existing fields should be ignored if the field name was explicitly given. -
randomString
A random string to use for avoid field name collisions.
-
-
Constructor Details
-
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-trueif existing fields should be ignored if the field name was explicitly given.
-
-
Method Details
-
make
Returns a plugin that can be used for a transformation and which is subsequently closed.- Specified by:
makein 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:
applyin 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:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable
-