code: @Override
      public List<? extends TypeMirror> directSupertypes(TypeMirror t)
      {
          switch (t.getKind())
          {
              case DECLARED:
                  DeclaredType dt = (DeclaredType) t;
                  TypeElement te = (TypeElement) dt.asElement();
                  List<TypeMirror> list = new ArrayList<>();
                  TypeElement superclass = (TypeElement) asElement(te.getSuperclass());
                  if (superclass != null)
                  {
                      list.add(0, superclass.asType());
                  }
                  list.addAll(te.getInterfaces());
                  return list;
              case EXECUTABLE:
              case PACKAGE:
                  throw new IllegalArgumentException(t.getKind().name());
              default:
                  throw new UnsupportedOperationException(t.getKind().name()+" not supported yet");
          }
      }
docs: The direct superclass is the class from whose implementation the
  implementation of the current class is derived.
  @param t
  @return