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

📄 proxygenerator.java

📁 Jamon是一个Java文本模板引擎
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * The contents of this file are subject to the Mozilla Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is Jamon code, released February, 2003. * * The Initial Developer of the Original Code is Jay Sachs.  Portions * created by Jay Sachs are Copyright (C) 2003 Jay Sachs.  All Rights * Reserved. * * Contributor(s): Ian Robertson */package org.jamon.codegen;import java.io.OutputStream;import java.util.Iterator;public class ProxyGenerator extends AbstractSourceGenerator{    public ProxyGenerator(TemplateDescriber p_describer,                          TemplateUnit p_templateUnit)    {        super(p_describer, p_templateUnit);    }    public void generateSource(OutputStream p_out)        throws java.io.IOException    {        m_writer = new CodeWriter(p_out);        generateHeader();        generatePrologue();        generateImports();        generateAnnotations();        generateDeclaration();        generateConstructors();        generateIntf();        generateImplData();        if (m_templateUnit.getJamonContextType() != null)        {            generateJamonContextSetter();        }        generateOptionalArgs();        generateFragmentInterfaces(false);        if (! m_templateUnit.isParent())        {            generateConstructImpl();            generateMakeRenderer();            generateRender();        }        if (m_templateUnit.isParent())        {            generateParentRendererClass();        }        if (m_templateUnit.hasParentPath() && ! m_templateUnit.isParent())        {            generateMakeParentRenderer();        }        generateEpilogue();        m_writer.finish();    }    private void generateImports()    {        m_templateUnit.printImports(m_writer);    }    private String getClassName()    {        return PathUtils.getIntfClassName(m_templateUnit.getName());    }    private String getPackageName()    {        return PathUtils.getIntfPackageName(m_templateUnit.getName());    }    private void generateHeader()    {        m_writer.println("// Autogenerated Jamon proxy");        m_writer.println("// "                         + m_describer.getExternalIdentifier(                             m_templateUnit.getName()).replace('\\','/'));        m_writer.println();    }    private void generatePrologue()    {        String pkgName = getPackageName();        if (pkgName.length() > 0)        {            m_writer.println("package " + pkgName + ";");            m_writer.println();        }    }    private void generateConstructors()    {        m_writer.println();        m_writer.println            ("public " + getClassName()             + "(" + ClassNames.TEMPLATE_MANAGER + " p_manager)");        m_writer.openBlock();        m_writer.println(" super(p_manager);");        m_writer.closeBlock();        m_writer.println();        if (m_templateUnit.isParent())        {            m_writer.println("protected " + getClassName() + "(String p_path)");            m_writer.openBlock();            m_writer.println("super(p_path);");            m_writer.closeBlock();            m_writer.println();        }        else        {            m_writer.println("public " + getClassName() + "()");            m_writer.openBlock();            m_writer.println(" super(\"" + m_templateUnit.getName() + "\");");            m_writer.closeBlock();            m_writer.println();        }    }    private void generateFragmentInterfaces(boolean p_inner)    {        for (Iterator<FragmentArgument> f =                m_templateUnit.getDeclaredFragmentArgs();             f.hasNext(); )        {            f.next().getFragmentUnit().printInterface(                m_writer, "public", !p_inner);            m_writer.println();        }        m_writer.println();    }    private void generateAnnotations()    {        m_writer.print("@" + ClassNames.TEMPLATE_ANNOTATION);        m_writer.openList("(", true);        m_writer.printListElement("signature = \"" + m_templateUnit.getSignature() + "\"");        if (m_templateUnit.getGenericParams().getCount() > 0) {            m_writer.printListElement(                "genericsCount = " + m_templateUnit.getGenericParams().getCount());        }        if (m_templateUnit.getInheritanceDepth() > 0) {            m_writer.printListElement("inheritanceDepth = " + m_templateUnit.getInheritanceDepth());        }        if (m_templateUnit.getJamonContextType() != null) {            m_writer.printListElement(                "jamonContextType = \"" + m_templateUnit.getJamonContextType() + "\"");        }        generateArguments(m_templateUnit);        generateMethodAnnotations();        generateAbstractMethodAnnotations();        m_writer.closeList(")");        m_writer.println();    }    private void generateMethodAnnotations()    {        Iterator<MethodUnit> signatureMethodUnits = m_templateUnit.getSignatureMethodUnits();        if (signatureMethodUnits.hasNext())        {            m_writer.printListElement("methods = ");            m_writer.openList("{", true);            while(signatureMethodUnits.hasNext())            {                MethodUnit methodUnit = signatureMethodUnits.next();                m_writer.printListElement("@" + ClassNames.METHOD_ANNOTATION);                m_writer.openList("(", true);                m_writer.printListElement("name = \"" + methodUnit.getName() + "\"");                generateArguments(methodUnit);                m_writer.closeList(")");            }            m_writer.closeList("}");        }    }    private void generateAbstractMethodAnnotations()    {        if (!m_templateUnit.getAbstractMethodNames().isEmpty())        {            m_writer.printListElement("abstractMethodNames = ");            m_writer.openList("{", false);            for (String methodName: m_templateUnit.getAbstractMethodNames())            {                m_writer.printListElement("\"" + methodName + "\"");            }            m_writer.closeList("}");        }    }    private void generateArguments(Unit p_unit)    {        generateArgumentAnnotations(            "requiredArguments", p_unit.getSignatureRequiredArgs());        generateArgumentAnnotations(            "optionalArguments", p_unit.getSignatureOptionalArgs());        generateFragmentAnnotations(p_unit.getFragmentArgs());    }    private void generateFragmentAnnotations(Iterator<FragmentArgument> p_fargs)    {        if (p_fargs.hasNext())        {            m_writer.printListElement("fragmentArguments = ");            m_writer.openList("{", true);            while (p_fargs.hasNext()) {                FragmentArgument farg = p_fargs.next();                m_writer.printListElement("@" + ClassNames.FRAGMENT_ANNOTATION);                m_writer.openList("(", true);                m_writer.printListElement("name = \"" + farg.getName() + "\"");                generateArgumentAnnotations("requiredArguments", farg.getFragmentUnit().getRequiredArgs());                generateArgumentAnnotations("optionalArguments", farg.getFragmentUnit().getOptionalArgs());                m_writer.closeList(")");            }            m_writer.closeList("}");        }    }    private void generateArgumentAnnotations(        String p_label,        Iterator<? extends AbstractArgument> p_args)    {        if (p_args.hasNext())        {            m_writer.printListElement(p_label + " = ");            m_writer.openList("{", true);            while(p_args.hasNext())            {                AbstractArgument argument = p_args.next();                m_writer.printListElement(                    "@" + ClassNames.ARGUMENT_ANNOTATION + "(name = \""                    + argument.getName() + "\", type = \"" + argument.getType() + "\")");            }            m_writer.closeList("}");        }    }    private void generateDeclaration()    {        generateCustomAnnotations(m_templateUnit.getAnnotations(), AnnotationType.PROXY);        m_writer.print("public ");        if(m_templateUnit.isParent())        {            m_writer.print("abstract ");        }        m_writer.println(            "class " + getClassName()            + m_templateUnit.getGenericParams().generateGenericsDeclaration());        m_writer.println("  extends "                         + (m_templateUnit.hasParentPath()                            ? PathUtils.getFullyQualifiedIntfClassName(                                m_templateUnit.getParentPath())                            : ClassNames.TEMPLATE));        m_templateUnit.printInterfaces(m_writer);        m_writer.openBlock();    }    private void generateConstructImpl()    {        m_writer.println();        m_writer.println("@Override");        m_writer.print(            "protected " + ClassNames.BASE_TEMPLATE + " constructImpl"            + "(Class<? extends " + ClassNames.BASE_TEMPLATE + "> p_class)");        m_writer.openBlock();        m_writer.println("try");        m_writer.openBlock();        m_writer.println("return p_class");        m_writer.indent();        m_writer.println(".getConstructor(new Class [] { "                         + ClassNames.TEMPLATE_MANAGER + ".class"                         + ", ImplData.class })");        m_writer.println(            ".newInstance(new Object [] { getTemplateManager(), getImplData()});");        m_writer.outdent();        m_writer.closeBlock();        m_writer.println("catch (RuntimeException e)");        m_writer.openBlock();        m_writer.println("throw e;");        m_writer.closeBlock();        m_writer.println("catch (Exception e)");        m_writer.openBlock();        m_writer.println("throw new "                         + ClassNames.JAMON_RUNTIME_EXCEPTION                         + "(e);");        m_writer.closeBlock();        m_writer.closeBlock();        m_writer.println();        m_writer.println("@Override");        m_writer.print("protected " + ClassNames.BASE_TEMPLATE                       + " constructImpl()");        m_writer.openBlock();        m_writer.println(            "return new "            + PathUtils.getImplClassName(m_templateUnit.getName())            + m_templateUnit.getGenericParams().generateGenericParamsList()            + "(getTemplateManager(), getImplData());");        m_writer.closeBlock();    }    private void generateRender()    {        m_writer.print((m_templateUnit.isParent() ? "protected" : "public")                       + " void render");        m_writer.openList();        m_writer.printListElement(ArgNames.WRITER_DECL);        m_templateUnit.printRenderArgsDecl(m_writer);        m_writer.closeList();        m_writer.println();        m_writer.println("  throws " + ClassNames.IOEXCEPTION);        m_writer.openBlock();        m_writer.print("renderNoFlush");        m_writer.openList();        m_writer.printListElement(ArgNames.WRITER);        m_templateUnit.printRenderArgs(m_writer);        m_writer.closeList();        m_writer.println(";");        m_writer.println(ArgNames.WRITER + ".flush();");        m_writer.closeBlock();        m_writer.print((m_templateUnit.isParent() ? "protected" : "public")                       + " void renderNoFlush");        m_writer.openList();        m_writer.printListElement(ArgNames.WRITER_DECL);        m_templateUnit.printRenderArgsDecl(m_writer);        m_writer.closeList();        m_writer.println();

⌨️ 快捷键说明

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