Package edu.umd.cs.findbugs.ba.npe
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
Fields Modifier and Type Field Description private AssertionMethodsassertionMethodsprivate static booleanMODEL_NONNULL_RETURNprivate static booleanNO_ASSERT_HACKprivate intslotContainingNewNullValueprivate booleantrackValueNumbersprivate TypeDataflowtypeDataflowprivate ValueNumberDataflowvnaDataflow-
Fields inherited from class edu.umd.cs.findbugs.ba.AbstractFrameModelingVisitor
cpg
-
-
Constructor Summary
Constructors Constructor Description IsNullValueFrameModelingVisitor(org.apache.bcel.generic.ConstantPoolGen cpg, AssertionMethods assertionMethods, ValueNumberDataflow vnaDataflow, TypeDataflow typeDataflow, boolean trackValueNumbers)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidanalyzeInstruction(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.IsNullValuegetDefaultValue()Produce a "default" value.IsNullValuegetReturnValueNullness(XMethod calledMethod)intgetSlotContainingNewNullValue()private voidhandleInvoke(org.apache.bcel.generic.InvokeInstruction obj)Handle method invocations.private voidnewValueOnTOS()Hook 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 edu.umd.cs.findbugs.ba.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 Detail
-
NO_ASSERT_HACK
private static final boolean NO_ASSERT_HACK
-
MODEL_NONNULL_RETURN
private static final boolean MODEL_NONNULL_RETURN
-
assertionMethods
private final AssertionMethods assertionMethods
-
vnaDataflow
private final ValueNumberDataflow vnaDataflow
-
typeDataflow
private final TypeDataflow typeDataflow
-
trackValueNumbers
private final boolean trackValueNumbers
-
slotContainingNewNullValue
private int slotContainingNewNullValue
-
-
Constructor Detail
-
IsNullValueFrameModelingVisitor
public IsNullValueFrameModelingVisitor(org.apache.bcel.generic.ConstantPoolGen cpg, AssertionMethods assertionMethods, ValueNumberDataflow vnaDataflow, TypeDataflow typeDataflow, boolean trackValueNumbers)
-
-
Method Detail
-
analyzeInstruction
public void analyzeInstruction(org.apache.bcel.generic.Instruction ins) throws DataflowAnalysisExceptionDescription 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
public IsNullValue 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
private void produce(IsNullValue value)
-
produce2
private void produce2(IsNullValue value)
-
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
public IsNullValue getReturnValueNullness(XMethod calledMethod)
-
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>
-
-