code: public static List<Class<?>> getUpperBoundClassAndInterfaces(Type type) {
  		LinkedHashSet<Class<?>> result = new LinkedHashSet<>();
  		buildUpperBoundClassAndInterfaces(type, result);
  		return new ArrayList<>(result);
  	}
docs: Returns list of classes and interfaces that are supertypes of the given type.
  For example given this class:
  <tt>class Foo&lt;A extends Number & Iterable&lt;A&gt;, B extends A&gt;</tt><br>
  calling this method on type parameters <tt>B</tt> (<tt>Foo.class.getTypeParameters()[1]</tt>)
  returns a list containing <tt>Number</tt> and <tt>Iterable</tt>.
  <p>
  This is mostly useful if you get a type from one of the other methods in <tt>GenericTypeReflector</tt>,
  but you don't want to deal with all the different sorts of types,
  and you are only really interested in concrete classes and interfaces.
  </p>
  
  @return A List of classes, each of them a supertype of the given type.
  If the given type is a class or interface itself, returns a List with just the given type.
  The list contains no duplicates, and is ordered in the order the upper bounds are defined on the type.