kinman 01/10/18 18:42:36 Modified: jasper/src/share/org/apache/jasper/compiler Parser.java ServletWriter.java TagBeginGenerator.java TagEndGenerator.java Log: PR: Bugzilla 2622 - For tag handlers with empty body, generate simpler codes. - Don't call doInitBody() when doStartTag doesn't return EVAL_BODY_BUFFERED - Cleanup format of generated Java codes. Revision Changes Path 1.16 +2 -2 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Parser.java Index: Parser.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/Parser.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- Parser.java 2001/10/03 19:29:28 1.15 +++ Parser.java 2001/10/19 01:42:36 1.16 @@ -838,9 +838,9 @@ reader.advance(CLOSE_1.length()); listener.setTemplateInfo(parser.tmplStart, parser.tmplStop); listener.handleTagBegin(start, reader.mark(), attrs, prefix, - shortTagName, tli, ti, true); + shortTagName, tli, ti, false); listener.handleTagEnd(start, reader.mark(), prefix, - shortTagName, attrs, tli, ti, true); + shortTagName, attrs, tli, ti, false); } else { // Body can be either // - empty 1.3 +12 -9 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java Index: ServletWriter.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ServletWriter.java 2001/07/12 21:40:51 1.2 +++ ServletWriter.java 2001/10/19 01:42:36 1.3 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java,v 1.2 2001/07/12 21:40:51 horwat Exp $ - * $Revision: 1.2 $ - * $Date: 2001/07/12 21:40:51 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/ServletWriter.java,v 1.3 2001/10/19 01:42:36 kinman Exp $ + * $Revision: 1.3 $ + * $Date: 2001/10/19 01:42:36 $ * * ==================================================================== * @@ -71,11 +71,12 @@ * @author Anil K. Vijendran */ public class ServletWriter { - public static int TAB_WIDTH = 4; + public static int TAB_WIDTH = 2; public static String SPACES = " "; // Current indent level: - int indent = 0; + private int indent = 0; + private int virtual_indent = 0; // The sink writer: PrintWriter writer; @@ -110,13 +111,15 @@ // -------------------- Formatting -------------------- public void pushIndent() { - if ((indent += TAB_WIDTH) > SPACES.length()) - indent = SPACES.length(); + virtual_indent += TAB_WIDTH; + if (virtual_indent >= 0 && virtual_indent <= SPACES.length()) + indent = virtual_indent; } public void popIndent() { - if ((indent -= TAB_WIDTH) <= 0 ) - indent = 0; + virtual_indent -= TAB_WIDTH; + if (virtual_indent >= 0 && virtual_indent <= SPACES.length()) + indent = virtual_indent; } /** 1.17 +12 -4 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java Index: TagBeginGenerator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagBeginGenerator.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- TagBeginGenerator.java 2001/09/26 02:37:13 1.16 +++ TagBeginGenerator.java 2001/10/19 01:42:36 1.17 @@ -68,6 +68,7 @@ import javax.servlet.jsp.tagext.TagData; import javax.servlet.jsp.tagext.Tag; import javax.servlet.jsp.tagext.BodyTag; +import javax.servlet.jsp.tagext.IterationTag; import org.apache.jasper.JasperException; import org.apache.jasper.JspCompilationContext; @@ -347,6 +348,10 @@ // Need to update AT_BEGIN variables here declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN); +/* The following check is unnecssary, becuase tag handlers that do not + * implement BodyTag can be assumed to return EVAL_BODY_INCLUDE when + * doStartTag returns anything other than SKIP_BODY, without bad side-effect. + // FIXME: I'm not too sure if this is the right approach. I don't like // throwing English language strings into the generated servlet. // Perhaps, I'll just define an inner classes as necessary for these @@ -359,6 +364,7 @@ " does not implement BodyTag, it can't return BodyTag.EVAL_BODY_TAG\");"); writer.popIndent(); } +*/ if (hasBody) { writer.println("if ("+evalVar+" != javax.servlet.jsp.tagext.Tag.SKIP_BODY) {"); @@ -369,19 +375,21 @@ writer.pushIndent(); writer.println("if ("+evalVar+" != javax.servlet.jsp.tagext.Tag.EVAL_BODY_INCLUDE) {"); + // Assumes that equals EVAL_BODY_BUFFERED writer.pushIndent(); writer.println("out = pageContext.pushBody();"); writer.println(thVarName+".setBodyContent((javax.servlet.jsp.tagext.BodyContent) out);"); + writer.println(thVarName+".doInitBody();"); writer.popIndent(); writer.println("}"); - - writer.println(thVarName+".doInitBody();"); } - writer.println("do {"); - writer.pushIndent(); + if (IterationTag.class.isAssignableFrom(tc.getTagHandlerClass())) { + writer.println("do {"); + writer.pushIndent(); + } } // Need to declare and update NESTED variables here declareVariables(writer, vi, tvi, tagData, true, true, VariableInfo.NESTED); 1.10 +3 -4 jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagEndGenerator.java Index: TagEndGenerator.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/jasper/src/share/org/apache/jasper/compiler/TagEndGenerator.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- TagEndGenerator.java 2001/07/23 19:57:32 1.9 +++ TagEndGenerator.java 2001/10/19 01:42:36 1.10 @@ -123,13 +123,12 @@ boolean implementsTryCatchFinally = TryCatchFinally.class.isAssignableFrom(tagHandlerClass); - writer.popIndent(); if (hasBody) { - if (implementsIterationTag) + if (implementsIterationTag) { + writer.popIndent(); writer.println("} while ("+thVarName+".doAfterBody() == javax.servlet.jsp.tagext.BodyTag.EVAL_BODY_AGAIN);"); - else - writer.println("} while (false);"); + } } declareVariables(writer, vi, tvi, tagData, false, true, VariableInfo.AT_BEGIN);