docs: public void addDefaultCoercions(Class<?> coercionsClass)
      {
          Preconditions.checkNotNull(coercionsClass, "coercionsClass is null");
          Map<ThriftType, Method> toThriftCoercions = new HashMap<>();
          Map<ThriftType, Method> fromThriftCoercions = new HashMap<>();
          for (Method method : coercionsClass.getDeclaredMethods()) {
              if (method.isAnnotationPresent(ToThrift.class)) {
                  verifyCoercionMethod(method);
                  ThriftType thriftType = getThriftType(method.getGenericReturnType());
                  ThriftType coercedType = thriftType.coerceTo(method.getGenericParameterTypes()[0]);
  
                  Method oldValue = toThriftCoercions.put(coercedType, method);
                  Preconditions.checkArgument(
                          oldValue == null,
                          "Coercion class two @ToThrift methods (%s and %s) for type %s",
                          coercionsClass.getName(),
                          method,
                          oldValue,
                          coercedType);
              }
              else if (method.isAnnotationPresent(FromThrift.class)) {
                  verifyCoercionMethod(method);
                  ThriftType thriftType = getThriftType(method.getGenericParameterTypes()[0]);
                  ThriftType coercedType = thriftType.coerceTo(method.getGenericReturnType());
  
                  Method oldValue = fromThriftCoercions.put(coercedType, method);
                  Preconditions.checkArgument(
                          oldValue == null,
                          "Coercion class two @FromThrift methods (%s and %s) for type %s",
                          coercionsClass.getName(),
                          method,
                          oldValue,
                          coercedType);
              }
          }
  
          // assure coercions are symmetric
          Set<ThriftType> difference = Sets.symmetricDifference(toThriftCoercions.keySet(), fromThriftCoercions.keySet());
          Preconditions.checkArgument(
                  difference.isEmpty(),
                  "Coercion class %s does not have matched @ToThrift and @FromThrift methods for types %s",
                  coercionsClass.getName(),
                  difference);
  
          // add the coercions
          Map<Type, TypeCoercion> coercions = new HashMap<>();
          for (Map.Entry<ThriftType, Method> entry : toThriftCoercions.entrySet()) {
              ThriftType type = entry.getKey();
              Method toThriftMethod = entry.getValue();
              Method fromThriftMethod = fromThriftCoercions.get(type);
              // this should never happen due to the difference check above, but be careful
              Preconditions.checkState(
                      fromThriftMethod != null,
                      "Coercion class %s does not have matched @ToThrift and @FromThrift methods for type %s",
                      coercionsClass.getName(),
                      type);
              TypeCoercion coercion = new TypeCoercion(type, toThriftMethod, fromThriftMethod);
              coercions.put(type.getJavaType(), coercion);
          }
          this.coercions.putAll(coercions);
      }