public InstanceKey getInstanceKeyForMultiNewArray(
     CGNode node, NewSiteReference allocation, int dim) {
   if (allocationPolicy()) {
     return siteBased.getInstanceKeyForMultiNewArray(node, allocation, dim);
   } else {
     return classBased.getInstanceKeyForMultiNewArray(node, allocation, dim);
   }
 }
 public <T> InstanceKey getInstanceKeyForConstant(TypeReference type, T S) {
   if (type == null) {
     throw new IllegalArgumentException("null type");
   }
   if (disambiguateConstants() || isReflectiveType(type)) {
     return new ConstantKey<T>(S, getClassHierarchy().lookupClass(type));
   } else {
     return classBased.getInstanceKeyForConstant(type, S);
   }
 }
  public InstanceKey getInstanceKeyForAllocation(CGNode node, NewSiteReference allocation) {
    if (allocation == null) {
      throw new IllegalArgumentException("allocation is null");
    }
    TypeReference t = allocation.getDeclaredType();
    IClass C = cha.lookupClass(t);

    if (C != null && isInteresting(C)) {
      if (smushMany()) {
        if (exceedsSmushLimit(C, node)) {
          return smushed.getInstanceKeyForAllocation(node, allocation);
        } else {
          return siteBased.getInstanceKeyForAllocation(node, allocation);
        }
      } else {
        return siteBased.getInstanceKeyForAllocation(node, allocation);
      }
    } else {
      return classBased.getInstanceKeyForAllocation(node, allocation);
    }
  }
 public InstanceKey getInstanceKeyForClassObject(TypeReference type) {
   return classBased.getInstanceKeyForClassObject(type);
 }
 /*
  * @see com.ibm.wala.ipa.callgraph.propagation.InstanceKeyFactory#getInstanceKeyForPEI(com.ibm.wala.ipa.callgraph.CGNode,
  * com.ibm.wala.classLoader.ProgramCounter, com.ibm.wala.types.TypeReference)
  */
 public InstanceKey getInstanceKeyForPEI(CGNode node, ProgramCounter pei, TypeReference type) {
   return classBased.getInstanceKeyForPEI(node, pei, type);
 }