package org.jfaster.mango.parser; import org.jfaster.mango.binding.InvocationContext; import org.jfaster.mango.binding.ParameterContext; import org.jfaster.mango.parser.visitor.*; import org.jfaster.mango.util.jdbc.SQLType; import java.util.List; public class ASTRootNode extends AbstractRenderableNode { private NodeInfo nodeInfo = new NodeInfo(); public ASTRootNode(int id) { super(id); } public ASTRootNode(Parser p, int id) { super(p, id); } public ASTRootNode init() { getBlock().jjtAccept(TextBlankJoinVisitor.INSTANCE, null); getBlock().jjtAccept(InterablePropertyCollectVisitor.INSTANCE, null); getBlock().jjtAccept(NodeCollectVisitor.INSTANCE, nodeInfo); return this; } @Override public boolean render(InvocationContext context) { getDMLNode().render(context); getBlock().render(context); return true; } public SQLType getSQLType() { return getDMLNode().getSQLType(); } /** * 扩展简化的参数节点 */ public void expandParameter(ParameterContext context) { getBlock().jjtAccept(ParameterExpandVisitor.INSTANCE, context); } /** * 类型检测并绑定GetterInvoker */ public void checkAndBind(ParameterContext context) { getBlock().jjtAccept(CheckAndBindVisitor.INSTANCE, context); } public List<ASTJDBCParameter> getJDBCParameters() { return nodeInfo.jdbcParameters; } public List<ASTJDBCIterableParameter> getJDBCIterableParameters() { return nodeInfo.jdbcIterableParameters; } public List<ASTGlobalTable> getASTGlobalTables() { return nodeInfo.globalTables; } private AbstractDMLNode getDMLNode() { return (AbstractDMLNode) jjtGetChild(0); } private ASTBlock getBlock() { return (ASTBlock) jjtGetChild(1); } }