Package com.google.inject.internal.aop
Class ClassBuilding
- java.lang.Object
-
- com.google.inject.internal.aop.ClassBuilding
-
public final class ClassBuilding extends java.lang.ObjectEntry-point for building enhanced classes and 'fast-class' invocation.
-
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.reflect.Method[]OVERRIDABLE_OBJECT_METHODS
-
Constructor Summary
Constructors Modifier Constructor Description privateClassBuilding()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static BytecodeGen.EnhancerBuilderbuildEnhancerBuilder(java.lang.Class<?> hostClass)Builder of enhancers that provide method interception via bytecode generation.static java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>>buildFastClass(java.lang.Class<?> hostClass)Builds a 'fast-class' invoker that uses bytecode generation in place of reflection.private static booleancanAccess(java.lang.reflect.Executable member, boolean samePackage)Can we access this member from a subclass which may be in the same package?static booleancanEnhance(java.lang.reflect.Executable member)Returns true if the given member can be enhanced using bytecode.static booleancanFastInvoke(java.lang.reflect.Executable member)Returns true if the given member can be fast-invoked.private static java.lang.reflect.Method[]getOverridableObjectMethods()Cache common overridable Object methods.private static booleanisPublic(java.lang.Class<?> clazz)private static booleanmergeInterface(java.util.List<java.lang.Class<?>> interfaces, java.lang.Class<?> candidate)Attempts to merge the interface with the current flattened hierarchy.private static java.lang.ObjectmergeMethods(java.lang.Object existing, java.lang.Object added)Add the new method to an existing partition or create a new one.private static java.lang.StringpackageName(java.lang.String className)Extract the package name from a class name.private static voidpartitionMethod(java.lang.reflect.Method method, java.util.Map<java.lang.String,java.lang.Object> partitions)Methods are partitioned by name and parameter count.private static voidpushInterfaces(java.util.Deque<java.lang.Class<?>[]> interfaceStack, java.lang.Class<?>[] interfaces)Pushes the interface declaration onto the stack if it's not empty.static java.lang.Stringsignature(java.lang.reflect.Constructor<?> constructor)Minimum signature needed to disambiguate constructors from the same host class.static java.lang.Stringsignature(java.lang.reflect.Method method)Minimum signature needed to disambiguate methods from the same host class.private static java.lang.Stringsignature(java.lang.String name, java.lang.Class<?>[] parameterTypes)Appends a semicolon-separated list of parameter types to the given name.private static voidvisitFastConstructors(java.lang.Class<?> hostClass, java.util.function.Consumer<java.lang.reflect.Constructor<?>> visitor)Visit all constructors for the host class that can be fast-invoked.private static voidvisitFastMethods(java.lang.Class<?> hostClass, java.util.function.Consumer<java.lang.reflect.Method> visitor)Visit all methods declared by the host class that can be fast-invoked.(package private) static <T extends java.lang.reflect.Executable>
voidvisitMembers(T[] members, boolean samePackage, java.util.function.Consumer<T> visitor)Visit all subclass accessible members in the given array.private static voidvisitMethodHierarchy(java.lang.Class<?> hostClass, java.util.function.Consumer<java.lang.reflect.Method> visitor)Visit the method hierarchy for the host class.
-
-
-
Method Detail
-
signature
public static java.lang.String signature(java.lang.reflect.Constructor<?> constructor)
Minimum signature needed to disambiguate constructors from the same host class.
-
signature
public static java.lang.String signature(java.lang.reflect.Method method)
Minimum signature needed to disambiguate methods from the same host class.
-
signature
private static java.lang.String signature(java.lang.String name, java.lang.Class<?>[] parameterTypes)Appends a semicolon-separated list of parameter types to the given name.
-
canEnhance
public static boolean canEnhance(java.lang.reflect.Executable member)
Returns true if the given member can be enhanced using bytecode.
-
buildEnhancerBuilder
public static BytecodeGen.EnhancerBuilder buildEnhancerBuilder(java.lang.Class<?> hostClass)
Builder of enhancers that provide method interception via bytecode generation.
-
partitionMethod
private static void partitionMethod(java.lang.reflect.Method method, java.util.Map<java.lang.String,java.lang.Object> partitions)Methods are partitioned by name and parameter count. This helps focus the search for bridge delegates that involve type-erasure of generic parameter types, since the parameter count will be the same for the bridge method and its delegate.
-
mergeMethods
private static java.lang.Object mergeMethods(java.lang.Object existing, java.lang.Object added)Add the new method to an existing partition or create a new one.
-
visitMethodHierarchy
private static void visitMethodHierarchy(java.lang.Class<?> hostClass, java.util.function.Consumer<java.lang.reflect.Method> visitor)Visit the method hierarchy for the host class.
-
pushInterfaces
private static void pushInterfaces(java.util.Deque<java.lang.Class<?>[]> interfaceStack, java.lang.Class<?>[] interfaces)Pushes the interface declaration onto the stack if it's not empty.
-
mergeInterface
private static boolean mergeInterface(java.util.List<java.lang.Class<?>> interfaces, java.lang.Class<?> candidate)Attempts to merge the interface with the current flattened hierarchy.
-
packageName
private static java.lang.String packageName(java.lang.String className)
Extract the package name from a class name.
-
getOverridableObjectMethods
private static java.lang.reflect.Method[] getOverridableObjectMethods()
Cache common overridable Object methods.
-
canFastInvoke
public static boolean canFastInvoke(java.lang.reflect.Executable member)
Returns true if the given member can be fast-invoked.
-
isPublic
private static boolean isPublic(java.lang.Class<?> clazz)
-
buildFastClass
public static java.util.function.Function<java.lang.String,java.util.function.BiFunction<java.lang.Object,java.lang.Object[],java.lang.Object>> buildFastClass(java.lang.Class<?> hostClass)
Builds a 'fast-class' invoker that uses bytecode generation in place of reflection.
-
visitFastConstructors
private static void visitFastConstructors(java.lang.Class<?> hostClass, java.util.function.Consumer<java.lang.reflect.Constructor<?>> visitor)Visit all constructors for the host class that can be fast-invoked.
-
visitFastMethods
private static void visitFastMethods(java.lang.Class<?> hostClass, java.util.function.Consumer<java.lang.reflect.Method> visitor)Visit all methods declared by the host class that can be fast-invoked.
-
visitMembers
static <T extends java.lang.reflect.Executable> void visitMembers(T[] members, boolean samePackage, java.util.function.Consumer<T> visitor)Visit all subclass accessible members in the given array.
-
canAccess
private static boolean canAccess(java.lang.reflect.Executable member, boolean samePackage)Can we access this member from a subclass which may be in the same package?
-
-