package org.checkerframework.framework.type.visitor;

import org.checkerframework.framework.type.AnnotatedTypeMirror;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedArrayType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedDeclaredType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedExecutableType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedIntersectionType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedNoType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedNullType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedPrimitiveType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedTypeVariable;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedUnionType;
import org.checkerframework.framework.type.AnnotatedTypeMirror.AnnotatedWildcardType;

/**
 * A visitor of annotated types, in the style of the visitor design pattern.
 *
 * <p>Classes implementing this interface are used to operate on a type when the kind of type is
 * unknown at compile time. When a visitor is passed to a type's accept method, the visitXYZ method
 * most applicable to that type is invoked.
 *
 * <p>Classes implementing this interface may or may not throw a NullPointerException if the
 * additional parameter p is {@code null}; see documentation of the implementing class for details.
 *
 * @param <R> the return type of this visitor's methods. Use Void for visitors that do not need to
 *     return results.
 * @param <P> the type of the additional parameter to this visitor's methods. Use Void for visitors
 *     that do not need an additional parameter.
 */
public interface AnnotatedTypeVisitor<R, P> {

  /**
   * A Convenience method equivalent to {@code v.visit(t, null)}.
   *
   * @param type the type to visit
   * @return a visitor-specified result
   */
  public R visit(AnnotatedTypeMirror type);

  /**
   * Visits a type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visit(AnnotatedTypeMirror type, P p);

  /**
   * Visits a declared type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  //    public R visitType(AnnotatedTypeMirror type, P p);

  /**
   * Visits a declared type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitDeclared(AnnotatedDeclaredType type, P p);

  /**
   * Visits an intersection type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitIntersection(AnnotatedIntersectionType type, P p);

  /**
   * Visits an union type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitUnion(AnnotatedUnionType type, P p);

  /**
   * Visits an executable type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitExecutable(AnnotatedExecutableType type, P p);

  /**
   * Visits an array type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitArray(AnnotatedArrayType type, P p);

  /**
   * Visits a type variable.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitTypeVariable(AnnotatedTypeVariable type, P p);

  /**
   * Visits a primitive type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitPrimitive(AnnotatedPrimitiveType type, P p);

  /**
   * Visits NoType type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitNoType(AnnotatedNoType type, P p);

  /**
   * Visits a {@code null} type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitNull(AnnotatedNullType type, P p);

  /**
   * Visits a wildcard type.
   *
   * @param type the type to visit
   * @param p a visitor-specified parameter
   * @return a visitor-specified result
   */
  public R visitWildcard(AnnotatedWildcardType type, P p);
}
