Enum TypeConstantAdjustment
- java.lang.Object
-
- java.lang.Enum<TypeConstantAdjustment>
-
- net.bytebuddy.asm.TypeConstantAdjustment
-
- All Implemented Interfaces:
java.io.Serializable
,java.lang.Comparable<TypeConstantAdjustment>
,AsmVisitorWrapper
public enum TypeConstantAdjustment extends java.lang.Enum<TypeConstantAdjustment> implements AsmVisitorWrapper
This class visitor wrapper ensures that class files of a version previous to Java 5 do not store class entries in the generated class's constant pool. All found class instances are instead mapped as
String
values where the class constant is retrieved by a call toClass.forName(String)
.Warning: This can lead to subtle bugs as classes that are not available yield a
ClassNotFoundException
instead of aNoClassDefFoundError
. The former, checked exception could therefore be thrown even if the method that unsuccessfully loads a class does not declared the checked exception. Furthermore,Class
constants are not cached as fields within the class as the Java compiler implemented class constants before Java 5. As a benefit for this limitation, the registered wrapper does not require any additional work by aClassWriter
orClassReader
, i.e. does not set any flags.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
TypeConstantAdjustment.TypeConstantDissolvingClassVisitor
A class visitor that checks a class file version for its support of storing class constants in the constant pool and remaps such constants on discovery if that is not the case.-
Nested classes/interfaces inherited from interface net.bytebuddy.asm.AsmVisitorWrapper
AsmVisitorWrapper.AbstractBase, AsmVisitorWrapper.Compound, AsmVisitorWrapper.ForDeclaredFields, AsmVisitorWrapper.ForDeclaredMethods, AsmVisitorWrapper.NoOp
-
-
Enum Constant Summary
Enum Constants Enum Constant Description INSTANCE
The singleton instance.
-
Field Summary
-
Fields inherited from interface net.bytebuddy.asm.AsmVisitorWrapper
NO_FLAGS
-
-
Constructor Summary
Constructors Modifier Constructor Description private
TypeConstantAdjustment()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
mergeReader(int flags)
Defines the flags that are provided to anyClassReader
when reading a class if applicable.int
mergeWriter(int flags)
Defines the flags that are provided to anyClassWriter
when writing a class.static TypeConstantAdjustment
valueOf(java.lang.String name)
Returns the enum constant of this type with the specified name.static TypeConstantAdjustment[]
values()
Returns an array containing the constants of this enum type, in the order they are declared.org.objectweb.asm.ClassVisitor
wrap(TypeDescription instrumentedType, org.objectweb.asm.ClassVisitor classVisitor, Implementation.Context implementationContext, TypePool typePool, FieldList<FieldDescription.InDefinedShape> fields, MethodList<?> methods, int writerFlags, int readerFlags)
Applies aClassVisitorWrapper
to the creation of aDynamicType
.
-
-
-
Enum Constant Detail
-
INSTANCE
public static final TypeConstantAdjustment INSTANCE
The singleton instance.
-
-
Method Detail
-
values
public static TypeConstantAdjustment[] values()
Returns an array containing the constants of this enum type, in the order they are declared. This method may be used to iterate over the constants as follows:for (TypeConstantAdjustment c : TypeConstantAdjustment.values()) System.out.println(c);
- Returns:
- an array containing the constants of this enum type, in the order they are declared
-
valueOf
public static TypeConstantAdjustment valueOf(java.lang.String name)
Returns the enum constant of this type with the specified name. The string must match exactly an identifier used to declare an enum constant in this type. (Extraneous whitespace characters are not permitted.)- Parameters:
name
- the name of the enum constant to be returned.- Returns:
- the enum constant with the specified name
- Throws:
java.lang.IllegalArgumentException
- if this enum type has no constant with the specified namejava.lang.NullPointerException
- if the argument is null
-
mergeWriter
public int mergeWriter(int flags)
Defines the flags that are provided to anyClassWriter
when writing a class. Typically, this gives opportunity to instruct ASM to compute stack map frames or the size of the local variables array and the operand stack. If no specific flags are required for applying this wrapper, the given value is to be returned.- Specified by:
mergeWriter
in interfaceAsmVisitorWrapper
- Parameters:
flags
- The currently set flags. This value should be combined (e.g.flags | foo
) into the value that is returned by this wrapper.- Returns:
- The flags to be provided to the ASM
ClassWriter
.
-
mergeReader
public int mergeReader(int flags)
Defines the flags that are provided to anyClassReader
when reading a class if applicable. Typically, this gives opportunity to instruct ASM to expand or skip frames and to skip code and debug information. If no specific flags are required for applying this wrapper, the given value is to be returned.- Specified by:
mergeReader
in interfaceAsmVisitorWrapper
- Parameters:
flags
- The currently set flags. This value should be combined (e.g.flags | foo
) into the value that is returned by this wrapper.- Returns:
- The flags to be provided to the ASM
ClassReader
.
-
wrap
public org.objectweb.asm.ClassVisitor wrap(TypeDescription instrumentedType, org.objectweb.asm.ClassVisitor classVisitor, Implementation.Context implementationContext, TypePool typePool, FieldList<FieldDescription.InDefinedShape> fields, MethodList<?> methods, int writerFlags, int readerFlags)
Applies aClassVisitorWrapper
to the creation of aDynamicType
.- Specified by:
wrap
in interfaceAsmVisitorWrapper
- Parameters:
instrumentedType
- The instrumented type.classVisitor
- AClassVisitor
to become the new primary class visitor to which the createdDynamicType
is written to.implementationContext
- The implementation context of the current instrumentation.typePool
- The type pool that was provided for the class creation.fields
- The instrumented type's fields.methods
- The instrumented type's methods non-ignored declared and virtually inherited methods.writerFlags
- The ASMClassWriter
flags to consider.readerFlags
- The ASMClassReader
flags to consider.- Returns:
- A new
ClassVisitor
that usually delegates to theClassVisitor
delivered in the argument.
-
-