docs: private final Type getGenericType() {
          final Class<?> raw = getClass();
          final TypeVariable<?>[] typeParameters = raw.getTypeParameters();
          if (ArrayUtils.isEmpty(typeParameters)) {
              return raw;
          }
          final Type[] parameters = new Type[typeParameters.length];
  
          // use empty type variable map because we're relying on @BindTypeVariable functionality:
          final Map<TypeVariable<?>, Type> typeVariableMap = Collections.emptyMap();
          for (int i = 0; i < parameters.length; i++) {
              parameters[i] = Types.resolveAt(this, typeParameters[i], typeVariableMap);
          }
          return TypeUtils.parameterize(raw, parameters);
      }