Package net.bytebuddy.asm
Class ClassVisitorFactory<T>
- java.lang.Object
-
- net.bytebuddy.asm.ClassVisitorFactory<T>
-
- Type Parameters:
T
- The type of the mapped class visitor.
@Enhance public abstract class ClassVisitorFactory<T> extends java.lang.Object
A factory for wrapping aClassVisitor
in Byte Buddy's package namespace to aClassVisitor
in any other namespace. Note that this API does not allow for the passing ofAttribute
s. which must be filtered or propagated past this translation. If the supplied visitors do not declare a method that Byte Buddy's version of ASM is aware of, anUnsupportedOperationException
is thrown.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
ClassVisitorFactory.AttributeTranslator
A method to wrap anAttribute
.protected static class
ClassVisitorFactory.ConstantArrayTranslator
A method to translate an array of constants from one namespace to another.protected static class
ClassVisitorFactory.ConstantDynamicTranslator
A method to translate aConstantDynamic
from one namespace to another.protected static class
ClassVisitorFactory.ConstantTranslator
A method to translate a constant value from one namespace to another.protected static class
ClassVisitorFactory.CreateClassVisitorFactory<S>
A factory for creating a wrapper for aClassVisitor
.protected static class
ClassVisitorFactory.FrameTranslator
A method to translate a stack map frame array from one namespace to another.protected static class
ClassVisitorFactory.HandleTranslator
A method to translate aHandle
from one namespace to another.protected static class
ClassVisitorFactory.LabelArrayTranslator
A method to translate an array ofLabel
s from one namespace to another.protected static class
ClassVisitorFactory.LabelTranslator
A method to translate aLabel
from one namespace to another.protected static class
ClassVisitorFactory.NullCheckedConstruction
An appender that performs anull
-checked construction.protected static class
ClassVisitorFactory.TypePathTranslator
A method to translate aTypePath
type from one namespace to another.
-
Field Summary
Fields Modifier and Type Field Description private static java.lang.String
DELEGATE
The name of the delegate field containing an equivalent visitor.private static java.lang.String
LABELS
The name of a map with labels that have been translated previously.private java.lang.Class<?>
type
The type of the represented class visitor wrapper.private static java.lang.String
WRAP
The name of the method that wraps a translated visitor, including anull
check.
-
Constructor Summary
Constructors Modifier Constructor Description protected
ClassVisitorFactory(java.lang.Class<?> type)
Creates a new factory.
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description private static <T> T
doPrivileged(java.security.PrivilegedAction<T> action)
A proxy forjava.security.AccessController#doPrivileged
that is activated if available.java.lang.Class<?>
getType()
Returns theClassVisitor
type that this factory represents.static <S> ClassVisitorFactory<S>
of(java.lang.Class<S> classVisitor)
Returns a class visitor factory for the suppliedClassVisitor
type.static <S> ClassVisitorFactory<S>
of(java.lang.Class<S> classVisitor, ByteBuddy byteBuddy)
Returns a class visitor factory for the suppliedClassVisitor
type.private static DynamicType
toAttributeWrapper(DynamicType.Builder<?> builder, java.lang.Class<?> source, java.lang.Class<?> target, TypeDescription sourceWrapper, TypeDescription targetWrapper)
Creates a wrapper type for anAttribute
to pass attribues along a visitor chain.private static MethodCall.ArgumentLoader.Factory
toConvertedParameter(TypeDescription source, java.lang.Class<?> target, java.lang.String method, int offset, boolean virtual)
Creates an argument loader for a method parameter that requires conversion.private static DynamicType.Builder<?>
toMethodVisitorBuilder(ByteBuddy byteBuddy, java.lang.Class<?> sourceVisitor, java.lang.Class<?> targetVisitor, java.lang.Class<?> sourceTypePath, java.lang.Class<?> targetTypePath, java.lang.Class<?> sourceLabel, java.lang.Class<?> targetLabel, java.lang.Class<?> sourceType, java.lang.Class<?> targetType, java.lang.Class<?> sourceHandle, java.lang.Class<?> targetHandle, java.lang.Class<?> sourceConstantDynamic, java.lang.Class<?> targetConstantDynamic)
Creates a builder for a method visitor type.private static DynamicType.Builder<?>
toVisitorBuilder(ByteBuddy byteBuddy, java.lang.Class<?> sourceVisitor, java.lang.Class<?> targetVisitor, java.lang.Class<?> sourceTypePath, java.lang.Class<?> targetTypePath, Implementation appendix)
Creates a builder for a visitor type.abstract org.objectweb.asm.ClassVisitor
unwrap(T classVisitor)
Unwraps an instance of the supplied class visitor as aClassVisitor
.abstract T
wrap(org.objectweb.asm.ClassVisitor classVisitor)
Wraps aClassVisitor
within an instance of the supplied class visitor type.
-
-
-
Field Detail
-
DELEGATE
private static final java.lang.String DELEGATE
The name of the delegate field containing an equivalent visitor.- See Also:
- Constant Field Values
-
LABELS
private static final java.lang.String LABELS
The name of a map with labels that have been translated previously.- See Also:
- Constant Field Values
-
WRAP
private static final java.lang.String WRAP
The name of the method that wraps a translated visitor, including anull
check.- See Also:
- Constant Field Values
-
type
private final java.lang.Class<?> type
The type of the represented class visitor wrapper.
-
-
Method Detail
-
getType
public java.lang.Class<?> getType()
Returns theClassVisitor
type that this factory represents.- Returns:
- The
ClassVisitor
type that this factory represents.
-
of
public static <S> ClassVisitorFactory<S> of(java.lang.Class<S> classVisitor)
Returns a class visitor factory for the suppliedClassVisitor
type.- Type Parameters:
S
- The type of the class visitor to map to.- Parameters:
classVisitor
- The type of the translated class visitor.- Returns:
- A factory for wrapping
ClassVisitor
s in Byte Buddy's and the supplied package namespace.
-
of
public static <S> ClassVisitorFactory<S> of(java.lang.Class<S> classVisitor, ByteBuddy byteBuddy)
Returns a class visitor factory for the suppliedClassVisitor
type.- Type Parameters:
S
- The type of the class visitor to map to.- Parameters:
classVisitor
- The type of the translatedClassVisitor
.byteBuddy
- The Byte Buddy instance to use.- Returns:
- A factory for wrapping
ClassVisitor
s in Byte Buddy's and the supplied package namespace.
-
doPrivileged
@Enhance private static <T> T doPrivileged(java.security.PrivilegedAction<T> action)
A proxy forjava.security.AccessController#doPrivileged
that is activated if available.- Type Parameters:
T
- The type of the action's resolved value.- Parameters:
action
- The action to execute from a privileged context.- Returns:
- The action's resolved value.
-
toVisitorBuilder
private static DynamicType.Builder<?> toVisitorBuilder(ByteBuddy byteBuddy, java.lang.Class<?> sourceVisitor, java.lang.Class<?> targetVisitor, @MaybeNull java.lang.Class<?> sourceTypePath, @MaybeNull java.lang.Class<?> targetTypePath, Implementation appendix) throws java.lang.Exception
Creates a builder for a visitor type.- Parameters:
byteBuddy
- The Byte Buddy instance to use.sourceVisitor
- The visitor type to map from.targetVisitor
- The visitor type to map to.sourceTypePath
- TheTypePath
source type.targetTypePath
- TheTypePath
target type.appendix
- The implementation to append to the constructor.- Returns:
- The created builder.
- Throws:
java.lang.Exception
- If an exception occurs.
-
toMethodVisitorBuilder
private static DynamicType.Builder<?> toMethodVisitorBuilder(ByteBuddy byteBuddy, java.lang.Class<?> sourceVisitor, java.lang.Class<?> targetVisitor, @MaybeNull java.lang.Class<?> sourceTypePath, @MaybeNull java.lang.Class<?> targetTypePath, @MaybeNull java.lang.Class<?> sourceLabel, @MaybeNull java.lang.Class<?> targetLabel, @MaybeNull java.lang.Class<?> sourceType, @MaybeNull java.lang.Class<?> targetType, @MaybeNull java.lang.Class<?> sourceHandle, @MaybeNull java.lang.Class<?> targetHandle, @MaybeNull java.lang.Class<?> sourceConstantDynamic, @MaybeNull java.lang.Class<?> targetConstantDynamic) throws java.lang.Exception
Creates a builder for a method visitor type.- Parameters:
byteBuddy
- The Byte Buddy instance to use.sourceVisitor
- The visitor type to map from.targetVisitor
- The visitor type to map to.sourceTypePath
- TheTypePath
source type.targetTypePath
- TheTypePath
target type.sourceLabel
- TheLabel
source type.targetLabel
- TheLabel
target type.sourceType
- TheType
source type.targetType
- TheType
target type.sourceHandle
- TheHandle
source type.targetHandle
- TheHandle
target type.sourceConstantDynamic
- TheConstantDynamic
source type.targetConstantDynamic
- TheConstantDynamic
target type.- Returns:
- The created builder.
- Throws:
java.lang.Exception
- If an exception occurs.
-
toConvertedParameter
private static MethodCall.ArgumentLoader.Factory toConvertedParameter(TypeDescription source, java.lang.Class<?> target, java.lang.String method, int offset, boolean virtual)
Creates an argument loader for a method parameter that requires conversion.- Parameters:
source
- The source type.target
- The target type.method
- The name of the method.offset
- The parameter offsetvirtual
-true
if the invoked method is virtual.- Returns:
- An appropriate argument loader factory.
-
toAttributeWrapper
private static DynamicType toAttributeWrapper(DynamicType.Builder<?> builder, java.lang.Class<?> source, java.lang.Class<?> target, TypeDescription sourceWrapper, TypeDescription targetWrapper) throws java.lang.Exception
Creates a wrapper type for anAttribute
to pass attribues along a visitor chain.- Parameters:
builder
- The builder to use for the wrapper type.source
- TheAttribute
type in the original namespace.target
- TheAttribute
type in the targeted namespace.sourceWrapper
- The wrapper type for theAttribute
type in the original namespace.targetWrapper
- The wrapper type for theAttribute
type in the targeted namespace.- Returns:
- The created dynamic type.
- Throws:
java.lang.Exception
- If the dynamic type cannot be built.
-
wrap
public abstract T wrap(org.objectweb.asm.ClassVisitor classVisitor)
Wraps aClassVisitor
within an instance of the supplied class visitor type.- Parameters:
classVisitor
- The class visitor to wrap.- Returns:
- A class visitor that wraps the supplied class visitor.
-
unwrap
public abstract org.objectweb.asm.ClassVisitor unwrap(T classVisitor)
Unwraps an instance of the supplied class visitor as aClassVisitor
.- Parameters:
classVisitor
- The class visitor to unwrap.- Returns:
- A class visitor that unwraps the supplied class visitor.
-
-