private static boolean uncheckedTypeArgument(TypeMirror arg) {
      if (arg.getKind().equals(TypeKind.WILDCARD)) {
        WildcardType wildcard = asWildcard(arg);
        if (wildcard.getExtendsBound() == null || isJavaLangObject(wildcard.getExtendsBound())) {
          // This is <?>, unless there's a super bound, in which case it is <? super Foo> and
          // is erased.
          return (wildcard.getSuperBound() != null);
        }
      }
      return true;
    }
Visitor that tells whether a type is erased, in the sense of {@link #castIsUnchecked}. Each
visitX method returns true if its input parameter is true or if the type being visited is
erased.
common/src/main/java/com/google/auto/common/MoreTypes.java