code: private TypeDescriptor makeTypeDescriptor(final TypeMirror type) {
      if (type.getKind() != TypeKind.DECLARED) {
        return new TypeDescriptor(type.toString(), ImmutableList.<TypeDescriptor>of());
      }
      final DeclaredType dt = (DeclaredType) type;
  
      final String plainType = processingEnv.getTypeUtils().erasure(type).toString();
      final List<TypeDescriptor> typeArgumentsList = Lists.newArrayList();
      final List<? extends TypeMirror> typeArguments = dt.getTypeArguments();
      for (final TypeMirror arg : typeArguments) {
        typeArgumentsList.add(makeTypeDescriptor(arg));
      }
      return new TypeDescriptor(plainType, typeArgumentsList);
    }
docs: Make a {@link TypeDescriptor} by examining the {@link TypeMirror} and recursively looking
  at the generic arguments to the type (if they exist).