private void addExposedTypes(WildcardType type,Class<?> cause){
  visit(type);
  for (  Type lowerBound : type.getLowerBounds()) {
    logger.debug("Adding exposed types from {}, which is a type lower bound on wildcard type {}",lowerBound,type);
    addExposedTypes(lowerBound,cause);
  }
  for (  Type upperBound : type.getUpperBounds()) {
    logger.debug("Adding exposed types from {}, which is a type upper bound on wildcard type {}",upperBound,type);
    addExposedTypes(upperBound,cause);
  }
}

private void addExposedTypes ( WildcardType type , Class < ? > cause ) { visit ( type ) ; for ( Type lowerBound : type . getLowerBounds ( ) ) { logger . debug ( "Adding exposed types from {}, which is a type lower bound on wildcard type {}" , lowerBound , type ) ; addExposedTypes ( lowerBound , cause ) ; } for ( Type upperBound : type . getUpperBounds ( ) ) { logger . debug ( "Adding exposed types from {}, which is a type upper bound on wildcard type {}" , upperBound , type ) ; addExposedTypes ( upperBound , cause ) ; } }
adds any types exposed to this set . these will come from the ( possibly absent ) bounds on the wildcard .
