if (!(instanceOfType instanceof ReferenceType))
if (!(instanceOfType instanceof ReferenceType || instanceOfType instanceof NullType))
	private TypeFrame handleInstanceOfBranch(TypeFrame fact, TypeFrame tmpFact, Edge edge) throws DataflowAnalysisException {		InstanceOfCheck check = instanceOfCheckMap.get(edge.getSource());		if (check == null) {			//System.out.println("no instanceof check for block " + edge.getSource().getId());			return tmpFact;		}		if (check.getValueNumber() == null) {			//System.out.println("instanceof check for block " + edge.getSource().getId() + " has no value number");			return tmpFact;		}				ValueNumber instanceOfValueNumber = check.getValueNumber();		short branchOpcode = edge.getSource().getLastInstruction().getInstruction().getOpcode();				int edgeType = edge.getType();		if (    (edgeType == EdgeTypes.IFCMP_EDGE &&						(branchOpcode == Constants.IFNE || branchOpcode == Constants.IFGT || branchOpcode == Constants.IFNULL))							|| (edgeType == EdgeTypes.FALL_THROUGH_EDGE &&						(branchOpcode == Constants.IFEQ || branchOpcode == Constants.IFLE || branchOpcode == Constants.IFNONNULL))		) {			//System.out.println("Successful check on edge " + edge);						// Successful instanceof check.			ValueNumberFrame vnaFrame = valueNumberDataflow.getStartFact(edge.getTarget());			if (!vnaFrame.isValid())				return tmpFact;						Type instanceOfType = check.getType();			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;				// Only refine the type if the cast is feasible: i.e., a downcast.				// Otherwise, just set it to TOP.				try {					boolean feasibleCheck = instanceOfType.equals(NullType.instance()) 						|| Hierarchy.isSubtype(							(ReferenceType) instanceOfType,							(ReferenceType) checkedType);					if (!feasibleCheck && instanceOfType instanceof ObjectType 							&& checkedType instanceof ObjectType) {						double v = DeepSubtypeAnalysis.deepInstanceOf(((ObjectType)instanceOfType).getClassName(), 								((ObjectType)checkedType).getClassName());						if (v > 0.0) feasibleCheck = true;					}					tmpFact = modifyFrame(fact, tmpFact);					tmpFact.setValue(i, feasibleCheck ? instanceOfType : TopType.instance());				} catch (ClassNotFoundException e) {					lookupFailureCallback.reportMissingClass(e);					throw new MissingClassException(e);				}			}		}				return tmpFact;	}