kinman      2002/12/06 15:19:58

  Modified:    jasper2/src/share/org/apache/jasper/compiler
                        TagPluginManager.java
               jasper2/src/share/org/apache/jasper/tagplugins/jstl
                        ForEach.java
  Log:
  - More cases for optimizing forEach plugin
  
  Revision  Changes    Path
  1.8       +4 -4      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagPluginManager.java
  
  Index: TagPluginManager.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/TagPluginManager.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- TagPluginManager.java     5 Dec 2002 23:56:39 -0000       1.7
  +++ TagPluginManager.java     6 Dec 2002 23:19:58 -0000       1.8
  @@ -108,7 +108,6 @@
        if (initialized)
            return;
   
  -     initialized = true;
        InputStream is = ctxt.getResourceAsStream(TAG_PLUGINS_XML);
        if (is == null)
            return;
  @@ -153,6 +152,7 @@
            }
            tagPlugins.put(tagClass, tagPlugin);
        }
  +     initialized = true;
       }
   
       /**
  
  
  
  1.2       +43 -14    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/tagplugins/jstl/ForEach.java
  
  Index: ForEach.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/tagplugins/jstl/ForEach.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ForEach.java      5 Dec 2002 23:56:39 -0000       1.1
  +++ ForEach.java      6 Dec 2002 23:19:58 -0000       1.2
  @@ -63,23 +63,52 @@
   
   import org.apache.jasper.compiler.tagplugin.*;
   
  -public class ForEach implements TagPlugin {
  +public final class ForEach implements TagPlugin {
   
       public void doTag(TagPluginContext ctxt) {
   
        String index = null;
   
  -     if (ctxt.isAttributeSpecified("begin")) {
  -         index = ctxt.getTemporaryVariableName();
  -         ctxt.generateJavaSource("for (int " + index + " = ");
  -         ctxt.generateAttribute("begin");
  -         ctxt.generateJavaSource("; " + index + " <= ");
  -         ctxt.generateAttribute("end");
  -         ctxt.generateJavaSource("; " + index + "++) {");
  -         ctxt.generateBody();
  -         ctxt.generateJavaSource("}");
  -     } else {
  +     boolean hasVarStatus = ctxt.isAttributeSpecified("varStatus");
  +     if (hasVarStatus) {
            ctxt.dontUseTagPlugin();
  +         return;
  +     }
  +
  +     boolean hasItems = ctxt.isAttributeSpecified("items");
  +     if (hasItems) {
  +         // optimizations stubbed out for now
  +         return;
  +     }
  +
  +     boolean hasVar = ctxt.isAttributeSpecified("var");
  +     boolean hasBegin = ctxt.isAttributeSpecified("begin");
  +     boolean hasEnd = ctxt.isAttributeSpecified("end");
  +     boolean hasStep = ctxt.isAttributeSpecified("step");
  +
  +     // We must have a begin and end attributes
  +     index = ctxt.getTemporaryVariableName();
  +     ctxt.generateJavaSource("for (int " + index + " = ");
  +     ctxt.generateAttribute("begin");
  +     ctxt.generateJavaSource("; " + index + " <= ");
  +     ctxt.generateAttribute("end");
  +     if (hasStep) {
  +         ctxt.generateJavaSource("; " + index + "+=");
  +         ctxt.generateAttribute("step");
  +         ctxt.generateJavaSource(") {");
  +     }
  +     else {
  +         ctxt.generateJavaSource("; " + index + "++) {");
  +     }
  +
  +     // If var is specified and the body contains an EL, then sycn
  +     // the var attribute
  +     if (hasVar /* && ctxt.hasEL() */) {
  +         ctxt.generateJavaSource("pageContext.setAttribute(");
  +         ctxt.generateAttribute("var");
  +         ctxt.generateJavaSource(", String.valueOf(" + index + "));");
        }
  +     ctxt.generateBody();
  +     ctxt.generateJavaSource("}");
       }
   }
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to