Class EnhancerBuilderImpl
- java.lang.Object
-
- com.google.inject.internal.aop.EnhancerBuilderImpl
-
- All Implemented Interfaces:
BytecodeGen.EnhancerBuilder
final class EnhancerBuilderImpl extends java.lang.Object implements BytecodeGen.EnhancerBuilder
Builder of enhancers that provide method interception via bytecode generation.
-
-
Field Summary
Fields Modifier and Type Field Description private java.util.Map<java.lang.reflect.Method,java.lang.reflect.Method>
bridgeDelegates
private java.lang.reflect.Method[]
enhanceableMethods
private static java.lang.ClassValue<java.util.Map<java.util.BitSet,java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>>>>
ENHANCERS
Lazy association between classes and their generated enhancers.private java.lang.Class<?>
hostClass
-
Constructor Summary
Constructors Constructor Description EnhancerBuilderImpl(java.lang.Class<?> hostClass, java.util.Collection<java.lang.reflect.Method> enhanceableMethods, java.util.Map<java.lang.reflect.Method,java.lang.reflect.Method> bridgeDelegates)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>>
buildEnhancer(java.util.BitSet methodIndices)
Generates an enhancer for the selected subset of methods.private java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>>
doBuildEnhancer(java.util.BitSet methodIndices)
java.lang.reflect.Method[]
getEnhanceableMethods()
Lists the methods in the host class that can be enhanced.
-
-
-
Field Detail
-
ENHANCERS
private static final java.lang.ClassValue<java.util.Map<java.util.BitSet,java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>>>> ENHANCERS
Lazy association between classes and their generated enhancers.
-
hostClass
private final java.lang.Class<?> hostClass
-
enhanceableMethods
private final java.lang.reflect.Method[] enhanceableMethods
-
bridgeDelegates
private final java.util.Map<java.lang.reflect.Method,java.lang.reflect.Method> bridgeDelegates
-
-
Method Detail
-
getEnhanceableMethods
public java.lang.reflect.Method[] getEnhanceableMethods()
Description copied from interface:BytecodeGen.EnhancerBuilder
Lists the methods in the host class that can be enhanced.This always includes public and protected methods that are neither static nor final.
Package-private methods can only be enhanced if they're in the same package as the host and we can define types in the same class loader with Unsafe. The
Object.finalize()
method can never be enhanced.- Specified by:
getEnhanceableMethods
in interfaceBytecodeGen.EnhancerBuilder
-
buildEnhancer
public java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>> buildEnhancer(java.util.BitSet methodIndices)
Description copied from interface:BytecodeGen.EnhancerBuilder
Generates an enhancer for the selected subset of methods.The enhancer maps constructor and method signatures to invokers, where each invoker is represented as a
BiFunction
that accepts a context object and an argument array.Constructor invokers take an array of
InvocationHandler
s as their context object. This is stored in the enhanced class before the original host class constructor is called, with arguments unpacked from the argument array. The enhanced instance is then returned.Method invokers take an enhanced instance as their context object and call the original super-method with arguments unpacked from the argument array, ie. provides super-invocation.
- Specified by:
buildEnhancer
in interfaceBytecodeGen.EnhancerBuilder
-
doBuildEnhancer
private java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>> doBuildEnhancer(java.util.BitSet methodIndices)
-
-