this.invDataflow = classContext.getIsNullValueDataflow(method);
	public void execute() throws DataflowAnalysisException, CFGBuilderException {		// Look for null check blocks where the reference being checked		// is definitely null, or null on some path		Iterator<BasicBlock> bbIter = invDataflow.getCFG().blockIterator();		while (bbIter.hasNext()) {			BasicBlock basicBlock = bbIter.next();			if (basicBlock.isNullCheck()) {				analyzeNullCheck(classContext, method, invDataflow, basicBlock);			} else if (!basicBlock.isEmpty()) {				// Look for all reference comparisons where				//    - both values compared are definitely null, or				//    - one value is definitely null and one is definitely not null				// These cases are not null dereferences,				// but they are quite likely to indicate an error, so while we've got				// information about null values, we may as well report them.				InstructionHandle lastHandle = basicBlock.getLastInstruction();				Instruction last = lastHandle.getInstruction();				switch (last.getOpcode()) {				case Constants.IF_ACMPEQ:				case Constants.IF_ACMPNE:					analyzeRefComparisonBranch(basicBlock, lastHandle);					break;				case Constants.IFNULL:				case Constants.IFNONNULL:					analyzeIfNullBranch(basicBlock, lastHandle);					break;				}			}		}		for (RedundantBranch redundantBranch : redundantBranchList) {			if (DEBUG) System.out.println("Redundant branch: " + redundantBranch);			int lineNumber = redundantBranch.lineNumber;			// The source to bytecode compiler may sometimes duplicate blocks of			// code along different control paths.  So, to report the bug,			// we check to ensure that the branch is REALLY determined each			// place it is duplicated, and that it is determined in the same way.			boolean confused = undeterminedBranchSet.get(lineNumber) ||					(definitelySameBranchSet.get(lineNumber) && definitelyDifferentBranchSet.get(lineNumber));			// confused if there is JSR confusion or multiple null checks with different results on the same line			boolean reportIt = true;			if (lineMentionedMultipleTimes.get(lineNumber) && confused)				reportIt = false;			if (redundantBranch.location.getBasicBlock().isInJSRSubroutine() /* occurs in a JSR */					&& confused)				reportIt = false;			if (reportIt) {				collector.foundRedundantNullCheck(redundantBranch.location, redundantBranch);			}		}	}