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