Class IsNullValueFrameModelingVisitor
java.lang.Object
edu.umd.cs.findbugs.ba.AbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
edu.umd.cs.findbugs.ba.npe.IsNullValueFrameModelingVisitor
- All Implemented Interfaces:
org.apache.bcel.generic.Visitor
public class IsNullValueFrameModelingVisitor
extends AbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AssertionMethodsprivate static final booleanprivate static final booleanprivate intprivate final booleanprivate final TypeDataflowprivate final ValueNumberDataflowFields inherited from class AbstractFrameModelingVisitor
cpg -
Constructor Summary
ConstructorsConstructorDescriptionIsNullValueFrameModelingVisitor(org.apache.bcel.generic.ConstantPoolGen cpg, AssertionMethods assertionMethods, ValueNumberDataflow vnaDataflow, TypeDataflow typeDataflow, boolean trackValueNumbers) -
Method Summary
Modifier and TypeMethodDescriptionvoidanalyzeInstruction(org.apache.bcel.generic.Instruction ins) Analyze the given Instruction.private booleancheckForKnownValue(org.apache.bcel.generic.Instruction obj) Check given Instruction to see if it produces a known value.Produce a "default" value.getReturnValueNullness(XMethod calledMethod) intprivate voidhandleInvoke(org.apache.bcel.generic.InvokeInstruction obj) Handle method invocations.private voidHook indicating that a new (possibly-null) value is on the top of the stack.private voidproduce(IsNullValue value) private voidproduce2(IsNullValue value) voidvisitACONST_NULL(org.apache.bcel.generic.ACONST_NULL obj) voidvisitANEWARRAY(org.apache.bcel.generic.ANEWARRAY obj) voidvisitCHECKCAST(org.apache.bcel.generic.CHECKCAST obj) voidvisitGETFIELD(org.apache.bcel.generic.GETFIELD obj) voidvisitGETSTATIC(org.apache.bcel.generic.GETSTATIC obj) voidvisitINVOKEINTERFACE(org.apache.bcel.generic.INVOKEINTERFACE obj) voidvisitINVOKESPECIAL(org.apache.bcel.generic.INVOKESPECIAL obj) voidvisitINVOKESTATIC(org.apache.bcel.generic.INVOKESTATIC obj) voidvisitINVOKEVIRTUAL(org.apache.bcel.generic.INVOKEVIRTUAL obj) voidvisitLDC(org.apache.bcel.generic.LDC obj) voidvisitLDC2_W(org.apache.bcel.generic.LDC2_W obj) voidvisitMULTIANEWARRAY(org.apache.bcel.generic.MULTIANEWARRAY obj) voidvisitNEW(org.apache.bcel.generic.NEW obj) voidvisitNEWARRAY(org.apache.bcel.generic.NEWARRAY obj) voidvisitPUTFIELD(org.apache.bcel.generic.PUTFIELD obj) Methods inherited from class AbstractFrameModelingVisitor
getCPG, getFrame, getLocation, getNumWordsConsumed, getNumWordsProduced, handleLoadInstruction, handleNormalInstruction, handleStoreInstruction, modelInstruction, modelNormalInstruction, setFrameAndLocation, visitAALOAD, visitAASTORE, visitAllocationInstruction, visitALOAD, visitARETURN, visitArithmeticInstruction, visitArrayInstruction, visitARRAYLENGTH, visitASTORE, visitATHROW, visitBALOAD, visitBASTORE, visitBIPUSH, visitBranchInstruction, visitBREAKPOINT, visitCALOAD, visitCASTORE, visitConstantPushInstruction, visitConversionInstruction, visitConversionInstruction2, visitCPInstruction, visitD2F, visitD2I, visitD2L, visitDADD, visitDALOAD, visitDASTORE, visitDCMPG, visitDCMPL, visitDCONST, visitDDIV, visitDLOAD, visitDMUL, visitDNEG, visitDREM, visitDRETURN, visitDSTORE, visitDSUB, visitDUP, visitDUP_X1, visitDUP_X2, visitDUP2, visitDUP2_X1, visitDUP2_X2, visitExceptionThrower, visitF2D, visitF2I, visitF2L, visitFADD, visitFALOAD, visitFASTORE, visitFCMPG, visitFCMPL, visitFCONST, visitFDIV, visitFieldInstruction, visitFieldOrMethod, visitFLOAD, visitFMUL, visitFNEG, visitFREM, visitFRETURN, visitFSTORE, visitFSUB, visitGOTO, visitGOTO_W, visitGotoInstruction, visitI2B, visitI2C, visitI2D, visitI2F, visitI2L, visitI2S, visitIADD, visitIALOAD, visitIAND, visitIASTORE, visitICONST, visitIDIV, visitIF_ACMPEQ, visitIF_ACMPNE, visitIF_ICMPEQ, visitIF_ICMPGE, visitIF_ICMPGT, visitIF_ICMPLE, visitIF_ICMPLT, visitIF_ICMPNE, visitIFEQ, visitIFGE, visitIFGT, visitIfInstruction, visitIFLE, visitIFLT, visitIFNE, visitIFNONNULL, visitIFNULL, visitIINC, visitILOAD, visitIMPDEP1, visitIMPDEP2, visitIMUL, visitINEG, visitINSTANCEOF, visitINVOKEDYNAMIC, visitInvokeInstruction, visitIOR, visitIREM, visitIRETURN, visitISHL, visitISHR, visitISTORE, visitISUB, visitIUSHR, visitIXOR, visitJSR, visitJSR_W, visitJsrInstruction, visitL2D, visitL2F, visitL2I, visitLADD, visitLALOAD, visitLAND, visitLASTORE, visitLCMP, visitLCONST, visitLDIV, visitLLOAD, visitLMUL, visitLNEG, visitLoadClass, visitLoadInstruction, visitLocalVariableInstruction, visitLOOKUPSWITCH, visitLOR, visitLREM, visitLRETURN, visitLSHL, visitLSHR, visitLSTORE, visitLSUB, visitLUSHR, visitLXOR, visitMONITORENTER, visitMONITOREXIT, visitNONNULL2Z, visitNOP, visitNULL2Z, visitPOP, visitPOP2, visitPopInstruction, visitPushInstruction, visitPUTSTATIC, visitRET, visitRETURN, visitReturnInstruction, visitSALOAD, visitSASTORE, visitSelect, visitSIPUSH, visitStackConsumer, visitStackInstruction, visitStackProducer, visitStoreInstruction, visitSWAP, visitTABLESWITCH, visitTypedInstruction, visitUnconditionalBranch, visitVariableLengthInstruction
-
Field Details
-
NO_ASSERT_HACK
private static final boolean NO_ASSERT_HACK -
MODEL_NONNULL_RETURN
private static final boolean MODEL_NONNULL_RETURN -
assertionMethods
-
vnaDataflow
-
typeDataflow
-
trackValueNumbers
private final boolean trackValueNumbers -
slotContainingNewNullValue
private int slotContainingNewNullValue
-
-
Constructor Details
-
IsNullValueFrameModelingVisitor
public IsNullValueFrameModelingVisitor(org.apache.bcel.generic.ConstantPoolGen cpg, AssertionMethods assertionMethods, ValueNumberDataflow vnaDataflow, TypeDataflow typeDataflow, boolean trackValueNumbers)
-
-
Method Details
-
analyzeInstruction
public void analyzeInstruction(org.apache.bcel.generic.Instruction ins) throws DataflowAnalysisException Description copied from class:AbstractFrameModelingVisitorAnalyze the given Instruction.- Overrides:
analyzeInstructionin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>- 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
-
getSlotContainingNewNullValue
public int getSlotContainingNewNullValue()- Returns:
- Returns the slotContainingNewNullValue; or -1 if no new null value was produced
-
getDefaultValue
Description copied from class:AbstractFrameModelingVisitorProduce a "default" value. This is what is pushed onto the stack by the handleNormalInstruction() method for instructions which produce stack values.- Specified by:
getDefaultValuein classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
produce
-
produce2
-
handleInvoke
private void handleInvoke(org.apache.bcel.generic.InvokeInstruction obj) Handle method invocations. Generally, we want to get rid of null information following a call to a likely exception thrower or assertion. -
getReturnValueNullness
-
newValueOnTOS
private void newValueOnTOS()Hook indicating that a new (possibly-null) value is on the top of the stack. -
visitPUTFIELD
public void visitPUTFIELD(org.apache.bcel.generic.PUTFIELD obj) - Specified by:
visitPUTFIELDin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitPUTFIELDin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitGETFIELD
public void visitGETFIELD(org.apache.bcel.generic.GETFIELD obj) - Specified by:
visitGETFIELDin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitGETFIELDin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitGETSTATIC
public void visitGETSTATIC(org.apache.bcel.generic.GETSTATIC obj) - Specified by:
visitGETSTATICin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitGETSTATICin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
checkForKnownValue
private boolean checkForKnownValue(org.apache.bcel.generic.Instruction obj) Check given Instruction to see if it produces a known value. If so, model the instruction and return true. Otherwise, do nothing and return false. Should only be used for instructions that produce a single value on the top of the stack.- Parameters:
obj- the Instruction the instruction- Returns:
- true if the instruction produced a known value and was modeled, false otherwise
-
visitACONST_NULL
public void visitACONST_NULL(org.apache.bcel.generic.ACONST_NULL obj) - Specified by:
visitACONST_NULLin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitACONST_NULLin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitNEW
public void visitNEW(org.apache.bcel.generic.NEW obj) - Specified by:
visitNEWin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitNEWin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitNEWARRAY
public void visitNEWARRAY(org.apache.bcel.generic.NEWARRAY obj) - Specified by:
visitNEWARRAYin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitNEWARRAYin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitANEWARRAY
public void visitANEWARRAY(org.apache.bcel.generic.ANEWARRAY obj) - Specified by:
visitANEWARRAYin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitANEWARRAYin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitMULTIANEWARRAY
public void visitMULTIANEWARRAY(org.apache.bcel.generic.MULTIANEWARRAY obj) - Specified by:
visitMULTIANEWARRAYin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitMULTIANEWARRAYin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitLDC
public void visitLDC(org.apache.bcel.generic.LDC obj) - Specified by:
visitLDCin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitLDCin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitLDC2_W
public void visitLDC2_W(org.apache.bcel.generic.LDC2_W obj) - Specified by:
visitLDC2_Win interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitLDC2_Win classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitCHECKCAST
public void visitCHECKCAST(org.apache.bcel.generic.CHECKCAST obj) - Specified by:
visitCHECKCASTin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitCHECKCASTin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitINVOKESTATIC
public void visitINVOKESTATIC(org.apache.bcel.generic.INVOKESTATIC obj) - Specified by:
visitINVOKESTATICin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitINVOKESTATICin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitINVOKESPECIAL
public void visitINVOKESPECIAL(org.apache.bcel.generic.INVOKESPECIAL obj) - Specified by:
visitINVOKESPECIALin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitINVOKESPECIALin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitINVOKEINTERFACE
public void visitINVOKEINTERFACE(org.apache.bcel.generic.INVOKEINTERFACE obj) - Specified by:
visitINVOKEINTERFACEin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitINVOKEINTERFACEin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-
visitINVOKEVIRTUAL
public void visitINVOKEVIRTUAL(org.apache.bcel.generic.INVOKEVIRTUAL obj) - Specified by:
visitINVOKEVIRTUALin interfaceorg.apache.bcel.generic.Visitor- Overrides:
visitINVOKEVIRTUALin classAbstractFrameModelingVisitor<IsNullValue, IsNullValueFrame>
-