kinman 2003/09/16 10:46:44 Modified: jasper2/src/share/org/apache/jasper/compiler Generator.java Node.java SmapStratum.java SmapUtil.java Log: - For template texts that generate multiple Java lines, addidtional mapping informantion are kept in the TemplateText node, to aide SMAP generation. Revision Changes Path 1.208 +23 -14 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.207 retrieving revision 1.208 diff -u -r1.207 -r1.208 --- Generator.java 15 Sep 2003 13:43:54 -0000 1.207 +++ Generator.java 16 Sep 2003 17:46:43 -0000 1.208 @@ -1867,21 +1867,25 @@ return; } - if (ctxt.getOptions().genStringAsCharArray()) { - if (textSize <= 3) { - // Spcial case small text strings - n.setBeginJavaLine(out.getJavaLine()); - out.printil("out.write(" + quote(text.charAt(0)) + ");"); - if (textSize > 1) { - out.printil("out.write(" + quote(text.charAt(1)) + ");"); + if (textSize <= 3) { + // Special case small text strings + n.setBeginJavaLine(out.getJavaLine()); + int lineInc = 0; + for (int i = 0; i < textSize; i++) { + char ch = text.charAt(i); + out.printil("out.write(" + quote(ch) + ");"); + if (i > 0) { + n.addSmap(lineInc); } - if (textSize > 2) { - out.printil("out.write(" + quote(text.charAt(2)) + ");"); + if (ch == '\n') { + lineInc++; } - n.setEndJavaLine(out.getJavaLine()); - return; } + n.setEndJavaLine(out.getJavaLine()); + return; + } + if (ctxt.getOptions().genStringAsCharArray()) { // Generate Strings as char arrays, for performance ServletWriter caOut; if (charArrayBuffer == null) { @@ -1915,6 +1919,7 @@ StringBuffer sb = new StringBuffer("out.write(\""); int initLength = sb.length(); int count = JspUtil.CHUNKSIZE; + int srcLine = 0; // relative to starting srouce line for (int i = 0; i < text.length(); i++) { char ch = text.charAt(i); --count; @@ -1930,6 +1935,7 @@ break; case '\n' : sb.append('\\').append('n'); + srcLine++; if (breakAtLF || count < 0) { // Generate an out.write() when see a '\n' in template @@ -1940,6 +1946,9 @@ } sb.setLength(initLength); count = JspUtil.CHUNKSIZE; + + // add a Smap for this line + n.addSmap(srcLine); } break; case '\t' : // Not sure we need this 1.77 +24 -4 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java Index: Node.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Node.java,v retrieving revision 1.76 retrieving revision 1.77 diff -u -r1.76 -r1.77 --- Node.java 2 Sep 2003 21:39:59 -0000 1.76 +++ Node.java 16 Sep 2003 17:46:43 -0000 1.77 @@ -63,6 +63,7 @@ import java.util.Iterator; import java.util.List; import java.util.Vector; +import java.util.ArrayList; import javax.servlet.jsp.tagext.BodyTag; import javax.servlet.jsp.tagext.DynamicAttributes; @@ -1921,6 +1922,8 @@ */ public static class TemplateText extends Node { + private ArrayList extraSmap = null; + public TemplateText(String text, Mark start, Node parent) { super(null, null, text, start, parent); } @@ -1957,13 +1960,30 @@ public boolean isAllSpace() { boolean isAllSpace = true; for (int i=0; i<text.length(); i++) { - if (!Character.isSpace(text.charAt(i))) { + if (!Character.isWhitespace(text.charAt(i))) { isAllSpace = false; break; } } return isAllSpace; } + + /** + * Add a source to Java line mapping + * @param srcLine The postion of the source line, relative to the line + * at the start of this node. The corresponding java line is + * assumed to be consecutive, i.e. one more than the last. + */ + public void addSmap(int srcLine) { + if (extraSmap == null) { + extraSmap = new ArrayList(); + } + extraSmap.add(new Integer(srcLine)); + } + + public ArrayList getExtraSmap() { + return extraSmap; + } } /********************************************************************* 1.11 +6 -0 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapStratum.java Index: SmapStratum.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapStratum.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- SmapStratum.java 31 Aug 2003 03:46:29 -0000 1.10 +++ SmapStratum.java 16 Sep 2003 17:46:43 -0000 1.11 @@ -210,6 +210,12 @@ */ public void optimizeLineSection() { +/* Some debugging code + for (int i = 0; i < lineData.size(); i++) { + LineInfo li = (LineInfo)lineData.get(i); + System.out.print(li.toString()); + } +*/ //Incorporate each LineInfo into the previous LineInfo's //outputLineIncrement, if possible int i = 0; 1.19 +8 -16 jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapUtil.java Index: SmapUtil.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/SmapUtil.java,v retrieving revision 1.18 retrieving revision 1.19 diff -u -r1.18 -r1.19 --- SmapUtil.java 25 Aug 2003 03:58:48 -0000 1.18 +++ SmapUtil.java 16 Sep 2003 17:46:43 -0000 1.19 @@ -77,6 +77,7 @@ * @author Shawn Bayern * @author Robert Field (inner SDEInstaller class) * @author Mark Roth + * @author Kin-man Chung */ public class SmapUtil { @@ -613,25 +614,16 @@ int iOutputStartLine = n.getBeginJavaLine(); smap.addLineData(iInputStartLine, fileName, 1, iOutputStartLine, 1); - //Walk through the node text the same way Generator.java's - //visit(Node.TemplateText n) does. Every time the - //line number advances in the input file or the output file, - //add a LineInfo with the new line numbers. - String text = n.getText(); - int count = JspUtil.CHUNKSIZE; - for (int i = 0; i < text.length() - 1; i++) { - --count; - if (text.charAt(i) == '\n') { - iInputStartLine++; - if (breakAtLF || count < 0) { - iOutputStartLine++; - count = JspUtil.CHUNKSIZE; - } + // Output additional mappings in the text + java.util.ArrayList extraSmap = n.getExtraSmap(); + + if (extraSmap != null) { + for (int i = 0; i < extraSmap.size(); i++) { smap.addLineData( - iInputStartLine, + iInputStartLine+((Integer)extraSmap.get(i)).intValue(), fileName, 1, - iOutputStartLine, + ++iOutputStartLine, 1); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]