public SootField addRefTypeForConcretes(RefType type,InfoKind unmodeledFlowType,boolean deepClone){
  SootClass clz=type.getSootClass();
  clz=ClassCloner.getClonedClassFromClone(clz);
  List<SootClass> concretes=SootUtils.getAllConcreteSubsImps(clz);
  if (concretes.isEmpty()) {
    logger.debug("Cannot find any known implementors of {} when adding dummy object",type.getSootClass());
    return null;
  }
  int created=0;
  for (  SootClass concrete : concretes) {
    if (ClassCloner.isClonedClass(concrete))     continue;
    logger.debug("On concrete {} for fallback type {}",type,concrete);
    SootClass realConcrete=ClassCloner.getClonedClassFromClone(concrete);
    if (!typeToAddedField.containsKey(realConcrete.getType())) {
      logger.debug("Need to add concrete {}",realConcrete);
      addRefTypeInternal(dummyObjectField,realConcrete,unmodeledFlowType,deepClone);
      created++;
    }
    if (created > MAX_SUBS_AND_IMPLEMENTORS_TO_ADD) {
      logger.debug("reached max created dummy concrete objects created: {}",clz);
      break;
    }
  }
  return dummyObjectField;
}

public SootField addRefTypeForConcretes ( RefType type , InfoKind unmodeledFlowType , boolean deepClone ) { SootClass clz = type . getSootClass ( ) ; clz = ClassCloner . getClonedClassFromClone ( clz ) ; List < SootClass > concretes = SootUtils . getAllConcreteSubsImps ( clz ) ; if ( concretes . isEmpty ( ) ) { logger . debug ( "Cannot find any known implementors of {} when adding dummy object" , type . getSootClass ( ) ) ; return null ; } int created = 0 ; for ( SootClass concrete : concretes ) { if ( ClassCloner . isClonedClass ( concrete ) ) continue ; logger . debug ( "On concrete {} for fallback type {}" , type , concrete ) ; SootClass realConcrete = ClassCloner . getClonedClassFromClone ( concrete ) ; if ( ! typeToAddedField . containsKey ( realConcrete . getType ( ) ) ) { logger . debug ( "Need to add concrete {}" , realConcrete ) ; addRefTypeInternal ( dummyObjectField , realConcrete , unmodeledFlowType , deepClone ) ; created ++ ; } if ( created > MAX_SUBS_AND_IMPLEMENTORS_TO_ADD ) { logger . debug ( "reached max created dummy concrete objects created: {}" , clz ) ; break ; } } return dummyObjectField ; }
create an object for the given class ( of type ) and all concrete subclasses / implementors of the type . use the dummy object field to reference all objects
