javajspgenerator.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 2,451 行 · 第 1/5 页
JAVA
2,451 行
out.popDepth(); out.println("} catch (Exception e) {"); out.println(" e.printStackTrace();"); out.println("}"); out.popDepth(); out.println("}"); } /** * out.Prints the fragments */ private void generateTags(JspJavaWriter out) throws Exception { out.println(); out.println("final static class TagState {"); out.pushDepth(); _rootNode.generateTagState(out); for (JspFragmentNode frag : _fragmentList) { frag.generateTagState(out); } out.println(); out.println("void release()"); out.println("{"); out.pushDepth(); _rootNode.generateTagRelease(out); for (JspFragmentNode frag : _fragmentList) { frag.generateTagRelease(out); } /* for (int i = 0; i < _topTag.size(); i++) { TagInstance tag = _topTag.get(i); if (tag.getTagClass() == null) { } else if (Tag.class.isAssignableFrom(tag.getTagClass())) { out.println("if (" + tag.getId() + " != null)"); out.println(" " + tag.getId() + ".release();"); } } */ out.popDepth(); out.println("}"); // release out.popDepth(); out.println("}"); // TagState } /** * out.Prints the fragments */ private void generateFragments(JspJavaWriter out) throws Exception { boolean hasFragment = false; for (int i = 0; i < _fragmentList.size(); i++) { JspFragmentNode node = _fragmentList.get(i); if (node.isStatic()) { } /* else if (node.isValueFragment()) { node.generateValueMethod(out); } */ else hasFragment = true; } if (! hasFragment) return; out.println("public static class _CauchoFragment extends com.caucho.jsp.JspFragmentSupport {"); out.pushDepth(); out.println("private int _frag_code;"); out.println("private TagState _jsp_state;"); out.println(); out.println("static _CauchoFragment create(_CauchoFragment frag, int code,"); out.println(" com.caucho.jsp.PageContextImpl pageContext,"); out.println(" javax.servlet.jsp.tagext.JspTag parent,"); out.println(" javax.servlet.jsp.tagext.JspFragment jspBody,"); out.println(" TagState _jsp_state)"); out.println("{"); out.pushDepth(); out.println("if (frag == null)"); out.println(" frag = new _CauchoFragment();"); out.println(); out.println("frag._frag_code = code;"); out.println("frag.pageContext = pageContext;"); out.println("frag._jsp_env = pageContext.getELContext();"); out.println("frag._jsp_parent_tag = parent;"); out.println("frag._jspBody = jspBody;"); out.println("frag._jsp_state = _jsp_state;"); out.println(); out.println("return frag;"); out.popDepth(); out.println("}"); for (int i = 0; i < _fragmentList.size(); i++) { JspFragmentNode frag = _fragmentList.get(i); if (frag.isStatic()) continue; if (frag.isValueFragment()) frag.generateValueMethod(out); else { out.println(); out.println("private void " + frag.getFragmentName() + "(JspWriter out)"); out.println(" throws Throwable"); out.println("{"); out.pushDepth(); HashSet<String> oldDeclaredVariables = _declaredVariables; _declaredVariables = new HashSet<String>(); try { frag.generatePrologueChildren(out); frag.generate(out); } finally { _declaredVariables = oldDeclaredVariables; } out.popDepth(); out.println("}"); } } out.println(); out.println("protected void _jsp_invoke(JspWriter out)"); out.println(" throws Throwable"); out.println("{"); out.pushDepth(); out.println("switch (_frag_code) {"); for (int i = 0; i < _fragmentList.size(); i++) { JspFragmentNode frag = _fragmentList.get(i); if (frag.isStatic() || frag.isValueFragment()) continue; out.println("case " + i + ":"); out.println(" " + frag.getFragmentName() + "(out);"); out.println(" break;"); } out.println("}"); out.popDepth(); out.println("}"); out.popDepth(); out.println("}"); } /** * Generates the dependency methods. Since we can't assume the * underlying class is Page when the JSP page uses "extends" * each JSP page needs to generate this code. */ private void generateDepends(JspJavaWriter out) throws IOException { out.println(); // out.println("private com.caucho.java.LineMap _caucho_line_map;"); out.println("private java.util.ArrayList _caucho_depends = new java.util.ArrayList();"); if (_isCacheable && ! _isUncacheable) out.println("private java.util.ArrayList _caucho_cacheDepends = new java.util.ArrayList();"); out.println(); out.println("public java.util.ArrayList _caucho_getDependList()"); out.println("{"); out.println(" return _caucho_depends;"); out.println("}"); out.println(); out.println("public void _caucho_addDepend(com.caucho.vfs.PersistentDependency depend)"); out.println("{"); if (_parseState.getExtends() == null) out.println(" super._caucho_addDepend(depend);"); out.println(" com.caucho.jsp.JavaPage.addDepend(_caucho_depends, depend);"); out.println("}"); out.println(); out.println("public boolean _caucho_isModified()"); out.println("{"); out.pushDepth(); out.println("if (_caucho_isDead)"); out.println(" return true;"); out.println("if (com.caucho.server.util.CauchoSystem.getVersionId() != " + CauchoSystem.getVersionId() + "L)"); out.println(" return true;"); ArrayList<PersistentDependency> depends; depends = new ArrayList<PersistentDependency>(); depends.addAll(_parseState.getDependList()); for (int i = 0; i < _depends.size(); i++) { PersistentDependency depend = _depends.get(i); if (! depends.contains(depend)) depends.add(depend); } if (_alwaysModified) out.println("return true;"); else if (depends.size() == 0) out.println("return false;"); else { out.println("for (int i = _caucho_depends.size() - 1; i >= 0; i--) {"); out.pushDepth(); out.println("com.caucho.vfs.Dependency depend;"); out.println("depend = (com.caucho.vfs.Dependency) _caucho_depends.get(i);"); out.println("if (depend.isModified())"); out.println(" return true;"); out.popDepth(); out.println("}"); out.println("return false;"); } out.popDepth(); out.println("}"); if (_rootNode.isStatic() && CauchoSystem.isTest()) out.println("private static long _caucho_lastModified = com.caucho.util.Alarm.getCurrentTime();"); out.println(); out.println("public long _caucho_lastModified()"); out.println("{"); out.pushDepth(); /* if (! _isCacheable || _isUncacheable) out.println("return 0;"); else { out.println("return com.caucho.jsp.Page.calculateLastModified(_caucho_depends, _caucho_cacheDepends);"); } */ if (! isGenerateStatic()) { out.println("return 0;"); } else if (CauchoSystem.isTest()) { out.println("return _caucho_lastModified;"); } else { out.println("long lastModified = 0;"); out.println("for (int i = _caucho_depends.size() - 1; i >= 0; i--) {"); out.pushDepth(); out.println("Object oDepend = _caucho_depends.get(i);"); out.println("if (oDepend instanceof com.caucho.vfs.Depend) {"); out.println(" com.caucho.vfs.Depend depend = (com.caucho.vfs.Depend) oDepend;"); out.println(" if (lastModified < depend.getLastModified())"); out.println(" lastModified = depend.getLastModified();"); out.println("}"); out.popDepth(); out.println("}"); out.println(); out.println("return lastModified;"); } out.popDepth(); out.println("}"); /* out.println(); out.println("public com.caucho.java.LineMap _caucho_getLineMap()"); out.println("{"); out.pushDepth(); out.println("return _caucho_line_map;"); out.popDepth(); out.println("}"); */ if (_parseState.getExtends() == null && ! _parseState.isTag()) { out.println(); out.println("public void destroy()"); out.println("{"); out.pushDepth(); out.println(" _caucho_isDead = true;"); out.println(" super.destroy();"); out.println("TagState tagState;"); //out.println("while ((tagState = _jsp_freeState.allocate()) != null)"); //out.println(" tagState.release();"); out.popDepth(); out.println("}"); } if (_parseState.getExtends() != null && ! _parseState.isTag()) { out.println(); out.println("public com.caucho.server.webapp.WebApp _caucho_getApplication()"); out.println("{"); out.pushDepth(); out.println(" return (com.caucho.server.webapp.WebApp) getServletConfig().getServletContext();"); out.popDepth(); out.println("}"); } printDependInit(out, depends); generateInject(out); } private boolean isGenerateStatic() { // #2548 return false; /* return (_rootNode.isStatic() && ! _parseState.isTag() && _parseState.getExtends() == null); */ } /** * Generates the normal init. */ private void generateInit(JspJavaWriter out) throws IOException { out.println(); out.println("public java.util.HashMap<String,java.lang.reflect.Method> _caucho_getFunctionMap()"); out.println("{"); out.pushDepth(); out.println("return _jsp_functionMap;"); out.popDepth(); out.println("}"); if (isTag()) out.println("static boolean _jsp_isTagInit;"); out.println(); out.println("public void init(ServletConfig config)"); out.println("{"); out.pushDepth(); if (isTag()) { out.println("if (_jsp_isTagInit)"); out.println(" return;"); out.println("_jsp_isTagInit = true;"); } out.println("try {"); out.pushDepth(); out.println("com.caucho.server.webapp.WebApp webApp"); out.println(" = (com.caucho.server.webapp.WebApp) config.getServletContext();"); if (! isTag()) { out.println("super.init(config);"); out.println("_jsp_pageManager = webApp.getJspApplicationContext().getPageManager();"); } out.println("com.caucho.jsp.TaglibManager manager = webApp.getJspApplicationContext().getTaglibManager();"); for (Taglib taglib : _tagLibraryList) { out.print("manager.addTaglibFunctions(_jsp_functionMap, \""); out.printJavaString(taglib.getPrefixString()); out.print("\", \""); out.printJavaString(taglib.getURI()); out.println("\");"); } if (! isTag()) out.println("com.caucho.jsp.PageContextImpl pageContext = new com.caucho.jsp.PageContextImpl(webApp, this);"); else out.println("com.caucho.jsp.PageContextImpl pageContext = new com.caucho.jsp.PageContextImpl(webApp, _caucho_getFunctionMap());"); for (int i = 0; i < _exprList.size(); i++) { String expr = _exprList.get(i); out.print("_caucho_expr_" + i + " = com.caucho.jsp.JspUtil.createExpr(pageContext.getELContext(), \""); out.printJavaString(expr); out.println("\");"); } for (int i = 0; i < _valueExprList.size(); i++) { ValueExpr expr = _valueExprList.get(i); out.print("_caucho_value_expr_" + i + " = com.caucho.jsp.JspUtil.createValueExpression(pageContext.getELContext(), "); out.printClass(expr.getReturnType()); out.print(".class, \""); out.printJavaString(expr.getExpressionString()); out.println("\");"); } for (int i = 0; i < _methodExprList.size(); i++) { MethodExpr expr = _methodExprList.get(i); out.print("_caucho_method_expr_" + i + " = com.caucho.jsp.JspUtil.createMethodExpression(pageContext.getELContext(), \""); out.printJavaString(expr.getExprString()); out.print("\", "); if (expr.getReturnType() != null) { out.printClass(expr.getReturnType()); out.print(".class"); } else out.print("String.class"); out.print(", new Class[] {"); Class []args = expr.getArgs(); if (args != null) { for (int j = 0; j < args.length; j++) { if (j != 0) out.print(", "); out.printClass(args[j]); out.print(".class"); } } out.println("});"); } for (String tagClass : _tagFileClassList) { out.println("new " + tagClass + "().init(config);"); } out.popDepth(); out.println("} catch (Exception e) {"); out.println(" throw com.caucho.config.ConfigException.create(e);"); out.println("}"); out.popDepth(); out.println("}"); } /** * Prints the initialization methods to track dependencies. */ private void printDependInit(JspJavaWriter out, ArrayList<PersistentDependency> depends) throws IOException { out.println(); out.println("public void init(com.caucho.vfs.Path appDir)"); out.println(" throws javax.servlet.ServletException"); out.println("{"); out.pushDepth(); if (_ideHack) { out.println("_jsp_init_strings();"); } out.println("com.caucho.vfs.Path resinHome = com.caucho.server.util.CauchoSystem.getResinHome();"); out.println("com.caucho.vfs.MergePath mergePath = new com.caucho.vfs.MergePath();"); out.println("mergePath.addMergePath(appDir);"); out.println("mergePath.addMergePath(resinHome);"); out.println("com.caucho.loader.DynamicClassLoader loader;"); out.println("loader = (com.caucho.loader.DynamicClassLoader) getClass().getClassLoader();"); out.println("String resourcePath = loader.getResourcePathSpecificFirst();"); out.println("mergePath.addClassPath(resourcePath);"); MergePath classPath = new MergePath(); classPath.addClassPath(); /* XXX: the order shouldn't matter in this situation ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); if (classLoader instanceof DynamicClassLoader) { DynamicClassLoader loader = (DynamicClassLoader) classLoader; String resourcePath = loader.getResourcePathSpecificFirst(); classPath.addClassPath(resourcePath); } */ String srcName = _filename; if (srcName == null) srcName = "foo"; out.println("com.caucho.vfs.Depend depend;"); Path appDir = getAppDir(); for (int i = 0; i < depends.size(); i++) { PersistentDependency dependency = depends.get(i); if (dependency instanceof Depend) { Depend depend = (Depend) dependency;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?