javataggenerator.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 929 行 · 第 1/2 页

JAVA
929
字号
            generateTagVariablesAtEnd(out);    } else {      out.println("doTag(_jsp_parentContext, pageContext, out, null);");    }        out.popDepth();    out.println("} catch (Throwable e) {");    out.println("  if (e instanceof java.io.IOException)");    out.println("    throw (java.io.IOException) e;");    out.println("  throw com.caucho.jsp.QJspException.createJspException(e);");    out.println("}");    if (hasScripting() && _variables.size() > 0) {      out.println("finally {");      out.pushDepth();            generateTagVariablesAtEnd(out);            out.println("setJspContext(_jsp_parentContext);");      out.println("com.caucho.jsp.PageContextWrapper.free(pageContext);");            out.popDepth();      out.println("}");    }      out.popDepth();    out.println("}");  }  /**   * Generates the attribute definitions.   *   * @param out the writer to the .java source   */  protected void generateTagAttributes(JspJavaWriter out)    throws IOException, JspParseException  {    for (int i = 0; i < _attributes.size(); i++) {      TldAttribute attr = _attributes.get(i);      String name = attr.getName();      String upperName;      char ch = name.charAt(0);      upperName = Character.toUpperCase(ch) + name.substring(1);      Class cl = attr.getType();      if (cl == null)        cl = String.class;      String type = cl.getName();      String isSetName = "_jsp_" + name + "_isSet";      String fieldName = toFieldName(name);            out.println("if (" + isSetName + ")");      out.println("  pageContext.setAttribute(\"" + name + "\", " +                  JspNode.toELObject(fieldName, cl) + ");");    }    // jsp/10a1    if (_dynamicAttributes != null) {      out.println("pageContext.setAttribute(\"" + _dynamicAttributes + "\"," +		  toFieldName(_dynamicAttributes) + ");");    }  }  /**   * Prints the _jspService header   */  protected void generateStaticDoTag(JspJavaWriter out, JspNode node)    throws Exception  {    out.println();    out.println("public static void doTag(javax.servlet.jsp.JspContext _jsp_parentContext,");    out.println("                         com.caucho.jsp.PageContextWrapper pageContext,");    out.println("                         javax.servlet.jsp.JspWriter out,");    out.println("                         javax.servlet.jsp.tagext.JspFragment _jspBody)");    out.println("  throws Throwable");    out.println("{");    out.pushDepth();    out.println("javax.el.ELContext _jsp_env = pageContext.getELContext();");    if (node.hasScripting()) {      out.println("javax.servlet.http.HttpServletRequest request = (javax.servlet.http.HttpServletRequest) pageContext.getRequest();");      out.println("javax.servlet.http.HttpServletResponse response = (javax.servlet.http.HttpServletResponse) pageContext.getResponse();");      out.println("javax.servlet.http.HttpSession session = pageContext.getSession();");      out.println("javax.servlet.ServletContext application = pageContext.getServletContext();");      out.println("javax.servlet.ServletConfig config = pageContext.getServletConfig();");    }        out.println("TagState _jsp_state = new TagState();");    out.println("javax.servlet.jsp.tagext.JspTag _jsp_parent_tag = null;");    generatePrologue(out);    out.println("try {");    out.pushDepth();        node.generate(out);    out.popDepth();    out.println("} finally {");    out.pushDepth();          generateTagVariablesAtEnd(out);          out.println("com.caucho.jsp.PageContextWrapper.free(pageContext);");          out.popDepth();    out.println("}");    out.popDepth();    out.println("}");  }  /**   * Generates prologue stuff   *   * @param out the writer to the .java source   */  protected void generatePrologue(JspJavaWriter out)    throws Exception  {    _rootNode.generatePrologue(out);        for (int i = 0; i < _variables.size(); i++) {      TldVariable var = _variables.get(i);      if (var.getNameFromAttribute() != null) {	out.print("String _jsp_var_from_attribute_" + i + " = (String) ");	out.println("pageContext.getAttribute(\"" +		    var.getNameFromAttribute() + "\");");      }            if ("AT_END".equals(var.getScope()))	continue;      String srcName = var.getNameGiven();      if (srcName == null)	srcName = var.getAlias();            String dstName;      if (var.getNameGiven() != null)	dstName = "\"" + var.getNameGiven() + "\"";      else	dstName = "_jsp_var_from_attribute_" + i;      if ("NESTED".equals(var.getScope())) {	out.print("Object _jsp_nested_var_" + i + " = ");	out.println("_jsp_parentContext.getAttribute(" + dstName + ");");      }      /*      else {	out.print("pageContext.setAttribute(\"" + srcName + "\",");	out.println("_jsp_parentContext.getAttribute(" + dstName + "));");      }      */    }  }  /**   * Generates the variable setting.   *   * @param out the writer to the .java source   */  protected void generateTagVariablesAtEnd(JspJavaWriter out)    throws IOException, JspParseException  {    for (int i = 0; i < _variables.size(); i++) {      TldVariable var = _variables.get(i);            String srcName = var.getNameGiven();      if (srcName == null)	srcName = var.getAlias();            String dstName;      if (var.getNameGiven() != null)	dstName = "\"" + var.getNameGiven() + "\"";      else	dstName = "_jsp_var_from_attribute_" + i;      if ("NESTED".equals(var.getScope())) {	out.println("_jsp_parentContext.setAttribute(" + dstName + ", _jsp_nested_var_" + i + ");");      }      else {	out.print("_jsp_parentContext.setAttribute(" + dstName + ",");	out.println("pageContext.getAttribute(\"" + srcName + "\"));");      }    }  }  public TagInfo generateTagInfo(String className, TagLibraryInfo taglib)  {    init(className);        TldTag tag = new TldTag();        for (int i = 0; i < _attributes.size(); i++) {      TldAttribute attr = _attributes.get(i);      tag.addAttribute(attr);    }        for (int i = 0; i < _variables.size(); i++) {      TldVariable var = _variables.get(i);      try {	tag.addVariable(var);      } catch (Exception e) {	log.log(Level.WARNING, e.toString(), e);      }    }        String bodyContent = _bodyContent;    if (bodyContent == null)      bodyContent = "scriptless";        return new TagInfoExt(tag.getName(),			  _fullClassName,			  bodyContent,			  getDescription(),			  taglib,			  null,			  tag.getAttributes(),			  getDisplayName(),			  getSmallIcon(),			  getLargeIcon(),			  tag.getVariables(),			  _dynamicAttributes != null,			  _dynamicAttributes,			  null);  }    /**   * Generates the attribute definitions.   *   * @param out the writer to the .java source   */  protected void generateTagInfo(JspJavaWriter out)    throws IOException, JspParseException  {    /*    out.println();    out.println("public javax.servlet.jsp.tagext.TagInfo _caucho_getTagInfo()");    out.println("  throws com.caucho.config.ConfigException");    out.println("{");    out.pushDepth();    out.println("  return _caucho_getTagInfo(_caucho_getTagLibrary());");    out.popDepth();    out.println("}");    */        out.println();    out.println("public javax.servlet.jsp.tagext.TagInfo _caucho_getTagInfo(javax.servlet.jsp.tagext.TagLibraryInfo taglib)");    out.println("  throws com.caucho.config.ConfigException");    out.println("{");    out.pushDepth();    out.println("com.caucho.jsp.cfg.TldTag tag = new com.caucho.jsp.cfg.TldTag();");    out.println("tag.setName(\"test\");");    out.println("com.caucho.jsp.cfg.TldAttribute attr;");    for (int i = 0; i < _attributes.size(); i++) {      TldAttribute attr = _attributes.get(i);      out.println("attr = new com.caucho.jsp.cfg.TldAttribute();");      out.println("attr.setName(\"" + attr.getName() + "\");");      Class type = attr.getType();      if (type != null) {        out.print("attr.setType(");	out.printClass(type);	out.println(".class);");      }      out.println("attr.setRtexprvalue(" + attr.getRtexprvalue() + ");");      out.println("attr.setRequired(" + attr.getRequired() + ");");      if (attr.getDeferredValue() != null) {	out.println("attr.setDeferredValue(new com.caucho.jsp.cfg.TldAttribute.DeferredValue());");	if (attr.getDeferredValue().getType() != null) {	  out.print("attr.getDeferredValue().setType(\"");	  out.printJavaString(attr.getDeferredValue().getType());	  out.println("\");");	}      }      if (attr.getDeferredMethod() != null) {	out.println("attr.setDeferredMethod(new com.caucho.jsp.cfg.TldAttribute.DeferredMethod());");	Signature sig = attr.getDeferredMethod().getMethodSignature();		if (sig != null) {	  out.print("attr.getDeferredMethod().setMethodSignature(");	  out.print("new com.caucho.config.types.Signature(\"");	  out.printJavaString(sig.getSignature());	  out.println("\"));");	}      }      out.println("tag.addAttribute(attr);");    }    out.println("com.caucho.jsp.cfg.TldVariable var;");    for (int i = 0; i < _variables.size(); i++) {      TldVariable var = _variables.get(i);      out.println("var = new com.caucho.jsp.cfg.TldVariable();");      if (var.getNameGiven() != null)	out.println("var.setNameGiven(\"" + var.getNameGiven() + "\");");            if (var.getNameFromAttribute() != null)	out.println("var.setNameFromAttribute(\"" + var.getNameFromAttribute() + "\");");      String type = var.getVariableClass();      if (type != null)        out.println("var.setVariableClass(\"" + type + "\");");      out.println("var.setDeclare(" + var.getDeclare() + ");");      if (var.getScope() != null)	out.println("var.setScope(\"" + var.getScope() + "\");");      out.println("tag.addVariable(var);");    }        String bodyContent = _bodyContent;    if (bodyContent == null)      bodyContent = "scriptless";    out.println("return new com.caucho.jsp.java.TagInfoExt(tag.getName(),");    out.println("                   getClass().getName(),");    out.println("                   \"" + bodyContent + "\",");    out.print("                   \"");    if (_description != null)      out.printJavaString(_description);    else      out.printJavaString("A simple tag");    out.println("\",");    out.println("                   taglib,");    out.println("                   null,");    out.println("                   tag.getAttributes(),");        if (_displayName != null) {      out.print("                   \"");      out.printJavaString(_displayName);      out.println("\",");    }    else {      out.println("                   null,");    }        if (_smallIcon != null) {      out.print("                   \"");      out.printJavaString(_smallIcon);      out.println("\",");    }    else {      out.println("                   null,");    }        if (_largeIcon != null) {      out.print("                   \"");      out.printJavaString(_largeIcon);      out.println("\",");    }    else {      out.println("                   null,");    }        out.println("                   tag.getVariables(),");    out.println("                   " + (_dynamicAttributes != null) + ",");    if (_dynamicAttributes != null)      out.println("                   \"" + _dynamicAttributes + "\",");    else      out.println("                   null,");    out.println("                   _caucho_depends);");    out.popDepth();    out.println("}");        out.println();    out.println("public String _caucho_getDynamicAttributes()");    out.println("{");    out.pushDepth();    if (_dynamicAttributes != null)      out.println("return \"" + _dynamicAttributes + "\";");    else      out.println("return null;");        out.popDepth();    out.println("}");    generateTagLibrary(out);  }    /**   * Generates the attribute definitions.   *   * @param out the writer to the .java source   */  protected void generateTagLibrary(JspJavaWriter out)    throws IOException, JspParseException  {    out.println();    out.println("private javax.servlet.jsp.tagext.TagLibraryInfo _caucho_getTagLibrary()");    out.println("  throws com.caucho.config.ConfigException");    out.println("{");    out.pushDepth();    out.println("return new com.caucho.jsp.java.TagTaglib(\"x\", \"http://test.com\");");    out.popDepth();    out.println("}");  }  private String toFieldName(String name)  {    if (hasScripting() && ! _reserved.contains(name))      return name;    else      return "_" + name;  }  static {    _reserved.add("public");    _reserved.add("private");    _reserved.add("protected");    _reserved.add("static");    _reserved.add("final");    _reserved.add("class");    _reserved.add("interface");    _reserved.add("extends");    _reserved.add("implements");    _reserved.add("package");    _reserved.add("import");    _reserved.add("new");    _reserved.add("if");    _reserved.add("else");    _reserved.add("for");    _reserved.add("do");    _reserved.add("while");    _reserved.add("break");    _reserved.add("continue");    _reserved.add("switch");    _reserved.add("case");    _reserved.add("default");    _reserved.add("throw");    _reserved.add("enum");    _reserved.add("throws");        _reserved.add("void");    _reserved.add("boolean");    _reserved.add("byte");    _reserved.add("char");    _reserved.add("short");    _reserved.add("int");    _reserved.add("long");    _reserved.add("float");    _reserved.add("double");  }}

⌨️ 快捷键说明

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