if (location != null) { Instruction in = location.getHandle().getInstruction(); if (in instanceof InvokeInstruction &&assertionMethods.isAssertionCall((InvokeInstruction) in) ) { if (DEBUG_DEREFS) System.out.println("Skipping because it is an assertion method "); continue; }  }
	private void examineNullValues() throws CFGBuilderException, DataflowAnalysisException {		Set<LocationWhereValueBecomesNull> locationWhereValueBecomesNullSet =			invDataflow.getAnalysis().getLocationWhereValueBecomesNullSet();		// For each value number that is null somewhere in the		// method, collect the set of locations where it becomes null.		// FIXME: we may see some locations that are not guaranteed to be dereferenced (how to fix this?)		Map<ValueNumber, Set<Location>> nullValueAssignmentMap =			new HashMap<ValueNumber, Set<Location>>();		for (LocationWhereValueBecomesNull lwvbn : locationWhereValueBecomesNullSet) {			Set<Location> locationSet = nullValueAssignmentMap.get(lwvbn.getValueNumber());			if (locationSet == null) {				locationSet = new HashSet<Location>();				nullValueAssignmentMap.put(lwvbn.getValueNumber(), locationSet);			}			locationSet.add(lwvbn.getLocation());		}		Map<ValueNumber, SortedSet<Location>> bugLocationMap =			new HashMap<ValueNumber, SortedSet<Location>>();		// Inspect the method for locations where a null value is guaranteed to		// be dereferenced.  Add the dereference locations		Map<ValueNumber, NullValueUnconditionalDeref> nullValueGuaranteedDerefMap =			new HashMap<ValueNumber, NullValueUnconditionalDeref>();				// Check every location		for (Iterator<Location> i = classContext.getCFG(method).locationIterator(); i.hasNext();) {			Location location = i.next();						if (DEBUG_DEREFS) {				System.out.println("At location " + location);			}						checkForUnconditionallyDereferencedNullValues(					location,					bugLocationMap,					nullValueGuaranteedDerefMap,					vnaDataflow.getFactAtLocation(location), invDataflow.getFactAtLocation(location), uvdDataflow.getFactAfterLocation(location));		}		HashSet<ValueNumber> npeIfStatementCovered = new HashSet(nullValueGuaranteedDerefMap.keySet());				// Check every non-exception control edge		for (Iterator<Edge> i = classContext.getCFG(method).edgeIterator(); i.hasNext();) {			Edge edge = i.next();						if (edge.isExceptionEdge()) {				continue;			}						if (DEBUG_DEREFS) {				System.out.println("On edge " + edge.formatAsString(false));			}						ValueNumberFrame vnaFact = vnaDataflow.getResultFact(edge.getSource());			IsNullValueFrame invFact = invDataflow.getFactOnEdge(edge);			UnconditionalValueDerefSet uvdFact = uvdDataflow.getFactOnEdge(edge);			Location location = Location.getLastLocation(edge.getSource());			checkForUnconditionallyDereferencedNullValues(					location,					bugLocationMap,					nullValueGuaranteedDerefMap,					vnaFact, invFact, uvdFact);		}				// Report 		for (Map.Entry<ValueNumber, NullValueUnconditionalDeref> e  : nullValueGuaranteedDerefMap.entrySet()) {			ValueNumber valueNumber = e.getKey();			Set<Location> derefLocationSet = e.getValue().getDerefLocationSet();			Set<Location> assignedNullLocationSet = nullValueAssignmentMap.get(valueNumber);			if (assignedNullLocationSet == null) {				if (DEBUG_DEREFS) {					String where = classContext.getJavaClass().getClassName() + "." + method.getName() + ":" + method.getSignature();					System.out.println("Problem at " + where);					for (Location loc : derefLocationSet) {						System.out.println("Dereference at " + loc);					}				}				assert false: "No assigned NullLocationSet for " + valueNumber + " in " + nullValueAssignmentMap.keySet();				assignedNullLocationSet = Collections.EMPTY_SET;			}			collector.foundGuaranteedNullDeref(					assignedNullLocationSet,					derefLocationSet,					bugLocationMap.get(valueNumber),					vnaDataflow, valueNumber, 					e.getValue().isAlwaysOnExceptionPath(), npeIfStatementCovered.contains(valueNumber));		}	}