@Nullable ImmutableList<TypeMirror> erasedParameterTypes(
        ExecutableElement method, TypeElement in) {
      if (method.getParameters().isEmpty()) {
        return ImmutableList.of();
      }
      return new TypeSubstVisitor().erasedParameterTypes(method, in);
    }
Returns the list of erased parameter types of the given method as they appear in the given
type. For example, if the method is {@code add(E)} from {@code List<E>} and we ask how it
appears in {@code class NumberList implements List<Number>}, the answer will be {@code
Number}. That will also be the answer for {@code class NumberList<E extends Number>
implements List<E>}. The parameter types are erased since the purpose of this method is to
determine whether two methods are candidates for one to override the other.
common/src/main/java/com/google/auto/common/Overrides.java