import { Cursor } from "../tree";
import { Type } from "./type";
export declare class TypeVisitor
{
protected cursor: Cursor;
visitList(types: T[] | undefined, p: P): Promise;
preVisit(type: Type, p: P): Promise;
postVisit(type: Type, p: P): Promise;
/**
* By calling this method, you are asserting that you know that the outcome will be non-null
* when the compiler couldn't otherwise prove this to be the case. This method is a shortcut
* for having to assert the non-nullability of the returned type.
*
* @param type A non-null type.
* @param p A state object that passes through the visitor.
* @return A non-null type.
*/
visitNonNull(type: Type, p: P): Promise;
visit(type: T | undefined, p: P): Promise;
protected visitUnion(union: Type.Union, p: P): Promise;
protected visitAnnotation(annotation: Type.Annotation, p: P): Promise;
protected visitArray(array: Type.Array, p: P): Promise;
protected visitClass(aClass: Type.Class, p: P): Promise;
protected visitGenericTypeVariable(generic: Type.GenericTypeVariable, p: P): Promise;
protected visitIntersection(intersection: Type.Intersection, p: P): Promise;
/**
* This does not visit the declaring type to avoid a visitor cycle.
*
* @param method The method to visit
* @param p Visit context
* @return A method
*/
protected visitMethod(method: Type.Method, p: P): Promise;
protected visitParameterized(parameterized: Type.Parameterized, p: P): Promise;
protected visitPrimitive(primitive: Type.Primitive, p: P): Promise;
/**
* This does not visit the owner to avoid a visitor cycle.
*
* @param variable The variable to visit
* @param p Visit context
* @return A variable
*/
protected visitVariable(variable: Type.Variable, p: P): Promise;
protected visitUnknown(unknown: Type, p: P): Promise;
}
//# sourceMappingURL=type-visitor.d.ts.map