if (DEBUG) System.out.println("**** making resource nonexistent on edge "+ edge.getSource().getId() + " to " + edge.getTarget().getId());
	public void meetInto(ResourceValueFrame fact, Edge edge, ResourceValueFrame result) throws DataflowAnalysisException {		BasicBlock source = edge.getSource();		BasicBlock dest = edge.getTarget();		ResourceValueFrame tmpFact = null;		if (edge.isExceptionEdge()) {			// If this edge throws only implicit exceptions			// (as determined by TypeAnalysis and PruneInfeasibleExceptionEdges),			// and the resource tracker says to ignore implicit exceptions			// for this resource, ignore it.			if (ClassContext.PRUNE_INFEASIBLE_EXCEPTION_EDGES &&				ignoreImplicitExceptions &&				!edge.isFlagSet(EXPLICIT_EXCEPTIONS_FLAG))				return;			if (fact.getStatus() == ResourceValueFrame.OPEN) {				// If status is OPEN, downgrade to OPEN_ON_EXCEPTION_PATH				tmpFact = modifyFrame(fact, tmpFact);				tmpFact.setStatus(ResourceValueFrame.OPEN_ON_EXCEPTION_PATH);			}			// Special case: if the instruction that closes the resource			// throws an exception, we consider the resource to be successfully			// closed anyway.			InstructionHandle exceptionThrower = source.getExceptionThrower();			BasicBlock fallThroughSuccessor = cfg.getSuccessorWithEdgeType(source, FALL_THROUGH_EDGE);			if (DEBUG && fallThroughSuccessor == null) System.out.println("Null fall through successor!");			if (fallThroughSuccessor != null &&				resourceTracker.isResourceClose(fallThroughSuccessor, exceptionThrower, methodGen.getConstantPool(), resource, fact)) {				tmpFact = modifyFrame(fact, tmpFact);				tmpFact.setStatus(ResourceValueFrame.CLOSED);				if (DEBUG) System.out.print("(failed attempt to close)");			}			if (dest.isExceptionHandler()) {				// Clear stack, push value for exception				if (fact.isValid()) {					tmpFact = modifyFrame(fact, tmpFact);					tmpFact.clearStack();					tmpFact.pushValue(ResourceValue.notInstance());				}			}		}		// Make the resource nonexistent if it is compared against null		int edgeType = edge.getType();		if (edgeType == IFCMP_EDGE || edgeType == FALL_THROUGH_EDGE) {			InstructionHandle lastInSourceHandle = source.getLastInstruction();			if (lastInSourceHandle != null) {				Instruction lastInSource = lastInSourceHandle.getInstruction();				if (lastInSource instanceof IFNULL || lastInSource instanceof IFNONNULL) {					// Get the frame at the if statement					ResourceValueFrame startFrame = getStartFact(source);					if (startFrame.isValid()) {						// The source block has a valid start fact.						// That means it is safe to inspect the frame at the If instruction.						ResourceValueFrame frameAtIf = getFactAtLocation(new Location(lastInSourceHandle, source));						ResourceValue topValue = frameAtIf.getValue(frameAtIf.getNumSlots() - 1);						if (topValue.isInstance()) {							if ((lastInSource instanceof IFNULL && edgeType == IFCMP_EDGE) ||								(lastInSource instanceof IFNONNULL && edgeType == FALL_THROUGH_EDGE)) {								//System.out.println("**** making resource nonexistent on edge "+edge.getId());								tmpFact = modifyFrame(fact, tmpFact);								tmpFact.setStatus(ResourceValueFrame.NONEXISTENT);							}						}					}				}			}		}		if (tmpFact != null)			fact = tmpFact;		mergeInto(fact, result);	}