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 + -
显示快捷键?