Author: jdonnerstag
Date: Sat Mar 19 22:06:25 2011
New Revision: 1083309

URL: http://svn.apache.org/viewvc?rev=1083309&view=rev
Log:
XmlTag: move immutable information in separate class (and avoid data 
duplication)

Modified:
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
    
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlTag.java

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java?rev=1083309&r1=1083308&r2=1083309&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlPullParser.java
 Sat Mar 19 22:06:25 2011
@@ -24,6 +24,7 @@ import java.text.ParseException;
 
 import org.apache.wicket.markup.MarkupElement;
 import org.apache.wicket.markup.parser.XmlTag.TagType;
+import org.apache.wicket.markup.parser.XmlTag.TextSegment;
 import org.apache.wicket.util.io.FullyBufferedReader;
 import org.apache.wicket.util.io.IOUtils;
 import org.apache.wicket.util.io.XmlReader;
@@ -273,10 +274,8 @@ public final class XmlPullParser impleme
                {
                        // Populate tag fields
                        lastTag.type = type;
-                       lastTag.pos = openBracketIndex;
-                       lastTag.text = lastText;
-                       lastTag.lineNumber = input.getLineNumber();
-                       lastTag.columnNumber = input.getColumnNumber();
+                       lastTag.text = new TextSegment(lastText, 
openBracketIndex, input.getLineNumber(),
+                               input.getColumnNumber());
 
                        // Move to position after the tag
                        input.setPosition(closeBracketIndex + 1);

Modified: 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlTag.java
URL: 
http://svn.apache.org/viewvc/wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlTag.java?rev=1083309&r1=1083308&r2=1083309&view=diff
==============================================================================
--- 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlTag.java
 (original)
+++ 
wicket/trunk/wicket-core/src/main/java/org/apache/wicket/markup/parser/XmlTag.java
 Sat Mar 19 22:06:25 2011
@@ -62,27 +62,17 @@ public class XmlTag extends MarkupElemen
                }
        }
 
+       TextSegment text;
+
        /** Attribute map. */
        private IValueMap attributes;
 
-       /** Column number. */
-       int columnNumber;
-
-       /** Line number. */
-       int lineNumber;
-
        /** Name of tag, such as "img" or "input". */
        String name;
 
        /** Namespace of the tag, if available, such as <wicket:link ...> 
*/
        String namespace;
 
-       /** Position of this tag in the input that was parsed. */
-       int pos;
-
-       /** Full text of tag. */
-       CharSequence text;
-
        /** The tag type (OPEN, CLOSE or OPEN_CLOSE). */
        TagType type;
 
@@ -170,7 +160,7 @@ public class XmlTag extends MarkupElemen
         */
        public int getColumnNumber()
        {
-               return columnNumber;
+               return (text != null ? text.columnNumber : 0);
        }
 
        /**
@@ -180,7 +170,7 @@ public class XmlTag extends MarkupElemen
         */
        public int getLength()
        {
-               return text.length();
+               return (text != null ? text.text.length() : 0);
        }
 
        /**
@@ -190,7 +180,7 @@ public class XmlTag extends MarkupElemen
         */
        public int getLineNumber()
        {
-               return lineNumber;
+               return (text != null ? text.lineNumber : 0);
        }
 
        /**
@@ -230,7 +220,7 @@ public class XmlTag extends MarkupElemen
         */
        public int getPos()
        {
-               return pos;
+               return (text != null ? text.pos : 0);
        }
 
        /**
@@ -367,7 +357,6 @@ public class XmlTag extends MarkupElemen
        {
                dest.namespace = namespace;
                dest.name = name;
-               dest.pos = pos;
                dest.text = text;
                dest.type = type;
                dest.isMutable = true;
@@ -543,7 +532,7 @@ public class XmlTag extends MarkupElemen
         */
        public String toDebugString()
        {
-               return "[Tag name = " + name + ", pos = " + pos + ", line = " + 
lineNumber +
+               return "[Tag name = " + name + ", pos = " + text.pos + ", line 
= " + text.lineNumber +
                        ", attributes = [" + getAttributes() + "], type = " + 
type + "]";
        }
 
@@ -563,7 +552,7 @@ public class XmlTag extends MarkupElemen
        {
                if (!isMutable && (text != null))
                {
-                       return text;
+                       return text.text;
                }
 
                return toXmlString(null);
@@ -577,7 +566,8 @@ public class XmlTag extends MarkupElemen
        @Override
        public String toUserDebugString()
        {
-               return " '" + toString() + "' (line " + lineNumber + ", column 
" + columnNumber + ")";
+               return " '" + toString() + "' (line " + getLineNumber() + ", 
column " + getColumnNumber() +
+                       ")";
        }
 
        /**
@@ -640,4 +630,27 @@ public class XmlTag extends MarkupElemen
                buffer.append('>');
                return buffer;
        }
+
+       static class TextSegment
+       {
+               /** Column number. */
+               final int columnNumber;
+
+               /** Line number. */
+               final int lineNumber;
+
+               /** Position of this tag in the input that was parsed. */
+               final int pos;
+
+               /** Full text of tag. */
+               final CharSequence text;
+
+               TextSegment(CharSequence text, int pos, int line, int col)
+               {
+                       this.text = text;
+                       this.pos = pos;
+                       lineNumber = line;
+                       columnNumber = col;
+               }
+       }
 }


Reply via email to