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]>