private boolean hasSideEffect(int seen) { if(seen == Const.INVOKEVIRTUAL || seen == Const.INVOKESPECIAL || seen == Const.INVOKEINTERFACE || seen == Const.INVOKESTATIC) { return noSideEffectMethods.is(getMethodDescriptorOperand(), MethodSideEffectStatus.SE, MethodSideEffectStatus.OBJ); } return isRegisterStore() || isReturn(seen) || isSwitch(seen) || seen == Const.INVOKEDYNAMIC || seen == Const.PUTFIELD || seen == Const.PUTSTATIC; }
@Override public void sawClass() { hq.push(getClassConstantOperand()); }
@Override public void sawBranchTo(int target) { if (target == getNextPC()) { return; } if (largestBranchTarget < target) { largestBranchTarget = target; } seenTransferOfControl = true; }
@Override public void sawClass() { int opcode = getOpcode(); if ((opcode == Const.LDC) || (opcode == Const.LDC_W)) { process(getClassConstantOperand()); } }
@Override public void visitAfter(Code obj) { super.visitAfter(obj); for (int i = 0; i < nArgs; i++) { List<MethodParameter> list = passedParameters[i]; if (list != null) { MethodParameter cur = new MethodParameter(getMethodDescriptor(), i); for (MethodParameter mp : list) { cache.addEdge(mp, cur); } } } }
@Override public void visit(JavaClass obj) { report(); prevClassName = getDottedClassName(); }
@Override protected void visitMethodCFG(MethodDescriptor methodDescriptor, CFG cfg) throws CheckedAnalysisException { MethodChecker methodChecker = new MethodChecker(methodDescriptor, cfg); methodChecker.analyzeMethod(); }
@Override public void sawOpcode(int seen) { if (seen == Const.ARETURN && getPrevOpcode(1) == Const.ACONST_NULL){ accumulateBug(); } }
void addForwardJump(int from, int to) { if (from >= to) { return; } purgeForwardJumps(from); forwardJumps.add(new Jump(from, to)); }
private boolean strongEvidenceForIntendedSerialization() { return implementsSerializableDirectly || sawReadObject || sawReadResolve || sawWriteObject || seenTransientField || AnalysisContext.currentAnalysisContext().getUnreadFieldsData() .existsStrongEvidenceForIntendedSerialization(this.getClassDescriptor()); }
static long getFlagBits(boolean isLong, long arg0) { long bits = arg0; if (isLong) { if (populationCount(bits) > populationCount(~bits)) { bits = ~bits; } } else if (populationCount(0xffffffffL & bits) > populationCount(0xffffffffL & ~bits)) { bits = 0xffffffffL & ~bits; } return bits; } }
private boolean isInteresting(Number constValue, double candidate) { for (BadConstant badConstant : badConstants) { if(getPriority(badConstant, constValue, candidate) < IGNORE_PRIORITY) { return true; } } return false; }
@Override public void visitInsn(int opcode) { prevOpcode = opcode; prevPC = getPC(); }
int getFurthestJump(int from) { int result = Integer.MIN_VALUE; int from2 = getBackwardsReach(from); assert from2 <= from; from = from2; for (Jump f : forwardJumps) { if (f.from >= from && f.to > result) { result = f.to; } } return result; }
@Override public boolean isResourceClose(BasicBlock basicBlock, InstructionHandle handle, ConstantPoolGen cpg, Stream resource, ResourceValueFrame frame) { return resource.isStreamClose(basicBlock, handle, cpg, frame, lookupFailureCallback); }
private void annotateWarningWithSourceLineInformation(State state, Obligation obligation, BugInstance bugInstance) { // The reportPath() method currently does all reporting // of source line information. if (REPORT_PATH) { reportPath(bugInstance, obligation, state); } }
@Override public boolean mightCloseResource(BasicBlock basicBlock, InstructionHandle handle, ConstantPoolGen cpg) throws DataflowAnalysisException { return Stream.mightCloseStream(basicBlock, handle, cpg); }
/** * Mark all members of the class as being closed. */ public void setClosed() { if (!isClosed) { isClosed = true; for (Stream member : memberSet) { member.setClosed(); } } } }