package org.zwobble.couscous.ast; import org.zwobble.couscous.ast.visitors.NodeMapper; import org.zwobble.couscous.ast.visitors.NodeTransformer; import org.zwobble.couscous.ast.visitors.StatementNodeMapper; public interface StatementNode extends Node { T accept(StatementNodeMapper visitor); @Override default T accept(NodeMapper visitor) { return accept(new StatementNodeMapper() { @Override public T visit(ReturnNode returnNode) { return visitor.visit(returnNode); } @Override public T visit(ThrowNode throwNode) { return visitor.visit(throwNode); } @Override public T visit(ExpressionStatementNode expressionStatement) { return visitor.visit(expressionStatement); } @Override public T visit(LocalVariableDeclarationNode localVariableDeclaration) { return visitor.visit(localVariableDeclaration); } @Override public T visit(IfStatementNode ifStatement) { return visitor.visit(ifStatement); } @Override public T visit(WhileNode whileLoop) { return visitor.visit(whileLoop); } @Override public T visit(TryNode tryStatement) { return visitor.visit(tryStatement); } }); } StatementNode transform(NodeTransformer transformer); }