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 AssertionMethods
assertionMethods
private static boolean
MODEL_NONNULL_RETURN
private static boolean
NO_ASSERT_HACK
private int
slotContainingNewNullValue
private boolean
trackValueNumbers
private TypeDataflow
typeDataflow
private ValueNumberDataflow
vnaDataflow
-
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 void
analyzeInstruction(org.apache.bcel.generic.Instruction ins)
Analyze the given Instruction.private boolean
checkForKnownValue(org.apache.bcel.generic.Instruction obj)
Check given Instruction to see if it produces a known value.IsNullValue
getDefaultValue()
Produce a "default" value.IsNullValue
getReturnValueNullness(XMethod calledMethod)
int
getSlotContainingNewNullValue()
private void
handleInvoke(org.apache.bcel.generic.InvokeInstruction obj)
Handle method invocations.private void
newValueOnTOS()
Hook indicating that a new (possibly-null) value is on the top of the stack.private void
produce(IsNullValue value)
private void
produce2(IsNullValue value)
void
visitACONST_NULL(org.apache.bcel.generic.ACONST_NULL obj)
void
visitANEWARRAY(org.apache.bcel.generic.ANEWARRAY obj)
void
visitCHECKCAST(org.apache.bcel.generic.CHECKCAST obj)
void
visitGETFIELD(org.apache.bcel.generic.GETFIELD obj)
void
visitGETSTATIC(org.apache.bcel.generic.GETSTATIC obj)
void
visitINVOKEINTERFACE(org.apache.bcel.generic.INVOKEINTERFACE obj)
void
visitINVOKESPECIAL(org.apache.bcel.generic.INVOKESPECIAL obj)
void
visitINVOKESTATIC(org.apache.bcel.generic.INVOKESTATIC obj)
void
visitINVOKEVIRTUAL(org.apache.bcel.generic.INVOKEVIRTUAL obj)
void
visitLDC(org.apache.bcel.generic.LDC obj)
void
visitLDC2_W(org.apache.bcel.generic.LDC2_W obj)
void
visitMULTIANEWARRAY(org.apache.bcel.generic.MULTIANEWARRAY obj)
void
visitNEW(org.apache.bcel.generic.NEW obj)
void
visitNEWARRAY(org.apache.bcel.generic.NEWARRAY obj)
void
visitPUTFIELD(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 DataflowAnalysisException
Description copied from class:AbstractFrameModelingVisitor
Analyze the given Instruction.- Overrides:
analyzeInstruction
in 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:AbstractFrameModelingVisitor
Produce a "default" value. This is what is pushed onto the stack by the handleNormalInstruction() method for instructions which produce stack values.- Specified by:
getDefaultValue
in 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:
visitPUTFIELD
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitPUTFIELD
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitGETFIELD
public void visitGETFIELD(org.apache.bcel.generic.GETFIELD obj)
- Specified by:
visitGETFIELD
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitGETFIELD
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitGETSTATIC
public void visitGETSTATIC(org.apache.bcel.generic.GETSTATIC obj)
- Specified by:
visitGETSTATIC
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitGETSTATIC
in 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_NULL
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitACONST_NULL
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitNEW
public void visitNEW(org.apache.bcel.generic.NEW obj)
- Specified by:
visitNEW
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitNEW
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitNEWARRAY
public void visitNEWARRAY(org.apache.bcel.generic.NEWARRAY obj)
- Specified by:
visitNEWARRAY
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitNEWARRAY
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitANEWARRAY
public void visitANEWARRAY(org.apache.bcel.generic.ANEWARRAY obj)
- Specified by:
visitANEWARRAY
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitANEWARRAY
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitMULTIANEWARRAY
public void visitMULTIANEWARRAY(org.apache.bcel.generic.MULTIANEWARRAY obj)
- Specified by:
visitMULTIANEWARRAY
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitMULTIANEWARRAY
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitLDC
public void visitLDC(org.apache.bcel.generic.LDC obj)
- Specified by:
visitLDC
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitLDC
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitLDC2_W
public void visitLDC2_W(org.apache.bcel.generic.LDC2_W obj)
- Specified by:
visitLDC2_W
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitLDC2_W
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitCHECKCAST
public void visitCHECKCAST(org.apache.bcel.generic.CHECKCAST obj)
- Specified by:
visitCHECKCAST
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitCHECKCAST
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitINVOKESTATIC
public void visitINVOKESTATIC(org.apache.bcel.generic.INVOKESTATIC obj)
- Specified by:
visitINVOKESTATIC
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitINVOKESTATIC
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitINVOKESPECIAL
public void visitINVOKESPECIAL(org.apache.bcel.generic.INVOKESPECIAL obj)
- Specified by:
visitINVOKESPECIAL
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitINVOKESPECIAL
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitINVOKEINTERFACE
public void visitINVOKEINTERFACE(org.apache.bcel.generic.INVOKEINTERFACE obj)
- Specified by:
visitINVOKEINTERFACE
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitINVOKEINTERFACE
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
visitINVOKEVIRTUAL
public void visitINVOKEVIRTUAL(org.apache.bcel.generic.INVOKEVIRTUAL obj)
- Specified by:
visitINVOKEVIRTUAL
in interfaceorg.apache.bcel.generic.Visitor
- Overrides:
visitINVOKEVIRTUAL
in classAbstractFrameModelingVisitor<IsNullValue,IsNullValueFrame>
-
-