tmpFact.setValue(i, instanceOfType);
	private TypeFrame handleInstanceOfBranch(TypeFrame fact, TypeFrame tmpFact, Edge edge) throws DataflowAnalysisException {		ValueNumber instanceOfValueNumber = fact.getInstanceOfValueNumber();		if (instanceOfValueNumber == null)			return tmpFact;		short branchOpcode = edge.getSource().getLastInstruction().getInstruction().getOpcode();				if (   (edge.getType() == EdgeTypes.IFCMP_EDGE &&						(branchOpcode == Constants.IFNE || branchOpcode == Constants.IFGT))							|| (edge.getType() == EdgeTypes.FALL_THROUGH_EDGE &&						(branchOpcode == Constants.IFEQ || branchOpcode == Constants.IFLE))		) {			// Successful instanceof check.			ValueNumberFrame vnaFrame = valueNumberDataflow.getStartFact(edge.getTarget());			if (!vnaFrame.isValid())				return tmpFact;						Type instanceOfType = fact.getInstanceOfType();			if (!(instanceOfType instanceof ReferenceType))				return tmpFact;						int numSlots = Math.min(fact.getNumSlots(), vnaFrame.getNumSlots());			for (int i = 0; i < numSlots; ++i) {				if (!vnaFrame.getValue(i).equals(instanceOfValueNumber))					continue;				Type checkedType = fact.getValue(i);				if (!(checkedType instanceof ReferenceType))					continue;				tmpFact = modifyFrame(fact, tmpFact);				// Only refine the type if the cast is a downcast.				// Otherwise, just set it to TOP.				try {					if (!Hierarchy.isSubtype((ReferenceType) instanceOfType, (ReferenceType) checkedType)) {						tmpFact.setValue(i, TopType.instance());						continue;					}				} catch (ClassNotFoundException e) {					lookupFailureCallback.reportMissingClass(e);					throw new DataflowAnalysisException("Missing class", e);				}								tmpFact.setValue(i, instanceOfType);			}		}				return tmpFact;	}