docs: public List<Class<?>> directSuperclasses(Class<?> c)
      {
          if(c.isPrimitive()) {
              return primitiveSuperclasses(c);
          }
          else if(c.isArray()) {
              return arrayDirectSuperclasses(0, c);
          }
          else {
              List<Class<?>> interfaces = Arrays.asList(c.getInterfaces());
              Class<?> superclass = c.getSuperclass();
  
              if(c == Object.class) {
                  return ImmutableList.of();
              } else if(superclass == null && interfaces.isEmpty()) {
                  return classList(Object.class);
              } else if(superclass == Object.class) {
                  return newArrayList(concat(interfaces, classList(Object.class)));
              } else if(superclass == null) {
                  return interfaces;
              } else {
                  System.out.println("default: " + newArrayList(concat(classList(superclass), interfaces)));
                  return newArrayList(concat(classList(superclass), interfaces));
              }
          }
      }