package com.prezi.spaghetti.ast; public interface ModuleVisitor<T> { T visitAnnotationNode(AnnotationNode node); T visitConstEntryNode(ConstEntryNode node); T visitConstNode(ConstNode node); T visitDocumentationNode(DocumentationNode node); T visitEnumNode(EnumNode node); T visitEnumReference(EnumReference reference); T visitEnumValueNode(EnumValueNode node); T visitExternInterfaceNode(ExternInterfaceNode node); T visitExternInterfaceReference(ExternInterfaceReference reference); T visitImportNode(ImportNode node); T visitInterfaceNode(InterfaceNode node); T visitInterfaceReference(InterfaceReference reference); T visitMethodNode(MethodNode node); T visitMethodParameterNode(MethodParameterNode node); T visitModuleNode(ModuleNode node); T visitPrimitiveTypeReference(PrimitiveTypeReference reference); T visitPropertyNode(PropertyNode node); T visitStructNode(StructNode node); T visitStructReference(StructReference reference); T visitFunctionType(FunctionType functionType); T visitTypeParameterNode(TypeParameterNode node); T visitTypeParameterReference(TypeParameterReference reference); T visitVoidTypeReference(VoidTypeReference reference); T visit(AstNode node); T beforeVisit(AstNode node); T afterVisit(AstNode node, T result); T aggregateResult(T aggregate, T nextResult); }