luehe       2002/11/13 09:40:43

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
               jasper2/src/share/org/apache/jasper/runtime
                        JspContextWrapper.java
  Log:
  JspContextWrapper: Allocate vectors for nested, at_begin, and at_end
  variables only if needed.
  
  Revision  Changes    Path
  1.125     +22 -6     
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.124
  retrieving revision 1.125
  diff -u -r1.124 -r1.125
  --- Generator.java    8 Nov 2002 19:55:47 -0000       1.124
  +++ Generator.java    13 Nov 2002 17:40:38 -0000      1.125
  @@ -3031,19 +3031,35 @@
           out.printil("public void setJspContext( JspContext ctx ) {");
           out.pushIndent();
           out.printil("super.setJspContext(ctx);");
  -     out.printil("java.util.Vector _jspx_nested = new java.util.Vector();");
  -     out.printil("java.util.Vector _jspx_at_begin = new java.util.Vector();");
  -     out.printil("java.util.Vector _jspx_at_end = new java.util.Vector();");
        TagVariableInfo[] tagVars = tagInfo.getTagVariableInfos();
  +     out.printil("java.util.Vector _jspx_nested = null;");
  +     out.printil("java.util.Vector _jspx_at_begin = null;");
  +     out.printil("java.util.Vector _jspx_at_end = null;");
  +
        for (int i=0; i<tagVars.length; i++) {
  +
            switch(tagVars[i].getScope()) {
            case VariableInfo.NESTED:
  +             out.printil("if (_jspx_nested == null)");
  +             out.pushIndent();
  +             out.printil("_jspx_nested = new java.util.Vector();");
  +             out.popIndent();
                out.printin("_jspx_nested.addElement(");
                break;
  +
            case VariableInfo.AT_BEGIN:
  +             out.printil("if (_jspx_at_begin == null)");
  +             out.pushIndent();
  +             out.printil("_jspx_at_begin = new java.util.Vector();");
  +             out.popIndent();
                out.printin("_jspx_at_begin.addElement(");
                break;
  +
            case VariableInfo.AT_END:
  +             out.printil("if (_jspx_at_end == null)");
  +             out.pushIndent();
  +             out.printil("_jspx_at_end = new java.util.Vector();");
  +             out.popIndent();
                out.printin("_jspx_at_end.addElement(");
                break;
            } // switch
  
  
  
  1.8       +41 -26    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/JspContextWrapper.java
  
  Index: JspContextWrapper.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/runtime/JspContextWrapper.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- JspContextWrapper.java    1 Nov 2002 01:13:47 -0000       1.7
  +++ JspContextWrapper.java    13 Nov 2002 17:40:41 -0000      1.8
  @@ -124,8 +124,9 @@
        this.atBeginVars = atBeginVars;
        this.atEndVars = atEndVars;
        this.pageAttributes = new Hashtable(16);
  -     this.originalNestedVars = new Hashtable(nestedVars.size());
  -
  +     if (nestedVars != null) {
  +         this.originalNestedVars = new Hashtable(nestedVars.size());
  +     }
        copyPageToTagScope(VariableInfo.AT_BEGIN);
        saveNestedVariables();
       }
  @@ -326,14 +327,18 @@
   
        switch (scope) {
        case VariableInfo.NESTED:
  -         iter = nestedVars.iterator();
  +         if (nestedVars != null) {
  +             iter = nestedVars.iterator();
  +         }
            break;
        case VariableInfo.AT_BEGIN:
  -         iter = atBeginVars.iterator();
  +         if (atBeginVars != null) {
  +             iter = atBeginVars.iterator();
  +         }
            break;
        }
   
  -     while (iter.hasNext()) {
  +     while ((iter != null) && iter.hasNext()) {
            String varName = (String) iter.next();
            Object obj = invokingJspCtxt.getAttribute(varName);
            if (obj != null) {
  @@ -353,17 +358,23 @@
   
        switch (scope) {
        case VariableInfo.NESTED:
  -         iter = nestedVars.iterator();
  +         if (nestedVars != null) {
  +             iter = nestedVars.iterator();
  +         }
            break;
        case VariableInfo.AT_BEGIN:
  -         iter = atBeginVars.iterator();
  +         if (atBeginVars != null) {
  +             iter = atBeginVars.iterator();
  +         }
            break;
        case VariableInfo.AT_END:
  -         iter = atEndVars.iterator();
  +         if (atEndVars != null) {
  +             iter = atEndVars.iterator();
  +         }
            break;
        }
   
  -     while (iter.hasNext()) {
  +     while ((iter != null) && iter.hasNext()) {
            String varName = (String) iter.next();
            Object obj = getAttribute(varName);
            if (obj != null) {
  @@ -379,12 +390,14 @@
        * the invoking JSP context, so they can later be restored.
        */
       public void saveNestedVariables() {
  -     Iterator iter = nestedVars.iterator();
  -     while (iter.hasNext()) {
  -         String varName = (String) iter.next();
  -         Object obj = invokingJspCtxt.getAttribute(varName);
  -         if (obj != null) {
  -             originalNestedVars.put(varName, obj);
  +     if (nestedVars != null) {
  +         Iterator iter = nestedVars.iterator();
  +         while (iter.hasNext()) {
  +             String varName = (String) iter.next();
  +             Object obj = invokingJspCtxt.getAttribute(varName);
  +             if (obj != null) {
  +                 originalNestedVars.put(varName, obj);
  +             }
            }
        }
       }
  @@ -394,14 +407,16 @@
        * context.
        */
       public void restoreNestedVariables() {
  -     Iterator iter = nestedVars.iterator();
  -     while (iter.hasNext()) {
  -         String varName = (String) iter.next();
  -         Object obj = originalNestedVars.get(varName);
  -         if (obj != null) {
  -             invokingJspCtxt.setAttribute(varName, obj);
  -         } else {
  -             invokingJspCtxt.removeAttribute(varName, PAGE_SCOPE);
  +     if (nestedVars != null) {
  +         Iterator iter = nestedVars.iterator();
  +         while (iter.hasNext()) {
  +             String varName = (String) iter.next();
  +             Object obj = originalNestedVars.get(varName);
  +             if (obj != null) {
  +                 invokingJspCtxt.setAttribute(varName, obj);
  +             } else {
  +                 invokingJspCtxt.removeAttribute(varName, PAGE_SCOPE);
  +             }
            }
        }
       }
  
  
  

--
To unsubscribe, e-mail:   <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>

Reply via email to