You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2003/03/18 21:54:42 UTC

cvs commit: jakarta-tapestry/framework/src/org/apache/tapestry/parse TemplateParser.java

hlship      2003/03/18 12:54:42

  Modified:    framework/src/org/apache/tapestry/parse TemplateParser.java
  Log:
  Slight optimization on creation of Location objects.
  
  Revision  Changes    Path
  1.4       +36 -7     jakarta-tapestry/framework/src/org/apache/tapestry/parse/TemplateParser.java
  
  Index: TemplateParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tapestry/framework/src/org/apache/tapestry/parse/TemplateParser.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TemplateParser.java	15 Mar 2003 21:22:19 -0000	1.3
  +++ TemplateParser.java	18 Mar 2003 20:54:42 -0000	1.4
  @@ -271,6 +271,13 @@
        **/
   
       private Location _templateLocation;
  +    
  +    /**
  +     *  Location with in the resource for the current line.
  +     * 
  +     **/
  +    
  +    private Location _currentLocation;
   
       /**
        *  Local reference to the template data that is to be parsed.
  @@ -423,6 +430,7 @@
               _templateData = null;
               _resourceLocation = null;
               _templateLocation = null;
  +            _currentLocation = null;
               _stack.clear();
               _tokens.clear();
               _attributes.clear();
  @@ -716,7 +724,7 @@
                                   tagName,
                                   Integer.toString(_line),
                                   attributeName),
  -                            new Location(_resourceLocation, _line));
  +                            getCurrentLocation());
   
                       // Ignore whitespace between '=' and the attribute value.  Also, look
                       // for initial quote.
  @@ -986,7 +994,7 @@
               addOpenToken(tagName, jwcId, type, startLocation);
   
               if (emptyTag)
  -                _tokens.add(new CloseToken(tagName, new Location(_resourceLocation, _line)));
  +                _tokens.add(new CloseToken(tagName, getCurrentLocation()));
           }
   
           advance();
  @@ -1126,6 +1134,8 @@
           int length = _templateData.length;
           int startLine = _line;
   
  +		Location startLocation = getCurrentLocation();
  +		
           _cursor += CLOSE_TAG.length;
   
           int tagStart = _cursor;
  @@ -1137,7 +1147,7 @@
                       Tapestry.getString(
                           "TemplateParser.incomplete-close-tag",
                           Integer.toString(startLine)),
  -                    new Location(_resourceLocation, startLine));
  +                    startLocation);
   
               char ch = _templateData[_cursor];
   
  @@ -1168,7 +1178,7 @@
                               Integer.toString(startLine),
                               tag._tagName,
                               Integer.toString(tag._line)}),
  -                    new Location(_resourceLocation, startLine));
  +                    startLocation);
   
               stackPos--;
           }
  @@ -1179,7 +1189,7 @@
                       "TemplateParser.unmatched-close-tag",
                       tagName,
                       Integer.toString(startLine)),
  -                new Location(_resourceLocation, startLine));
  +                startLocation);
   
           // Special case for the content tag
   
  @@ -1199,7 +1209,7 @@
           {
               addTextToken(cursorStart - 1);
   
  -            _tokens.add(new CloseToken(tagName, new Location(_resourceLocation, _line)));
  +            _tokens.add(new CloseToken(tagName, getCurrentLocation()));
           }
           else
           {
  @@ -1254,6 +1264,7 @@
           if (ch == '\n')
           {
               _line++;
  +            _currentLocation = null;
               return;
           }
   
  @@ -1262,6 +1273,7 @@
           if (ch == '\r')
           {
               _line++;
  +            _currentLocation = null;
   
               if (_cursor < length && _templateData[_cursor] == '\n')
                   _cursor++;
  @@ -1418,5 +1430,22 @@
               return false;
   
           return value.equalsIgnoreCase("true");
  +    }
  +    
  +    /**
  +     *  Gets the current location within the file.  This allows the location to be
  +     *  created only as needed, and multiple objects on the same line can share
  +     *  the same Location instance.
  +     * 
  +     *  @since 2.4
  +     * 
  +     **/
  +    
  +    protected Location getCurrentLocation()
  +    {
  +    	if (_currentLocation == null)
  +    	_currentLocation = new Location(_resourceLocation, _line);
  +    	
  +    	return _currentLocation;
       }
   }