@Override
  public JType visit(WildcardType type, JCodeModel codeModel) {

    if (type.getExtends() != null) {
      final ReferenceType _extends = type.getExtends();
      final JType boundType = _extends.accept(this, codeModel);

      if (!(boundType instanceof JClass)) {
        throw new IllegalArgumentException(
            "Bound type [" + _extends + "]in the wildcard type must be class.");
      }

      final JClass boundClass = (JClass) boundType;
      return boundClass.wildcard();
    } else if (type.getSuper() != null) {
      // TODO
      throw new IllegalArgumentException(
          "Wildcard types with super clause are not supported at the moment.");
    } else {
      throw new IllegalArgumentException("Wildcard type must have either extends or super clause.");
    }
  }