Package org.jboss.classfilewriter.code
Class CodeAttribute
- java.lang.Object
-
- org.jboss.classfilewriter.attributes.Attribute
-
- org.jboss.classfilewriter.code.CodeAttribute
-
- All Implemented Interfaces:
WritableEntry
public class CodeAttribute extends Attribute
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceCodeAttribute.StackFrameTypeResolverInterface that can be used to override the type merging process when merging stack frames
-
Constructor Summary
Constructors Constructor Description CodeAttribute(ClassMethod method, ConstPool constPool)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaaload()voidaastore()voidaconstNull()voidaload(int no)voidanewarray(String arrayType)voidarraylength()voidassertNotWideOnStack(int position, String message)voidassertNotWideOnStack(String message)voidassertTypeOnStack(int position, StackEntryType type, String message)voidassertTypeOnStack(StackEntryType type, String message)voidastore(int no)voidathrow()voidbaload()voidbastore()voidbipush(byte value)voidbranchEnd(BranchEnd end)marks the end of a branch.voidcaload()voidcastore()voidcheckcast(Class<?> clazz)voidcheckcast(String className)Do not use Descriptor format (e.g.voidd2f()voidd2i()voidd2l()voiddadd()voiddaload()voiddastore()voiddcmpg()voiddcmpl()voiddconst(double value)Adds the appropriate dconst instruction.voidddiv()voiddload(int no)voiddmul()voiddneg()voiddrem()voiddstore(int no)voiddsub()voiddup()voiddup2()voiddup2X1()voiddup2X2()voiddupX1()voiddupX2()voidexceptionBlockEnd(ExceptionHandler handler)Mark the end of an exception handler block.ExceptionHandlerexceptionBlockStart(String exceptionType)Begin writing an exception handler block.voidexceptionHandlerStart(ExceptionHandler handler)Marks the current code location as the exception handler and adds the handler to the exception handler table;voidf2d()voidf2i()voidf2l()voidfadd()voidfaload()voidfastore()voidfcmpg()voidfcmpl()voidfconst(float value)Adds the appropriate fconst instruction.voidfdiv()voidfload(int no)voidfmul()voidfneg()voidfrem()voidfstore(int no)voidfsub()ConstPoolgetConstPool()voidgetfield(String className, String field, Class<?> fieldType)voidgetfield(String className, String field, String descriptor)LinkedHashMap<Integer,StackFrame>getStackFrames()CodeAttribute.StackFrameTypeResolvergetStackFrameTypeResolver()voidgetstatic(String className, String field, Class<?> fieldType)voidgetstatic(String className, String field, String descriptor)BranchEndgotoInstruction()writes a goto instruction.voidgotoInstruction(CodeLocation location)writes a goto instruction.voidi2b()voidi2c()voidi2d()voidi2f()voidi2l()voidi2s()voidiadd()voidiaload()voidiand()voidiastore()voidiconst(int value)Adds the appropriate iconst instruction.voididiv()BranchEndifAcmpeq()voidifAcmpeq(CodeLocation location)BranchEndifAcmpne()voidifAcmpne(CodeLocation location)BranchEndifeq()voidifEq(CodeLocation location)BranchEndifge()voidifge(CodeLocation location)BranchEndifgt()voidifgt(CodeLocation location)BranchEndifIcmpeq()voidifIcmpeq(CodeLocation location)BranchEndifIcmpge()voidifIcmpge(CodeLocation location)BranchEndifIcmpgt()voidifIcmpgt(CodeLocation location)BranchEndifIcmple()voidifIcmple(CodeLocation location)BranchEndifIcmplt()voidifIcmplt(CodeLocation location)BranchEndifIcmpne()voidifIcmpne(CodeLocation location)BranchEndifle()voidifle(CodeLocation location)BranchEndiflt()voidiflt(CodeLocation location)BranchEndifne()voidifne(CodeLocation location)BranchEndifnotnull()voidifnotnull(CodeLocation location)BranchEndifnull()Jump to the given location if the reference type on the top of the stack is null.voidifnull(CodeLocation location)Jump to the given location if the reference type on the top of the stack is nullvoidiinc(int local, int amount)voidiload(int no)voidimul()voidineg()voidinstanceofInstruction(String className)voidinvokeinterface(Method method)voidinvokeinterface(String className, String methodName, String descriptor)voidinvokeinterface(String className, String methodName, String returnType, String[] parameterTypes)voidinvokespecial(Constructor<?> constructor)voidinvokespecial(Method method)voidinvokespecial(String className, String methodName, String descriptor)voidinvokespecial(String className, String methodName, String returnType, String[] parameterTypes)voidinvokestatic(Method method)voidinvokestatic(String className, String methodName, String descriptor)voidinvokestatic(String className, String methodName, String returnType, String[] parameterTypes)voidinvokevirtual(Method method)voidinvokevirtual(String className, String methodName, String descriptor)voidinvokevirtual(String className, String methodName, String returnType, String[] parameterTypes)voidior()voidirem()voidishl()voidishr()voidistore(int no)voidisub()voidiushr()voidixor()voidl2d()voidl2f()voidl2i()voidladd()voidlaload()voidland()voidlastore()voidlcmp()voidlconst(long value)Adds the appropriate lconst instruction.voidldc(float value)Adds an ldc instruction for floatvoidldc(int value)Adds an ldc instruction for an int.voidldc(String value)Adds an ldc instruction for a Stringvoidldc2(double value)Adds an ldc2_w instruction for doublevoidldc2(long value)Adds an ldc2_w instruction for longvoidldiv()voidlload(int no)voidlmul()voidlneg()voidload(Class<?> type, int no)Generates the apprpriate load instruction for the given typevoidload(String descriptor, int no)Generates the apprpriate load instruction for the given typevoidloadClass(String className)voidloadMethodParameters()loads all parameters onto the stack.voidloadType(String descriptor)Loads a java.lang.Class for the given descriptor into the stack.voidlookupswitch(LookupSwitchBuilder lookupSwitchBuilder)Adds a lookup switch statementvoidlor()voidlrem()voidlshl()voidlshr()voidlstore(int no)voidlsub()voidlushr()voidlxor()CodeLocationmark()Gets the location object for the current location in the bytecode.voidmonitorenter()voidmonitorexit()voidmultianewarray(String arrayType, int dimensions)voidnewarray(Class<?> arrayType)arrayType must be aClassobject that represents a primitive typevoidnewInstruction(Class<?> clazz)voidnewInstruction(String classname)voidnop()voidpop()voidpop2()voidputfield(String className, String field, Class<?> fieldType)voidputfield(String className, String field, String descriptor)voidputstatic(String className, String field, Class<?> fieldType)voidputstatic(String className, String field, String descriptor)voidreturnInstruction()Adds the appropriate return instruction for the methods return type.voidsaload()voidsastore()voidsetStackFrameTypeResolver(CodeAttribute.StackFrameTypeResolver stackFrameTypeResolver)voidsetupFrame(String... types)voidsipush(short value)voidswap()voidtableswitch(TableSwitchBuilder builder)voidwriteData(ByteArrayDataOutputStream stream)
-
-
-
Field Detail
-
NAME
public static final String NAME
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
CodeAttribute
public CodeAttribute(ClassMethod method, ConstPool constPool)
-
-
Method Detail
-
getStackFrameTypeResolver
public CodeAttribute.StackFrameTypeResolver getStackFrameTypeResolver()
-
setStackFrameTypeResolver
public void setStackFrameTypeResolver(CodeAttribute.StackFrameTypeResolver stackFrameTypeResolver)
-
writeData
public void writeData(ByteArrayDataOutputStream stream) throws IOException
- Specified by:
writeDatain classAttribute- Throws:
IOException
-
aaload
public void aaload()
-
aastore
public void aastore()
-
aconstNull
public void aconstNull()
-
aload
public void aload(int no)
-
anewarray
public void anewarray(String arrayType)
-
arraylength
public void arraylength()
-
astore
public void astore(int no)
-
athrow
public void athrow()
-
baload
public void baload()
-
bastore
public void bastore()
-
caload
public void caload()
-
castore
public void castore()
-
bipush
public void bipush(byte value)
-
branchEnd
public void branchEnd(BranchEnd end)
marks the end of a branch. The current stack frame is checked for compatibility with the stack frame at the branch start
-
checkcast
public void checkcast(String className)
Do not use Descriptor format (e.g. Ljava/lang/Object;), the correct form is just java/lang/Object or java.lang.Object
-
checkcast
public void checkcast(Class<?> clazz)
-
d2f
public void d2f()
-
d2i
public void d2i()
-
d2l
public void d2l()
-
dadd
public void dadd()
-
daload
public void daload()
-
dastore
public void dastore()
-
dcmpg
public void dcmpg()
-
dcmpl
public void dcmpl()
-
dconst
public void dconst(double value)
Adds the appropriate dconst instruction. note, if the value is not 0 or 1 then ldc is used instead
-
ddiv
public void ddiv()
-
dload
public void dload(int no)
-
dmul
public void dmul()
-
dneg
public void dneg()
-
drem
public void drem()
-
dstore
public void dstore(int no)
-
dsub
public void dsub()
-
dup
public void dup()
-
dupX1
public void dupX1()
-
dupX2
public void dupX2()
-
dup2
public void dup2()
-
dup2X1
public void dup2X1()
-
dup2X2
public void dup2X2()
-
exceptionBlockStart
public ExceptionHandler exceptionBlockStart(String exceptionType)
Begin writing an exception handler block. The handler is not actually persisted until exceptionHandler is called.
-
exceptionBlockEnd
public void exceptionBlockEnd(ExceptionHandler handler)
Mark the end of an exception handler block. The last instruction that was written will be the last instruction covered by the handler
-
exceptionHandlerStart
public void exceptionHandlerStart(ExceptionHandler handler)
Marks the current code location as the exception handler and adds the handler to the exception handler table;
-
f2d
public void f2d()
-
f2i
public void f2i()
-
f2l
public void f2l()
-
fadd
public void fadd()
-
faload
public void faload()
-
fastore
public void fastore()
-
fcmpg
public void fcmpg()
-
fcmpl
public void fcmpl()
-
fconst
public void fconst(float value)
Adds the appropriate fconst instruction. note, if the value is not 0, 1, 2 then ldc is used instead
-
fdiv
public void fdiv()
-
fload
public void fload(int no)
-
fmul
public void fmul()
-
fneg
public void fneg()
-
frem
public void frem()
-
fstore
public void fstore(int no)
-
fsub
public void fsub()
-
gotoInstruction
public void gotoInstruction(CodeLocation location)
writes a goto instruction. TODO: implemented goto_w
-
gotoInstruction
public BranchEnd gotoInstruction()
writes a goto instruction. TODO: implemented goto_w
-
i2b
public void i2b()
-
i2c
public void i2c()
-
i2d
public void i2d()
-
i2f
public void i2f()
-
i2l
public void i2l()
-
i2s
public void i2s()
-
iadd
public void iadd()
-
iaload
public void iaload()
-
iand
public void iand()
-
iastore
public void iastore()
-
iconst
public void iconst(int value)
Adds the appropriate iconst instruction. note, if the value is not in the range -1 to 5 ldc is written instead- Parameters:
value-
-
idiv
public void idiv()
-
ifAcmpeq
public void ifAcmpeq(CodeLocation location)
-
ifAcmpeq
public BranchEnd ifAcmpeq()
-
ifAcmpne
public void ifAcmpne(CodeLocation location)
-
ifAcmpne
public BranchEnd ifAcmpne()
-
ifIcmpeq
public void ifIcmpeq(CodeLocation location)
-
ifIcmpeq
public BranchEnd ifIcmpeq()
-
ifIcmpne
public void ifIcmpne(CodeLocation location)
-
ifIcmpne
public BranchEnd ifIcmpne()
-
ifIcmplt
public void ifIcmplt(CodeLocation location)
-
ifIcmplt
public BranchEnd ifIcmplt()
-
ifIcmple
public void ifIcmple(CodeLocation location)
-
ifIcmple
public BranchEnd ifIcmple()
-
ifIcmpgt
public void ifIcmpgt(CodeLocation location)
-
ifIcmpgt
public BranchEnd ifIcmpgt()
-
ifIcmpge
public void ifIcmpge(CodeLocation location)
-
ifIcmpge
public BranchEnd ifIcmpge()
-
ifEq
public void ifEq(CodeLocation location)
-
ifeq
public BranchEnd ifeq()
-
ifne
public void ifne(CodeLocation location)
-
ifne
public BranchEnd ifne()
-
iflt
public void iflt(CodeLocation location)
-
iflt
public BranchEnd iflt()
-
ifle
public void ifle(CodeLocation location)
-
ifle
public BranchEnd ifle()
-
ifgt
public void ifgt(CodeLocation location)
-
ifgt
public BranchEnd ifgt()
-
ifge
public void ifge(CodeLocation location)
-
ifge
public BranchEnd ifge()
-
ifnotnull
public void ifnotnull(CodeLocation location)
-
ifnotnull
public BranchEnd ifnotnull()
-
ifnull
public void ifnull(CodeLocation location)
Jump to the given location if the reference type on the top of the stack is null
-
ifnull
public BranchEnd ifnull()
Jump to the given location if the reference type on the top of the stack is null. TheBranchEndreturned from this method is used to set the end point to a future point in the bytecode stream
-
iinc
public void iinc(int local, int amount)
-
iload
public void iload(int no)
-
imul
public void imul()
-
ineg
public void ineg()
-
instanceofInstruction
public void instanceofInstruction(String className)
-
invokespecial
public void invokespecial(String className, String methodName, String returnType, String[] parameterTypes)
-
invokespecial
public void invokespecial(Constructor<?> constructor)
-
invokespecial
public void invokespecial(Method method)
-
invokestatic
public void invokestatic(String className, String methodName, String returnType, String[] parameterTypes)
-
invokestatic
public void invokestatic(Method method)
-
invokevirtual
public void invokevirtual(String className, String methodName, String returnType, String[] parameterTypes)
-
invokevirtual
public void invokevirtual(Method method)
-
invokeinterface
public void invokeinterface(String className, String methodName, String descriptor)
-
invokeinterface
public void invokeinterface(String className, String methodName, String returnType, String[] parameterTypes)
-
invokeinterface
public void invokeinterface(Method method)
-
ior
public void ior()
-
irem
public void irem()
-
ishl
public void ishl()
-
ishr
public void ishr()
-
istore
public void istore(int no)
-
isub
public void isub()
-
iushr
public void iushr()
-
ixor
public void ixor()
-
l2d
public void l2d()
-
l2f
public void l2f()
-
l2i
public void l2i()
-
ladd
public void ladd()
-
laload
public void laload()
-
land
public void land()
-
lastore
public void lastore()
-
lcmp
public void lcmp()
-
lconst
public void lconst(long value)
Adds the appropriate lconst instruction. note, if the value is not 0 or 1 then ldc is used instead
-
ldc
public void ldc(int value)
Adds an ldc instruction for an int.- Parameters:
value- The value to load
-
ldc
public void ldc(float value)
Adds an ldc instruction for float
-
ldc
public void ldc(String value)
Adds an ldc instruction for a String To load a class literal using ldc use the @{link #loadType(String)} method.
-
ldc2
public void ldc2(double value)
Adds an ldc2_w instruction for double
-
ldc2
public void ldc2(long value)
Adds an ldc2_w instruction for long
-
ldiv
public void ldiv()
-
lload
public void lload(int no)
-
lmul
public void lmul()
-
lneg
public void lneg()
-
load
public void load(Class<?> type, int no)
Generates the apprpriate load instruction for the given type- Parameters:
type- The type of variableno- local variable number
-
load
public void load(String descriptor, int no)
Generates the apprpriate load instruction for the given type- Parameters:
descriptor- The descriptor of the variableno- local variable number
-
loadClass
public void loadClass(String className)
-
loadType
public void loadType(String descriptor)
Loads a java.lang.Class for the given descriptor into the stack.
-
lookupswitch
public void lookupswitch(LookupSwitchBuilder lookupSwitchBuilder)
Adds a lookup switch statement- Parameters:
lookupSwitchBuilder-
-
lor
public void lor()
-
lrem
public void lrem()
-
lshl
public void lshl()
-
lshr
public void lshr()
-
lstore
public void lstore(int no)
-
lsub
public void lsub()
-
lushr
public void lushr()
-
lxor
public void lxor()
-
mark
public CodeLocation mark()
Gets the location object for the current location in the bytecode. Jumps to this location will begin executing the next instruction that is written to the bytecode stream
-
monitorenter
public void monitorenter()
-
monitorexit
public void monitorexit()
-
multianewarray
public void multianewarray(String arrayType, int dimensions)
-
newInstruction
public void newInstruction(String classname)
-
newInstruction
public void newInstruction(Class<?> clazz)
-
newarray
public void newarray(Class<?> arrayType)
arrayType must be aClassobject that represents a primitive type
-
nop
public void nop()
-
pop
public void pop()
-
pop2
public void pop2()
-
returnInstruction
public void returnInstruction()
Adds the appropriate return instruction for the methods return type.
-
saload
public void saload()
-
sastore
public void sastore()
-
sipush
public void sipush(short value)
-
swap
public void swap()
-
tableswitch
public void tableswitch(TableSwitchBuilder builder)
-
loadMethodParameters
public void loadMethodParameters()
loads all parameters onto the stack. If this method is non-static then the parameter at location 0 (i.e. this object) is not pushed.
-
getStackFrames
public LinkedHashMap<Integer,StackFrame> getStackFrames()
-
setupFrame
public void setupFrame(String... types)
-
getConstPool
public ConstPool getConstPool()
-
assertTypeOnStack
public void assertTypeOnStack(int position, StackEntryType type, String message)
-
assertTypeOnStack
public void assertTypeOnStack(StackEntryType type, String message)
-
assertNotWideOnStack
public void assertNotWideOnStack(int position, String message)
-
assertNotWideOnStack
public void assertNotWideOnStack(String message)
-
-