edu.umd.cs.findbugs.ba
public abstract class AbstractFrameModelingVisitor<Value,FrameType extends Frame<Value>> extends Object implements Visitor
Subclasses should override the visit methods for any bytecode instructions which require special handling.
Users of AbstractFrameModelingVisitors should call the analyzeInstruction() method instead of directly using the accept() method of the instruction. This allows a checked DataflowAnalysisException to be thrown when invalid bytecode is detected. E.g., stack underflows.
See Also: Frame DataflowAnalysis
Field Summary | |
---|---|
protected ConstantPoolGen | cpg |
Constructor Summary | |
---|---|
AbstractFrameModelingVisitor(ConstantPoolGen cpg)
Constructor.
|
Method Summary | |
---|---|
void | analyzeInstruction(Instruction ins)
Analyze the given Instruction.
|
ConstantPoolGen | getCPG()
Get the ConstantPoolGen for the method. |
abstract Value | getDefaultValue()
Produce a "default" value.
|
FrameType | getFrame()
Get the frame.
|
Location | getLocation()
Get the Location.
|
int | getNumWordsConsumed(Instruction ins)
Get the number of words consumed by given instruction. |
int | getNumWordsProduced(Instruction ins)
Get the number of words produced by given instruction. |
void | handleLoadInstruction(LoadInstruction obj)
Handler for all instructions which load values from a local variable
and push them on the stack. |
void | handleNormalInstruction(Instruction ins)
This is called to handle any instruction which does not simply
copy values between stack slots. |
void | handleStoreInstruction(StoreInstruction obj)
Handler for all instructions which pop values from the stack
and store them in a local variable. |
void | modelInstruction(Instruction ins, int numWordsConsumed, int numWordsProduced, Value pushValue)
Primitive to model the stack effect of a single instruction,
explicitly specifying the value to be pushed on the stack.
|
void | modelNormalInstruction(Instruction ins, int numWordsConsumed, int numWordsProduced)
Model the stack for instructions handled by handleNormalInstruction().
|
void | setFrameAndLocation(FrameType frame, Location location)
Set the frame and Location for the instruction about to
be modeled.
|
void | visitAALOAD(AALOAD obj) |
void | visitAASTORE(AASTORE obj) |
void | visitACONST_NULL(ACONST_NULL obj) |
void | visitAllocationInstruction(AllocationInstruction obj) |
void | visitALOAD(ALOAD obj) |
void | visitANEWARRAY(ANEWARRAY obj) |
void | visitArithmeticInstruction(ArithmeticInstruction obj) |
void | visitArrayInstruction(ArrayInstruction obj) |
void | visitARETURN(ARETURN obj) |
void | visitARRAYLENGTH(ARRAYLENGTH obj) |
void | visitASTORE(ASTORE obj) |
void | visitATHROW(ATHROW obj) |
void | visitBALOAD(BALOAD obj) |
void | visitBASTORE(BASTORE obj) |
void | visitBIPUSH(BIPUSH obj) |
void | visitBranchInstruction(BranchInstruction obj) |
void | visitBREAKPOINT(BREAKPOINT obj) |
void | visitCALOAD(CALOAD obj) |
void | visitCASTORE(CASTORE obj) |
void | visitCHECKCAST(CHECKCAST obj) |
void | visitConstantPushInstruction(ConstantPushInstruction obj) |
void | visitConversionInstruction(ConversionInstruction obj) |
void | visitCPInstruction(CPInstruction obj) |
void | visitD2F(D2F obj) |
void | visitD2I(D2I obj) |
void | visitD2L(D2L obj) |
void | visitDADD(DADD obj) |
void | visitDALOAD(DALOAD obj) |
void | visitDASTORE(DASTORE obj) |
void | visitDCMPG(DCMPG obj) |
void | visitDCMPL(DCMPL obj) |
void | visitDCONST(DCONST obj) |
void | visitDDIV(DDIV obj) |
void | visitDLOAD(DLOAD obj) |
void | visitDMUL(DMUL obj) |
void | visitDNEG(DNEG obj) |
void | visitDREM(DREM obj) |
void | visitDRETURN(DRETURN obj) |
void | visitDSTORE(DSTORE obj) |
void | visitDSUB(DSUB obj) |
void | visitDUP(DUP obj) |
void | visitDUP2(DUP2 obj) |
void | visitDUP2_X1(DUP2_X1 obj) |
void | visitDUP2_X2(DUP2_X2 obj) |
void | visitDUP_X1(DUP_X1 obj) |
void | visitDUP_X2(DUP_X2 obj) |
void | visitExceptionThrower(ExceptionThrower obj) |
void | visitF2D(F2D obj) |
void | visitF2I(F2I obj) |
void | visitF2L(F2L obj) |
void | visitFADD(FADD obj) |
void | visitFALOAD(FALOAD obj) |
void | visitFASTORE(FASTORE obj) |
void | visitFCMPG(FCMPG obj) |
void | visitFCMPL(FCMPL obj) |
void | visitFCONST(FCONST obj) |
void | visitFDIV(FDIV obj) |
void | visitFieldInstruction(FieldInstruction obj) |
void | visitFieldOrMethod(FieldOrMethod obj) |
void | visitFLOAD(FLOAD obj) |
void | visitFMUL(FMUL obj) |
void | visitFNEG(FNEG obj) |
void | visitFREM(FREM obj) |
void | visitFRETURN(FRETURN obj) |
void | visitFSTORE(FSTORE obj) |
void | visitFSUB(FSUB obj) |
void | visitGETFIELD(GETFIELD obj) |
void | visitGETSTATIC(GETSTATIC obj) |
void | visitGotoInstruction(GotoInstruction obj) |
void | visitGOTO(GOTO obj) |
void | visitGOTO_W(GOTO_W obj) |
void | visitI2B(I2B obj) |
void | visitI2C(I2C obj) |
void | visitI2D(I2D obj) |
void | visitI2F(I2F obj) |
void | visitI2L(I2L obj) |
void | visitI2S(I2S obj) |
void | visitIADD(IADD obj) |
void | visitIALOAD(IALOAD obj) |
void | visitIAND(IAND obj) |
void | visitIASTORE(IASTORE obj) |
void | visitICONST(ICONST obj) |
void | visitIDIV(IDIV obj) |
void | visitIfInstruction(IfInstruction obj) |
void | visitIFEQ(IFEQ obj) |
void | visitIFGE(IFGE obj) |
void | visitIFGT(IFGT obj) |
void | visitIFLE(IFLE obj) |
void | visitIFLT(IFLT obj) |
void | visitIFNE(IFNE obj) |
void | visitIFNONNULL(IFNONNULL obj) |
void | visitIFNULL(IFNULL obj) |
void | visitIF_ACMPEQ(IF_ACMPEQ obj) |
void | visitIF_ACMPNE(IF_ACMPNE obj) |
void | visitIF_ICMPEQ(IF_ICMPEQ obj) |
void | visitIF_ICMPGE(IF_ICMPGE obj) |
void | visitIF_ICMPGT(IF_ICMPGT obj) |
void | visitIF_ICMPLE(IF_ICMPLE obj) |
void | visitIF_ICMPLT(IF_ICMPLT obj) |
void | visitIF_ICMPNE(IF_ICMPNE obj) |
void | visitIINC(IINC obj) |
void | visitILOAD(ILOAD obj) |
void | visitIMPDEP1(IMPDEP1 obj) |
void | visitIMPDEP2(IMPDEP2 obj) |
void | visitIMUL(IMUL obj) |
void | visitInvokeInstruction(InvokeInstruction obj) |
void | visitINEG(INEG obj) |
void | visitINSTANCEOF(INSTANCEOF obj) |
void | visitINVOKEINTERFACE(INVOKEINTERFACE obj) |
void | visitINVOKESPECIAL(INVOKESPECIAL obj) |
void | visitINVOKESTATIC(INVOKESTATIC obj) |
void | visitINVOKEVIRTUAL(INVOKEVIRTUAL obj) |
void | visitIOR(IOR obj) |
void | visitIREM(IREM obj) |
void | visitIRETURN(IRETURN obj) |
void | visitISHL(ISHL obj) |
void | visitISHR(ISHR obj) |
void | visitISTORE(ISTORE obj) |
void | visitISUB(ISUB obj) |
void | visitIUSHR(IUSHR obj) |
void | visitIXOR(IXOR obj) |
void | visitJsrInstruction(JsrInstruction obj) |
void | visitJSR(JSR obj) |
void | visitJSR_W(JSR_W obj) |
void | visitL2D(L2D obj) |
void | visitL2F(L2F obj) |
void | visitL2I(L2I obj) |
void | visitLADD(LADD obj) |
void | visitLALOAD(LALOAD obj) |
void | visitLAND(LAND obj) |
void | visitLASTORE(LASTORE obj) |
void | visitLCMP(LCMP obj) |
void | visitLCONST(LCONST obj) |
void | visitLDC(LDC obj) |
void | visitLDC2_W(LDC2_W obj) |
void | visitLDIV(LDIV obj) |
void | visitLLOAD(LLOAD obj) |
void | visitLMUL(LMUL obj) |
void | visitLNEG(LNEG obj) |
void | visitLoadClass(LoadClass obj) |
void | visitLoadInstruction(LoadInstruction obj) |
void | visitLocalVariableInstruction(LocalVariableInstruction obj) |
void | visitLOOKUPSWITCH(LOOKUPSWITCH obj) |
void | visitLOR(LOR obj) |
void | visitLREM(LREM obj) |
void | visitLRETURN(LRETURN obj) |
void | visitLSHL(LSHL obj) |
void | visitLSHR(LSHR obj) |
void | visitLSTORE(LSTORE obj) |
void | visitLSUB(LSUB obj) |
void | visitLUSHR(LUSHR obj) |
void | visitLXOR(LXOR obj) |
void | visitMONITORENTER(MONITORENTER obj) |
void | visitMONITOREXIT(MONITOREXIT obj) |
void | visitMULTIANEWARRAY(MULTIANEWARRAY obj) |
void | visitNEW(NEW obj) |
void | visitNEWARRAY(NEWARRAY obj) |
void | visitNOP(NOP obj) |
void | visitPopInstruction(PopInstruction obj) |
void | visitPOP(POP obj) |
void | visitPOP2(POP2 obj) |
void | visitPushInstruction(PushInstruction obj) |
void | visitPUTFIELD(PUTFIELD obj) |
void | visitPUTSTATIC(PUTSTATIC obj) |
void | visitReturnInstruction(ReturnInstruction obj) |
void | visitRET(RET obj) |
void | visitRETURN(RETURN obj) |
void | visitSALOAD(SALOAD obj) |
void | visitSASTORE(SASTORE obj) |
void | visitSelect(Select obj) |
void | visitSIPUSH(SIPUSH obj) |
void | visitStackConsumer(StackConsumer obj) |
void | visitStackInstruction(StackInstruction obj) |
void | visitStackProducer(StackProducer obj) |
void | visitStoreInstruction(StoreInstruction obj) |
void | visitSWAP(SWAP obj) |
void | visitTABLESWITCH(TABLESWITCH obj) |
void | visitTypedInstruction(TypedInstruction obj) |
void | visitUnconditionalBranch(UnconditionalBranch obj) |
void | visitVariableLengthInstruction(VariableLengthInstruction obj) |
Parameters: cpg the ConstantPoolGen of the method to be analyzed
Parameters: ins the Instruction
Throws: DataflowAnalysisException if an error occurs analyzing the instruction; in most cases, this indicates that the bytecode for the method being analyzed is invalid
Returns: the Frame object
Returns: the Location
Parameters: ins the Instruction to model numWordsConsumed number of stack words consumed numWordsProduced number of stack words produced pushValue value to push on the stack
Parameters: ins the Instruction to model numWordsConsumed number of stack words consumed numWordsProduced number of stack words produced
Parameters: frame the Frame location the Location