luehe       2002/12/05 09:56:43

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
                        JspDocumentParser.java JspReader.java Node.java
                        PageDataImpl.java Parser.java TagPluginManager.java
               jasper2/src/share/org/apache/jasper/compiler/tagplugin
                        TagPlugin.java TagPluginContext.java
  Log:
  Store scriptlet text as String (instead of char[]), to avoid
  unnecessary conversions between String and char[].
  
  Revision  Changes    Path
  1.137     +7 -8      
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.136
  retrieving revision 1.137
  diff -u -r1.136 -r1.137
  --- Generator.java    5 Dec 2002 02:39:03 -0000       1.136
  +++ Generator.java    5 Dec 2002 17:56:43 -0000       1.137
  @@ -831,7 +831,7 @@
   
        public void visit(Node.Scriptlet n) throws JasperException {
            n.setBeginJavaLine(out.getJavaLine());
  -         out.printMultiLn(new String(n.getText()));
  +         out.printMultiLn(n.getText());
            out.println();
            n.setEndJavaLine(out.getJavaLine());
        }
  @@ -1713,8 +1713,7 @@
   
        public void visit(Node.TemplateText n) throws JasperException {
   
  -         char[] chars = n.getText();
  -         int size = chars.length;
  +         String text = n.getText();
   
            n.setBeginJavaLine(out.getJavaLine());
   
  @@ -1722,8 +1721,8 @@
            StringBuffer sb = new StringBuffer("out.write(\"");
            int initLength = sb.length();
            int count = CHUNKSIZE;
  -         for (int i = 0 ; i < size ; i++) {
  -             char ch = chars[i];
  +         for (int i = 0 ; i < text.length() ; i++) {
  +             char ch = text.charAt(i);
                --count;
                switch(ch) {
                case '"':
  
  
  
  1.31      +11 -13    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java
  
  Index: JspDocumentParser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspDocumentParser.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- JspDocumentParser.java    27 Nov 2002 16:42:26 -0000      1.30
  +++ JspDocumentParser.java    5 Dec 2002 17:56:43 -0000       1.31
  @@ -368,9 +368,9 @@
            for (int i = offset; i < limit; i++) {
                int ch = buf[i];
                if (lastCh == '$' && ch == '{') {
  -                 char[] bufCopy = ttext.toCharArray();
  -                 if (bufCopy.length > 0) {
  -                     new Node.TemplateText(bufCopy, start, current);
  +                 if (ttext.size() > 0) {
  +                     new Node.TemplateText(ttext.toString(), start,
  +                                           current);
                        ttext = new CharArrayWriter();
                    }
                    // following "${" to first unquoted "}"
  @@ -392,7 +392,8 @@
                            continue;
                        }
                        if (ch == '}') {
  -                         new Node.ELExpression(ttext.toCharArray(), start, current);
  +                         new Node.ELExpression(ttext.toString(), start,
  +                                               current);
                            ttext = new CharArrayWriter();
                            break;
                        }
  @@ -417,9 +418,8 @@
            if (lastCh == '$') {
                ttext.write('$');
            }
  -         char[] bufCopy = ttext.toCharArray();
  -         if (bufCopy.length > 0) {
  -             new Node.TemplateText(bufCopy, start, current);
  +         if (ttext.size() > 0) {
  +             new Node.TemplateText(ttext.toString(), start, current);
            }
        }
       }
  @@ -482,9 +482,7 @@
        if (!inDTD) {
            Mark start = new Mark(path, locator.getLineNumber(),
                                  locator.getColumnNumber());
  -         char[] bufCopy = new char[len];
  -         System.arraycopy(buf, offset, bufCopy, 0, len);
  -         new Node.Comment(bufCopy, start, current);
  +         new Node.Comment(new String(buf, offset, len), start, current);
        }
       }
   
  
  
  
  1.12      +5 -7      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspReader.java
  
  Index: JspReader.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/JspReader.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- JspReader.java    6 Nov 2002 20:14:19 -0000       1.11
  +++ JspReader.java    5 Dec 2002 17:56:43 -0000       1.12
  @@ -171,7 +171,7 @@
        * Gets Content until the next potential JSP element.  Because all elements
        * begin with a '&lt;' we can just move until we see the next one.
        */
  -    char[] nextContent() {
  +    String nextContent() {
           int cur_cursor = current.cursor;
        int len = current.stream.length;
        char ch;
  @@ -201,13 +201,11 @@
        }
   
        len = current.cursor - cur_cursor;
  -     char[] content = new char[len];
  -     System.arraycopy(current.stream, cur_cursor, content, 0, len);
  -     
  -     return content;
  +
  +     return new String(current.stream, cur_cursor, len);
       }
   
  -    char[] getText(Mark start, Mark stop) throws JasperException {
  +    String getText(Mark start, Mark stop) throws JasperException {
        Mark oldstart = mark();
        reset(start);
        CharArrayWriter caw = new CharArrayWriter();
  @@ -215,7 +213,7 @@
            caw.write(nextChar());
        caw.close();
        reset(oldstart);
  -     return caw.toCharArray();
  +     return caw.toString();
       }
   
       int peekChar() {
  
  
  
  1.45      +27 -36    
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.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- Node.java 5 Dec 2002 02:39:03 -0000       1.44
  +++ Node.java 5 Dec 2002 17:56:43 -0000       1.45
  @@ -82,7 +82,7 @@
       
       protected Attributes attrs;
       protected Nodes body;
  -    protected char[] text;
  +    protected String text;
       protected Mark startMark;
       protected int beginJavaLine;
       protected int endJavaLine;
  @@ -121,7 +121,7 @@
        * @param start The location of the jsp page
        * @param parent The enclosing node
        */
  -    public Node(char[] text, Mark start, Node parent) {
  +    public Node(String text, Mark start, Node parent) {
        this.text = text;
        this.startMark = start;
        this.isDummy = (start == null);
  @@ -247,7 +247,7 @@
        this.body = body;
       }
   
  -    public char[] getText() {
  +    public String getText() {
        return text;
       }
   
  @@ -549,7 +549,7 @@
        */
       public static class Comment extends Node {
   
  -     public Comment(char[] text, Mark start, Node parent) {
  +     public Comment(String text, Mark start, Node parent) {
            super(text, start, parent);
        }
   
  @@ -563,7 +563,7 @@
        */
       public static abstract class ScriptingElement extends Node {
   
  -     public ScriptingElement(char[] text, Mark start, Node parent) {
  +     public ScriptingElement(String text, Mark start, Node parent) {
            super(text, start, parent);
        }
   
  @@ -578,16 +578,14 @@
         * TemplateText nodes in its body. This method handles either case.
         * @return The text string
         */
  -     public char[] getText() {
  -         char[] ret = text;
  +     public String getText() {
  +         String ret = text;
            if ((ret == null) && (body != null)) {
  -             CharArrayWriter chars = new CharArrayWriter();
  -             int size = body.size();
  -             for (int i=0; i<size; i++) {
  -                 chars.write(body.getNode(i).getText(), 0,
  -                             body.getNode(i).getText().length);
  +             StringBuffer buf = new StringBuffer();
  +             for (int i=0; i<body.size(); i++) {
  +                 buf.append(body.getNode(i).getText());
                }
  -             ret = chars.toCharArray();
  +             ret = buf.toString();
            }
            return ret;
        }
  @@ -598,7 +596,7 @@
        */
       public static class Declaration extends ScriptingElement {
   
  -     public Declaration(char[] text, Mark start, Node parent) {
  +     public Declaration(String text, Mark start, Node parent) {
            super(text, start, parent);
        }
   
  @@ -617,7 +615,7 @@
        */
       public static class Expression extends ScriptingElement {
   
  -     public Expression(char[] text, Mark start, Node parent) {
  +     public Expression(String text, Mark start, Node parent) {
            super(text, start, parent);
        }
   
  @@ -635,7 +633,7 @@
        */
       public static class Scriptlet extends ScriptingElement {
   
  -     public Scriptlet(char[] text, Mark start, Node parent) {
  +     public Scriptlet(String text, Mark start, Node parent) {
            super(text, start, parent);
        }
   
  @@ -654,7 +652,7 @@
        */
       public static class ELExpression extends Node {
   
  -        public ELExpression(char[] text, Mark start, Node parent) {
  +        public ELExpression(String text, Mark start, Node parent) {
               super(text, start, parent);
           }
   
  @@ -706,7 +704,7 @@
        */
       public static class FallBackAction extends Node {
   
  -     public FallBackAction(Mark start, char[] text, Node parent) {
  +     public FallBackAction(Mark start, String text, Node parent) {
            super(text, start, parent);
        }
   
  @@ -999,7 +997,7 @@
        private Integer numCount;
        private boolean useTagPlugin;
        /**
  -      * The following two fields are use for holding the Java
  +      * The following two fields are used for holding the Java
         * scriptlets that the tag plugins may generate.  Meaningful
         * only if useTagPlugin is true;
         */
  @@ -1397,7 +1395,7 @@
        */
       public static class TemplateText extends Node {
   
  -     public TemplateText(char[] text, Mark start, Node parent) {
  +     public TemplateText(String text, Mark start, Node parent) {
            super(text, start, parent);
        }
   
  @@ -1409,29 +1407,22 @@
            * Trim all whitespace from the left of the template text
            */
           public void ltrim() {
  -            // Whitespace logic borrowed from JspReader.isSpace
            int index = 0;
  -            while ((index < text.length) && (text[index] <= ' ')) {
  +            while ((index < text.length()) && (text.charAt(index) <= ' ')) {
                index++;
               }
  -         int size = text.length - index;
  -            char[] newText = new char[size];
  -            System.arraycopy(text, index, newText, 0, size);
  -            text = newText;
  +            text = text.substring(index);
           }
   
           /**
            * Trim all whitespace from the right of the template text
            */
           public void rtrim() {
  -            // Whitespace logic borrowed from JspReader.isSpace
  -            int size = text.length;
  -            while( (size > 0) && (text[size-1] <= ' ') ) {
  -                size--;
  +            int index = text.length();
  +            while( (index > 0) && (text.charAt(index-1) <= ' ') ) {
  +                index--;
               }
  -            char[] newText = new char[size];
  -            System.arraycopy( text, 0, newText, 0, size );
  -            text = newText;
  +            text = text.substring(0, index);
           }
       }
   
  
  
  
  1.19      +16 -15    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageDataImpl.java
  
  Index: PageDataImpl.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/PageDataImpl.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- PageDataImpl.java 8 Nov 2002 03:03:01 -0000       1.18
  +++ PageDataImpl.java 5 Dec 2002 17:56:43 -0000       1.19
  @@ -411,7 +411,7 @@
        private void appendTag(String tag,
                               Attributes attrs,
                               Node.Nodes body,
  -                            char[] text) throws JasperException {
  +                            String text) throws JasperException {
   
            buf.append("<").append(tag);
            buf.append("\n");
  @@ -578,7 +578,7 @@
            buf.append("/>\n");     
        }
   
  -     private void appendText(char[] text, boolean createJspTextElement) {
  +     private void appendText(String text, boolean createJspTextElement) {
            if (createJspTextElement) {
                buf.append("<").append(JSP_TEXT);
                buf.append("\n");
  @@ -600,7 +600,7 @@
         * Appends the given text as a CDATA section to the XML view, unless
         * the text has already been marked as CDATA.
         */
  -     private void appendCDATA(char[] text) {
  +     private void appendCDATA(String text) {
            buf.append(CDATA_START_SECTION);
            buf.append(escapeCDATA(text));
            buf.append(CDATA_END_SECTION);
  @@ -610,13 +610,14 @@
         * Escapes any occurrences of "]]>" (by replacing them with "]]&gt;")
         * within the given text, so it can be included in a CDATA section.
         */
  -     private char[] escapeCDATA(char[] text) {
  -         CharArrayWriter result = new CharArrayWriter(text.length);
  -         for (int i=0; i<text.length; i++) {
  -             if (((i+2) < text.length)
  -                     && (text[i] == ']')
  -                     && (text[i+1] == ']')
  -                     && (text[i+2] == '>')) {
  +     private String escapeCDATA(String text) {
  +         int len = text.length();
  +         CharArrayWriter result = new CharArrayWriter(len);
  +         for (int i=0; i<len; i++) {
  +             if (((i+2) < len)
  +                     && (text.charAt(i) == ']')
  +                     && (text.charAt(i+1) == ']')
  +                     && (text.charAt(i+2) == '>')) {
                    // match found
                    result.write(']');
                    result.write(']');
  @@ -626,10 +627,10 @@
                    result.write(';');
                    i += 2;
                } else {
  -                 result.write(text[i]);
  +                 result.write(text.charAt(i));
                }
            }
  -         return result.toCharArray();
  +         return result.toString();
        }
   
        /*
  
  
  
  1.41      +31 -32    
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java
  
  Index: Parser.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Parser.java,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- Parser.java       23 Nov 2002 01:49:40 -0000      1.40
  +++ Parser.java       5 Dec 2002 17:56:43 -0000       1.41
  @@ -275,19 +275,21 @@
        *                | '\>'
        *                | Char
        */
  -    private String parseQuoted(char[] tx) {
  +    private String parseQuoted(String tx) {
        StringBuffer buf = new StringBuffer();
  -     int size = tx.length;
  +     int size = tx.length();
        int i = 0;
        while (i < size) {
  -         char ch = tx[i];
  +         char ch = tx.charAt(i);
            if (ch == '&') {
  -             if (i+5 < size && tx[i+1] == 'a' && tx[i+2] == 'p' &&
  -                     tx[i+3] == 'o' && tx[i+4] == 's' && tx[i+5] == ';') {
  +             if (i+5 < size && tx.charAt(i+1) == 'a'
  +                     && tx.charAt(i+2) == 'p' && tx.charAt(i+3) == 'o'
  +                     && tx.charAt(i+4) == 's' && tx.charAt(i+5) == ';') {
                    buf.append('\'');
                    i += 6;
  -             } else if (i+5 < size && tx[i+1] == 'q' && tx[i+2] == 'u' &&
  -                     tx[i+3] == 'o' && tx[i+4] == 't' && tx[i+5] == ';') {
  +             } else if (i+5 < size && tx.charAt(i+1) == 'q'
  +                        && tx.charAt(i+2) == 'u' && tx.charAt(i+3) == 'o'
  +                        && tx.charAt(i+4) == 't' && tx.charAt(i+5) == ';') {
                    buf.append('"');
                    i += 6;
                } else {
  @@ -295,7 +297,7 @@
                    ++i;
                }
            } else if (ch == '\\' && i+1 < size) {
  -             ch = tx[i+1];
  +             ch = tx.charAt(i+1);
                if (ch == '\\' || ch == '\"' || ch == '\'' || ch == '>') {
                    buf.append(ch);
                    i += 2;
  @@ -311,13 +313,14 @@
        return buf.toString();
       }
   
  -    private char[] parseScriptText(char[] tx) {
  +    private String parseScriptText(String tx) {
        CharArrayWriter cw = new CharArrayWriter();
  -     int size = tx.length;
  +     int size = tx.length();
        int i = 0;
        while (i < size) {
  -         char ch = tx[i];
  -         if (i+2 < size && ch == '%' && tx[i+1] == '\\' && tx[i+2] == '>') {
  +         char ch = tx.charAt(i);
  +         if (i+2 < size && ch == '%' && tx.charAt(i+1) == '\\'
  +                 && tx.charAt(i+2) == '>') {
                cw.write('%');
                cw.write('>');
                i += 3;
  @@ -327,7 +330,7 @@
            }
        }
        cw.close();
  -     return cw.toCharArray();
  +     return cw.toString();
       }
   
       /*
  @@ -637,7 +640,7 @@
        }
   
        new Node.Declaration(parseScriptText(reader.getText(start, stop)),
  -                             start, parent);
  +                          start, parent);
       }
   
       /*
  @@ -662,7 +665,7 @@
               }
   
               new Node.Declaration(parseScriptText(reader.getText(start, stop)),
  -                               start, parent);
  +                              start, parent);
           }
       }
   
  @@ -677,7 +680,7 @@
        }
   
        new Node.Expression(parseScriptText(reader.getText(start, stop)),
  -                             start, parent);
  +                         start, parent);
       }
   
       /*
  @@ -702,7 +705,7 @@
               }
   
               new Node.Expression(parseScriptText(reader.getText(start, stop)),
  -                                    start, parent);
  +                             start, parent);
           }
       }
   
  @@ -748,7 +751,7 @@
        }
   
        new Node.Scriptlet(parseScriptText(reader.getText(start, stop)),
  -                             start, parent);
  +                        start, parent);
       }
   
       /*
  @@ -773,7 +776,7 @@
               }
   
               new Node.Scriptlet(parseScriptText(reader.getText(start, stop)),
  -                                    start, parent );
  +                            start, parent );
           }
       }
        
  @@ -1079,8 +1082,8 @@
                   err.jspError(start, "jsp.error.unterminated", 
                       "&lt;jsp:fallback");
               }
  -            char[] text = reader.getText(bodyStart, bodyEnd);
  -            new Node.FallBackAction(start, text, parent);
  +            new Node.FallBackAction(start, reader.getText(bodyStart, bodyEnd),
  +                                 parent);
           }
           else {
               err.jspError( reader.mark(), "jsp.error.unterminated",
  @@ -1296,12 +1299,8 @@
        // Quoting in template text is handled here.
        // JSP2.6 "A literal <% is quoted by <\%"
        if (reader.matches("<\\%")) {
  -         char[] content = reader.nextContent();
  -         char[] text = new char[content.length + 2];
  -         text[0] = '<';
  -         text[1] = '%';
  -         System.arraycopy(content, 0, text, 2, content.length);
  -         new Node.TemplateText(text, start, parent);
  +         String content = reader.nextContent();
  +         new Node.TemplateText("<%" + content, start, parent);
        } else {
            new Node.TemplateText(reader.nextContent(), start, parent);
        }
  @@ -1335,7 +1334,7 @@
                   if( ch == '<' ) break;
                   if( (lastCh == '$') && (ch == '{') ) {
                       // Create a template text node
  -                    new Node.TemplateText( ttext.toCharArray(), start, parent);
  +                    new Node.TemplateText( ttext.toString(), start, parent);
   
                       // Mark and parse the EL expression and create its node:
                       start = reader.mark();
  @@ -1368,7 +1367,7 @@
                   }
                   // This could happen if we parsed an EL expression and then
                   // there was no more template text (see above).
  -                new Node.TemplateText( ttext.toCharArray(), start, parent );
  +                new Node.TemplateText( ttext.toString(), start, parent );
               }
   
               if( !reader.matchesETagWithoutLessThan( "jsp:text" ) ) {
  
  
  
  1.5       +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.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TagPluginManager.java     5 Dec 2002 02:39:03 -0000       1.4
  +++ TagPluginManager.java     5 Dec 2002 17:56:43 -0000       1.5
  @@ -206,7 +206,7 @@
   
        public void generateBody() {
            // Since we'll generate the body anyway, this is really a nop, 
  -         // except for the fact that it let us put the Java sources the
  +         // except for the fact that it lets us put the Java sources the
            // plugins produce in the correct order (w.r.t the body).
            curNodes = node.getAtETag();
        }
  
  
  
  1.4       +4 -4      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPlugin.java
  
  Index: TagPlugin.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPlugin.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TagPlugin.java    4 Dec 2002 01:41:19 -0000       1.3
  +++ TagPlugin.java    5 Dec 2002 17:56:43 -0000       1.4
  @@ -64,7 +64,7 @@
   /**
    * This interface is to be implemented by the plugin author, to supply
    * an alternate implementation of the tag handlers.  It can be used to
  - * specify the Java codes to be generated when a tag is referenced.
  + * specify the Java codes to be generated when a tag is invoked.
    *
    * An implementation of this interface must be registered in a file
    * named "tagPlugins.xml" under WEB-INF.
  
  
  
  1.5       +7 -7      
jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPluginContext.java
  
  Index: TagPluginContext.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/tagplugin/TagPluginContext.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- TagPluginContext.java     5 Dec 2002 02:39:03 -0000       1.4
  +++ TagPluginContext.java     5 Dec 2002 17:56:43 -0000       1.5
  @@ -66,13 +66,13 @@
   /**
    * This interface allows the plugin author to make inqueries about the
    * properties of the current tag, and to use Jasper resources to generate
  - * direct Java codes in place of tag handler invokations.
  + * direct Java codes in place of tag handler invocations.
    */
   
   public interface TagPluginContext {
       /**
  -      * @return true if the body of the tag is scriptless.
  -      */
  +     * @return true if the body of the tag is scriptless.
  +     */
       boolean isScriptless();
   
       /**
  @@ -102,7 +102,7 @@
        * Abandon optimization for this tag handler, and instruct
        * Jaser to generate the tag handler calls, as usual.
        * Should be invoked if errors are detected, or when the tag body
  -     * is judged to be too compilicated for optimization.
  +     * is deemed too compilicated for optimization.
        */
       void dontUseTagPlugin();
   }
  
  
  

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

Reply via email to