⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 analyzer.java

📁 Jamon是一个Java文本模板引擎
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        }        @Override        public void outFragmentArgsNode(FragmentArgsNode p_node)        {            popStatementBlock();        }        @Override        public void caseArgNode(ArgNode p_node)        {            getCurrentStatementBlock().addRequiredArg(p_node);        }        @Override        public void caseOptionalArgNode(OptionalArgNode p_node)        {            getCurrentStatementBlock().addOptionalArg(p_node);        }        @Override        public void inDefNode(DefNode p_node)        {            pushDefUnit(p_node.getName());        }        @Override        public void outDefNode(DefNode p_def)        {            popStatementBlock();        }        @Override        public void inMethodNode(MethodNode p_node)        {            pushMethodUnit(p_node.getName());        }        @Override        public void outMethodNode(MethodNode p_node)        {            popStatementBlock();        }        @Override        public void inAbsMethodNode(AbsMethodNode p_node)        {            if (! getTemplateUnit().isParent())            {                addError(                    "Non-abstract templates cannot have abstract methods",                    p_node.getLocation());            }            pushMethodUnit(p_node.getName());        }        @Override        public void outAbsMethodNode(AbsMethodNode p_node)        {            popStatementBlock();        }        @Override        public void inOverrideNode(OverrideNode p_node)        {            pushOverriddenMethodUnit(p_node);        }        @Override        public void outOverrideNode(OverrideNode p_node)        {            popStatementBlock();        }        @Override public void caseGenericsParamNode(GenericsParamNode p_node)        {            if (m_templateUnit.isParent())            {                addError("<%generics> tag not allowed in abstract templates",                         p_node.getLocation());            }            m_templateUnit.addGenericsParamNode(p_node);        }        @Override public void caseSimpleCallNode(SimpleCallNode p_node)        {            addStatement(makeCallStatement(p_node));        }        @Override        public void caseChildCallNode(ChildCallNode p_node)        {            TemplateUnit unit = getTemplateUnit();            if (! unit.isParent())            {                addError(                    "<& *CHILD &> cannot be called from a template without an <%abstract> tag",                    p_node.getLocation());            }            addStatement(new ChildCallStatement(unit.getInheritanceDepth()+1));        }        @Override        public void caseClassNode(ClassNode p_node)        {            getTemplateUnit().addClassContent(p_node);        }        @Override public void caseTextNode(TextNode p_node)        {            addStatement(new LiteralStatement(                p_node.getText(), p_node.getLocation(), m_templateIdentifier));        }        @Override public void caseLiteralNode(LiteralNode p_node)        {            addStatement(new LiteralStatement(                p_node.getText(), p_node.getLocation(), m_templateIdentifier));        }        @Override        public void inMultiFragmentCallNode(MultiFragmentCallNode p_node)        {            CallStatement s = makeCallStatement(p_node);            addStatement(s);            pushCallStatement(s);        }        @Override        public void outMultiFragmentCallNode(MultiFragmentCallNode p_call)        {            popCallStatement();        }        @Override        public void inNamedFragmentNode(NamedFragmentNode p_node)        {            getCurrentCallStatement().addFragmentImpl(                pushFragmentUnitImpl(p_node.getName(), p_node.getLocation()), m_errors);        }        @Override        public void outNamedFragmentNode(NamedFragmentNode p_node)        {            popStatementBlock();        }        @Override        public void inFragmentCallNode(FragmentCallNode p_node)        {            CallStatement s = makeCallStatement(p_node);            addStatement(s);            s.addFragmentImpl(pushFragmentUnitImpl(null, p_node.getLocation()), m_errors);        }        @Override        public void outFragmentCallNode(FragmentCallNode p_node)        {            popStatementBlock();        }        @Override public void inWhileNode(WhileNode p_node)        {            pushFlowControlBlock(                p_node.getLocation(), "while (" + p_node.getCondition() + ")");        }        @Override public void outWhileNode(WhileNode p_node)        {            popStatementBlock();        }        @Override public void inForNode(ForNode p_node)        {            pushFlowControlBlock(                p_node.getLocation(), "for (" + p_node.getLoopSpecifier() + ")");        }        @Override public void outForNode(ForNode p_node)        {            popStatementBlock();        }        @Override public void inIfNode(IfNode p_node)        {            pushFlowControlBlock(                p_node.getLocation(), "if (" + p_node.getCondition() + ")");        }        @Override public void outIfNode(IfNode p_node)        {            popStatementBlock();        }        @Override public void inElseIfNode(ElseIfNode p_node)        {            pushFlowControlBlock(                p_node.getLocation(), "else if (" + p_node.getCondition() + ")");        }        @Override public void outElseIfNode(ElseIfNode p_node)        {            popStatementBlock();        }        @Override public void inElseNode(ElseNode p_node)        {            pushFlowControlBlock(p_node.getLocation(), "else");        }        @Override public void outElseNode(ElseNode p_node)        {            popStatementBlock();        }        @Override public void outTopNode(TopNode p_node)        {        }        @Override public void caseJavaNode(JavaNode p_node)        {            addStatement(new RawStatement(p_node.getJava(),                                          p_node.getLocation(),                                          m_templateIdentifier));        }        private class EmitAdapter extends AnalysisAdapter        {            EscapingDirective m_escapeCode = null;            @Override            public void caseEscapeNode(EscapeNode p_node)            {                m_escapeCode = EscapingDirective.get(p_node.getEscapeCode());                if (m_escapeCode == null)                {                    addError("Unknown escaping directive '"                             + p_node.getEscapeCode()+ "'",                             p_node.getLocation());                }            }            @Override            public void caseDefaultEscapeNode(DefaultEscapeNode p_node)            {                m_escapeCode = getDefaultEscaping();            }            public EscapingDirective getEscape(AbstractEscapeNode p_node)            {                p_node.apply(this);                return m_escapeCode;            }        }        @Override        public void caseEmitNode(EmitNode p_node)        {            addStatement(new WriteStatement                         (p_node.getEmitExpression(),                          new EmitAdapter().getEscape(p_node.getEscaping()),                          p_node.getLocation(),                          m_templateIdentifier,                          m_emitMode));        }    }    private String m_defaultEscaping;    private EscapingDirective getDefaultEscaping()    {        return EscapingDirective.get(m_defaultEscaping);    }    private CallStatement makeCallStatement(AbstractComponentCallNode p_node)    {        String path = computePath(p_node.getCallPath());        ParamValues paramValues = makeParamValues(p_node.getParams());        FragmentUnit fragmentUnit =            getCurrentStatementBlock().getFragmentUnitIntf(path);        List<GenericCallParam> genericParams = p_node.getGenericParams();        if (fragmentUnit != null)        {            if (!genericParams.isEmpty())            {                addError("Fragment" + " calls may not have generic params",                         p_node.getLocation());            }            return new FargCallStatement(path,                                         paramValues,                                         fragmentUnit,                                         p_node.getLocation(),                                         m_templateIdentifier);        }        else        {            DefUnit defUnit = getTemplateUnit().getDefUnit(path);            if (defUnit != null)            {                if (! genericParams.isEmpty())                {                    addError("def " + defUnit.getName() +                             " is being called with generic parameters",                             p_node.getLocation());                }                return new DefCallStatement(path,                                            paramValues,                                            defUnit,                                            p_node.getLocation(),                                            m_templateIdentifier);            }            else            {                MethodUnit methodUnit = getTemplateUnit().getMethodUnit(path);                if (methodUnit != null)                {                    if (! genericParams.isEmpty())                    {                        addError("method" + methodUnit.getName() +                                 " is being called with generic parameters",                                 p_node.getLocation());                    }                    return new MethodCallStatement(path,                                                   paramValues,                                                   methodUnit,                                                   p_node.getLocation(),                                                   m_templateIdentifier);                }                else                {                    getTemplateUnit().addCallPath(getAbsolutePath(path));                    return new ComponentCallStatement(                        getAbsolutePath(path),                        paramValues,                        p_node.getLocation(),                        m_templateIdentifier,                        genericParams,                        getTemplateUnit().getJamonContextType());                }            }        }    }    private class ParamsAdapter extends DepthFirstAnalysisAdapter    {        public ParamValues getParamValues(AbstractParamsNode p_node)        {            p_node.apply(this);            if (m_paramsList != null)            {                return new UnnamedParamValues(                    m_paramsList, p_node.getLocation());            }            else            {                return new NamedParamValues(m_paramsMap, p_node.getLocation());            }        }        @Override        public void inNamedParamsNode(NamedParamsNode p_node)        {            m_paramsMap = new HashMap<String, String>();        }        @Override        public void inUnnamedParamsNode(UnnamedParamsNode p_node)        {            m_paramsList = new LinkedList<String>();        }        @Override        public void caseNamedParamNode(NamedParamNode p_node)        {            m_paramsMap.put(p_node.getName().getName(),                            p_node.getValue().getValue());        }        @Override        public void caseParamValueNode(ParamValueNode p_node)        {            m_paramsList.add(p_node.getValue());        }        private Map<String, String> m_paramsMap = null;        private List<String> m_paramsList = null;    }    private ParamValues makeParamValues(AbstractParamsNode p_params)    {        return new ParamsAdapter().getParamValues(p_params);    }    private void addStatement(Statement p_statement)    {        getCurrentStatementBlock().addStatement(p_statement);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -