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]

Reply via email to