private void addExposedTypes(ParameterizedType type,Class<?> cause){
  boolean alreadyDone=done(type);
  if (!pruned(type)) {
    visit(type);
    recordExposure(type,cause);
  }
  if (alreadyDone) {
    return;
  }
  logger.debug("Adding exposed types from {}, which is the raw type on parameterized type {}",type.getRawType(),type);
  addExposedTypes(type.getRawType(),cause);
  for (  Type typeArg : type.getActualTypeArguments()) {
    logger.debug("Adding exposed types from {}, which is a type argument on parameterized type {}",typeArg,type);
    addExposedTypes(typeArg,cause);
  }
}

private void addExposedTypes ( ParameterizedType type , Class < ? > cause ) { boolean alreadyDone = done ( type ) ; if ( ! pruned ( type ) ) { visit ( type ) ; recordExposure ( type , cause ) ; } if ( alreadyDone ) { return ; } logger . debug ( "Adding exposed types from {}, which is the raw type on parameterized type {}" , type . getRawType ( ) , type ) ; addExposedTypes ( type . getRawType ( ) , cause ) ; for ( Type typeArg : type . getActualTypeArguments ( ) ) { logger . debug ( "Adding exposed types from {}, which is a type argument on parameterized type {}" , typeArg , type ) ; addExposedTypes ( typeArg , cause ) ; } }
adds any types exposed to this set . even if the root type is to be pruned , the actual type arguments are processed .
