public Type adapt(Java7Parser.TypeArgumentContext context, AdapterParameters adapterParameters) {

    /*
       typeArgument
           :   type
           |   QUES ( (EXTENDS | SUPER ) type )?
           ;
    */

    if (context.QUES() != null) {
      WildcardType wildcardType = new WildcardType();
      AdapterUtil.setComments(wildcardType, context, adapterParameters);
      AdapterUtil.setPosition(wildcardType, context);

      if (context.type() != null) {
        Type type = Adapters.getTypeContextAdapter().adapt(context.type(), adapterParameters);

        if (!(type instanceof ReferenceType)) {
          throw new ParseException(
              "type cannot be primitive when using super or extends in a type argument");
        }

        ReferenceType referenceType = (ReferenceType) type;

        if (context.SUPER() != null) {
          wildcardType.setSuper(referenceType);
        } else if (context.EXTENDS() != null) {
          wildcardType.setExtends(referenceType);
        }
      }

      return wildcardType;
    } else if (context.type() != null) {
      return Adapters.getTypeContextAdapter().adapt(context.type(), adapterParameters);
    }

    return null;
  }