docs: @Pure
  	@SuppressWarnings("unchecked")
  	public static <T, I> Set<Class<? extends I>> getAllDirectInterfaces(Class<? extends T> lowestType,
  			Class<T> highestType, Class<I> interfaceType) {
  		assert lowestType != null;
  		final Set<Class<? extends I>> collection = new TreeSet<>(ClassComparator.SINGLETON);
  		Class<?> type = lowestType;
  		boolean cont;
  		do {
  			for (final Class<?> directInterface : type.getInterfaces()) {
  				if (interfaceType == null || interfaceType.isAssignableFrom(directInterface)) {
  					collection.add((Class<? extends I>) directInterface);
  				}
  			}
  			cont = highestType == null || !type.equals(highestType);
  			type = type.getSuperclass();
  		}
  		while (type != null && cont);
  		return collection;
  	}