if (tmpFact != null) fact = tmpFact;
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) {  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)) {  tmpFact = modifyFrame(fact, tmpFact); tmpFact.setStatus(ResourceValueFrame.NONEXISTENT); } } } }
	public void meetInto(ResourceValueFrame fact, Edge edge, ResourceValueFrame result) throws DataflowAnalysisException {		BasicBlock source = edge.getSource();		BasicBlock dest = edge.getDest();		if (dest.isExceptionHandler()) {			ResourceValueFrame tmpFact = null;			// Clear stack, push value for exception			if (fact.isValid()) {				tmpFact = createFact();				tmpFact.copyFrom(fact);				tmpFact.clearStack();				tmpFact.pushValue(ResourceValue.notInstance());			}			// 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();			assert exceptionThrower != null; // is it possible to reach an exception handler by a non-exception edge?			if (resourceTracker.isResourceClose(dest, exceptionThrower, methodGen.getConstantPool(), resource)) {				if (tmpFact == null) {					tmpFact = createFact();					tmpFact.copyFrom(fact);				}				tmpFact.setStatus(ResourceValueFrame.CLOSED);			}			if (tmpFact != null)				fact = tmpFact;		}		result.mergeWith(fact);	}