| 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); |
| } |