hack SettingValueElement.Unmerge().
[mono.git] / mcs / class / System.XML / System.Xml.XPath / XPathNavigator.cs
index 1d49cfff7cced545255bf97c3051c87d68103b23..6031abe28aa8d11bdcd610f91dcff3bf9b73f1dd 100644 (file)
@@ -31,8 +31,8 @@
 //
 
 using System;
-#if NET_2_0
 using System.Collections;
+#if NET_2_0
 using System.Collections.Generic;
 using System.Diagnostics;
 using System.Text;
@@ -57,6 +57,43 @@ namespace System.Xml.XPath
        public abstract class XPathNavigator : ICloneable
 #endif
        {
+               class EnumerableIterator : XPathNodeIterator
+               {
+                       IEnumerable source;
+                       IEnumerator e;
+                       int pos;
+
+                       public EnumerableIterator (IEnumerable source, int pos)
+                       {
+                               this.source = source;
+                               for (int i = 0; i < pos; i++)
+                                       MoveNext ();
+                       }
+
+                       public override XPathNodeIterator Clone ()
+                       {
+                               return new EnumerableIterator (source, pos);
+                       }
+
+                       public override bool MoveNext ()
+                       {
+                               if (e == null)
+                                       e = source.GetEnumerator ();
+                               if (!e.MoveNext ())
+                                       return false;
+                               pos++;
+                               return true;
+                       }
+
+                       public override int CurrentPosition {
+                               get { return pos; }
+                       }
+
+                       public override XPathNavigator Current {
+                               get { return pos == 0 ? null : (XPathNavigator) e.Current; }
+                       }
+               }
+
                #region Static members
 #if NET_2_0
                public static IEqualityComparer NavigatorComparer {
@@ -253,8 +290,16 @@ namespace System.Xml.XPath
                {
                        return Evaluate (expr, context, null);
                }
-               
-               internal virtual object Evaluate (XPathExpression expr, XPathNodeIterator context, NSResolver ctx)
+
+               BaseIterator ToBaseIterator (XPathNodeIterator iter, NSResolver ctx)
+               {
+                       BaseIterator i = iter as BaseIterator;
+                       if (i == null)
+                               i = new WrapperIterator (iter, ctx);
+                       return i;
+               }
+
+               object Evaluate (XPathExpression expr, XPathNodeIterator context, NSResolver ctx)
                {
                        CompiledExpression cexpr = (CompiledExpression) expr;
                        if (ctx == null)
@@ -262,7 +307,7 @@ namespace System.Xml.XPath
                        
                        if (context == null)
                                context = new NullIterator (this, ctx);
-                       BaseIterator iterContext = (BaseIterator) context;
+                       BaseIterator iterContext = ToBaseIterator (context, ctx);
                        iterContext.NamespaceManager = ctx;
                        return cexpr.Evaluate (iterContext);
                }
@@ -275,7 +320,7 @@ namespace System.Xml.XPath
                        
                        if (context == null)
                                context = new NullIterator (this, cexpr.NamespaceManager);
-                       BaseIterator iterContext = (BaseIterator) context;
+                       BaseIterator iterContext = ToBaseIterator (context, ctx);
                        iterContext.NamespaceManager = ctx;
                        return cexpr.EvaluateNodeSet (iterContext);
                }
@@ -288,8 +333,7 @@ namespace System.Xml.XPath
                        
                        if (context == null)
                                context = new NullIterator (this, cexpr.NamespaceManager);
-                       BaseIterator iterContext = (BaseIterator) context;
-                       iterContext.NamespaceManager = ctx;
+                       BaseIterator iterContext = ToBaseIterator (context, ctx);
                        return cexpr.EvaluateString (iterContext);
                }
 
@@ -301,7 +345,7 @@ namespace System.Xml.XPath
                        
                        if (context == null)
                                context = new NullIterator (this, cexpr.NamespaceManager);
-                       BaseIterator iterContext = (BaseIterator) context;
+                       BaseIterator iterContext = ToBaseIterator (context, ctx);
                        iterContext.NamespaceManager = ctx;
                        return cexpr.EvaluateNumber (iterContext);
                }
@@ -314,7 +358,7 @@ namespace System.Xml.XPath
                        
                        if (context == null)
                                context = new NullIterator (this, cexpr.NamespaceManager);
-                       BaseIterator iterContext = (BaseIterator) context;
+                       BaseIterator iterContext = ToBaseIterator (context, ctx);
                        iterContext.NamespaceManager = ctx;
                        return cexpr.EvaluateBoolean (iterContext);
                }
@@ -550,7 +594,7 @@ namespace System.Xml.XPath
                        return Select (expr, null);
                }
                
-               internal virtual XPathNodeIterator Select (XPathExpression expr, NSResolver ctx)
+               internal XPathNodeIterator Select (XPathExpression expr, NSResolver ctx)
                {
                        CompiledExpression cexpr = (CompiledExpression) expr;
                        if (ctx == null)
@@ -578,9 +622,50 @@ namespace System.Xml.XPath
                        return SelectTest (new NodeNameTest (axis, qname, true));
                }
 
+               static IEnumerable EnumerateChildren (XPathNavigator n, XPathNodeType type)
+               {
+                       if (!n.MoveToFirstChild ())
+                               yield break;
+                       n.MoveToParent ();
+                       XPathNavigator nav = n.Clone ();
+                       nav.MoveToFirstChild ();
+                       XPathNavigator nav2 = null;
+                       do {
+                               if (type == XPathNodeType.All || nav.NodeType == type) {
+                                       if (nav2 == null)
+                                               nav2 = nav.Clone ();
+                                       else
+                                               nav2.MoveTo (nav);
+                                       yield return nav2;
+                               }
+                       } while (nav.MoveToNext ());
+               }
+
                public virtual XPathNodeIterator SelectChildren (XPathNodeType type)
                {
+#if false
                        return SelectTest (new NodeTypeTest (Axes.Child, type));
+#else
+                       return new WrapperIterator (new EnumerableIterator (EnumerateChildren (this, type), 0), null);
+                       // FIXME: make it work i.e. remove dependency on BaseIterator
+//                     return new EnumerableIterator (EnumerateChildren (this, type), 0);
+#endif
+               }
+
+               static IEnumerable EnumerateChildren (XPathNavigator n, string name, string ns)
+               {
+                       if (!n.MoveToFirstChild ())
+                               yield break;
+                       n.MoveToParent ();
+                       XPathNavigator nav = n.Clone ();
+                       nav.MoveToFirstChild ();
+                       XPathNavigator nav2 = nav.Clone ();
+                       do {
+                               if ((name == String.Empty || nav.LocalName == name) && (ns == String.Empty || nav.NamespaceURI == ns)) {
+                                       nav2.MoveTo (nav);
+                                       yield return nav2;
+                               }
+                       } while (nav.MoveToNext ());
                }
 
                public virtual XPathNodeIterator SelectChildren (string name, string namespaceURI)
@@ -590,9 +675,13 @@ namespace System.Xml.XPath
                        if (namespaceURI == null)
                                throw new ArgumentNullException ("namespaceURI");
 
+#if false
                        Axes axis = Axes.Child;
                        XmlQualifiedName qname = new XmlQualifiedName (name, namespaceURI);
                        return SelectTest (new NodeNameTest (axis, qname, true));
+#else
+                       return new WrapperIterator (new EnumerableIterator (EnumerateChildren (this, name, namespaceURI), 0), null);
+#endif
                }
 
                public virtual XPathNodeIterator SelectDescendants (XPathNodeType type, bool matchSelf)
@@ -628,12 +717,12 @@ namespace System.Xml.XPath
 
 #if NET_2_0
 
-               public virtual bool CheckValidity (XmlSchemaSet schemas, ValidationEventHandler handler)
+               public virtual bool CheckValidity (XmlSchemaSet schemas, ValidationEventHandler validationEventHandler)
                {
                        XmlReaderSettings settings = new XmlReaderSettings ();
                        settings.NameTable = NameTable;
                        settings.SetSchemas (schemas);
-                       settings.ValidationEventHandler += handler;
+                       settings.ValidationEventHandler += validationEventHandler;
                        settings.ValidationType = ValidationType.Schema;
                        try {
                                XmlReader r = XmlReader.Create (
@@ -651,13 +740,11 @@ namespace System.Xml.XPath
                        return Clone ();
                }
 
-               [MonoTODO]
-               public virtual object Evaluate (string xpath, IXmlNamespaceResolver nsResolver)
+               public virtual object Evaluate (string xpath, IXmlNamespaceResolver resolver)
                {
-                       return Evaluate (Compile (xpath), null, nsResolver);
+                       return Evaluate (Compile (xpath), null, resolver);
                }
 
-               [MonoTODO]
                public virtual IDictionary<string, string> GetNamespacesInScope (XmlNamespaceScope scope)
                {
                        IDictionary<string, string> table = new Dictionary<string, string> ();
@@ -677,8 +764,14 @@ namespace System.Xml.XPath
                        } while (nav.MoveToNextNamespace (xpscope));
                        return table;
                }
+#endif
 
-               public virtual string LookupNamespace (string prefix)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual string LookupNamespace (string prefix)
                {
                        XPathNavigator nav = Clone ();
                        if (nav.NodeType != XPathNodeType.Element)
@@ -688,7 +781,12 @@ namespace System.Xml.XPath
                        return null;
                }
 
-               public virtual string LookupPrefix (string namespaceUri)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual string LookupPrefix (string namespaceURI)
                {
                        XPathNavigator nav = Clone ();
                        if (nav.NodeType != XPathNodeType.Element)
@@ -696,7 +794,7 @@ namespace System.Xml.XPath
                        if (!nav.MoveToFirstNamespace ())
                                return null;
                        do {
-                               if (nav.Value == namespaceUri)
+                               if (nav.Value == namespaceURI)
                                        return nav.Name;
                        } while (nav.MoveToNextNamespace ());
                        return null;
@@ -712,17 +810,32 @@ namespace System.Xml.XPath
                                return false;
                }
 
-               public virtual bool MoveToChild (XPathNodeType type)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToChild (XPathNodeType type)
                {
                        return MoveTo (SelectChildren (type));
                }
 
-               public virtual bool MoveToChild (string localName, string namespaceURI)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToChild (string localName, string namespaceURI)
                {
                        return MoveTo (SelectChildren (localName, namespaceURI));
                }
 
-               public virtual bool MoveToNext (string localName, string namespaceURI)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToNext (string localName, string namespaceURI)
                {
                        XPathNavigator nav = Clone ();
                        while (nav.MoveToNext ()) {
@@ -735,11 +848,16 @@ namespace System.Xml.XPath
                        return false;
                }
 
-               public virtual bool MoveToNext (XPathNodeType type)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToNext (XPathNodeType type)
                {
                        XPathNavigator nav = Clone ();
                        while (nav.MoveToNext ()) {
-                               if (nav.NodeType == type) {
+                               if (type == XPathNodeType.All || nav.NodeType == type) {
                                        MoveTo (nav);
                                        return true;
                                }
@@ -747,13 +865,23 @@ namespace System.Xml.XPath
                        return false;
                }
 
-               public virtual bool MoveToFollowing (string localName,
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToFollowing (string localName,
                        string namespaceURI)
                {
                        return MoveToFollowing (localName, namespaceURI, null);
                }
 
-               public virtual bool MoveToFollowing (string localName,
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToFollowing (string localName,
                        string namespaceURI, XPathNavigator end)
                {
                        if (localName == null)
@@ -795,12 +923,22 @@ namespace System.Xml.XPath
                        } while (true);
                }
 
-               public virtual bool MoveToFollowing (XPathNodeType type)
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToFollowing (XPathNodeType type)
                {
                        return MoveToFollowing (type, null);
                }
 
-               public virtual bool MoveToFollowing (XPathNodeType type,
+#if NET_2_0
+               public
+#else
+               internal
+#endif
+               virtual bool MoveToFollowing (XPathNodeType type,
                        XPathNavigator end)
                {
                        if (type == XPathNodeType.Root)
@@ -825,21 +963,28 @@ namespace System.Xml.XPath
                                }
                                if (end != null && end.IsSamePosition (nav))
                                        return false;
-                               if (nav.NodeType == type) {
+                               if (type == XPathNodeType.All || nav.NodeType == type) {
                                        MoveTo (nav);
                                        return true;
                                }
                        } while (true);
                }
 
+#if NET_2_0
                public virtual XmlReader ReadSubtree ()
                {
-                       return new XPathNavigatorReader (this);
+                       switch (NodeType) {
+                       case XPathNodeType.Element:
+                       case XPathNodeType.Root:
+                               return new XPathNavigatorReader (this);
+                       default:
+                               throw new InvalidOperationException (String.Format ("NodeType {0} is not supported to read as a subtree of an XPathNavigator.", NodeType));
+                       }
                }
 
-               public virtual XPathNodeIterator Select (string xpath, IXmlNamespaceResolver nsResolver)
+               public virtual XPathNodeIterator Select (string xpath, IXmlNamespaceResolver resolver)
                {
-                       return Select (Compile (xpath), nsResolver);
+                       return Select (Compile (xpath), resolver);
                }
 
                public virtual XPathNavigator SelectSingleNode (string xpath)
@@ -847,10 +992,10 @@ namespace System.Xml.XPath
                        return SelectSingleNode (xpath, null);
                }
 
-               public virtual XPathNavigator SelectSingleNode (string xpath, IXmlNamespaceResolver nsResolver)
+               public virtual XPathNavigator SelectSingleNode (string xpath, IXmlNamespaceResolver resolver)
                {
                        XPathExpression expr = Compile (xpath);
-                       expr.SetContext (nsResolver);
+                       expr.SetContext (resolver);
                        return SelectSingleNode (expr);
                }
 
@@ -863,10 +1008,10 @@ namespace System.Xml.XPath
                                return null;
                }
 
-               [MonoTODO]
-               public override object ValueAs (Type type, IXmlNamespaceResolver nsResolver)
+               // it is not very effective code but should just work
+               public override object ValueAs (Type returnType, IXmlNamespaceResolver nsResolver)
                {
-                       throw new NotImplementedException ();
+                       return new XmlAtomicValue (Value, XmlSchemaSimpleType.XsString).ValueAs (returnType, nsResolver);
                }
 
                public virtual void WriteSubtree (XmlWriter writer)
@@ -874,9 +1019,48 @@ namespace System.Xml.XPath
                        writer.WriteNode (this, false);
                }
 
-               [MonoTODO]
+               static readonly char [] escape_text_chars =
+                               new char [] {'&', '<', '>'};
+               static readonly char [] escape_attr_chars =
+                               new char [] {'"', '&', '<', '>', '\r', '\n'};
+
+               static string EscapeString (string value, bool attr)
+               {
+                       StringBuilder sb = null;
+                       char [] escape = attr ? escape_attr_chars : escape_text_chars;
+                       if (value.IndexOfAny (escape) < 0)
+                               return value;
+                       sb = new StringBuilder (value, value.Length + 10);
+                       if (attr)
+                               sb.Replace ("\"", "&quot;");
+                       sb.Replace ("<", "&lt;");
+                       sb.Replace (">", "&gt;");
+                       if (attr) {
+                               sb.Replace ("\r\n", "&#10;");
+                               sb.Replace ("\r", "&#10;");
+                               sb.Replace ("\n", "&#10;");
+                       }
+                       return sb.ToString ();
+               }
+
                public virtual string InnerXml {
                        get {
+                               switch (NodeType) {
+                               case XPathNodeType.Element:
+                               case XPathNodeType.Root:
+                                       break;
+                               case XPathNodeType.Attribute:
+                               case XPathNodeType.Namespace:
+                                       return EscapeString (Value, true);
+                               case XPathNodeType.Text:
+                               case XPathNodeType.Whitespace:
+                               case XPathNodeType.SignificantWhitespace:
+                                       return String.Empty;
+                               case XPathNodeType.ProcessingInstruction:
+                               case XPathNodeType.Comment:
+                                       return Value;
+                               }
+
                                XmlReader r = ReadSubtree ();
                                r.Read (); // start
                                // skip the element itself (or will reach to 
@@ -885,8 +1069,14 @@ namespace System.Xml.XPath
                                int depth = r.Depth;
                                if (NodeType != XPathNodeType.Root)
                                        r.Read ();
+                               else
+                                       depth = -1; // for Root, it should consume the entire tree, so no depth check is done.
                                StringWriter sw = new StringWriter ();
-                               XmlWriter xtw = XmlWriter.Create (sw);
+                               XmlWriterSettings s = new XmlWriterSettings ();
+                               s.Indent = true;
+                               s.ConformanceLevel = ConformanceLevel.Fragment;
+                               s.OmitXmlDeclaration = true;
+                               XmlWriter xtw = XmlWriter.Create (sw, s);
                                while (!r.EOF && r.Depth > depth)
                                        xtw.WriteNode (r, false);
                                return sw.ToString ();
@@ -907,16 +1097,40 @@ namespace System.Xml.XPath
 
                public virtual string OuterXml {
                        get {
+                               switch (NodeType) {
+                               case XPathNodeType.Attribute:
+                                       return String.Concat (
+                                               Prefix,
+                                               Prefix.Length > 0 ? ":" : String.Empty,
+                                               LocalName,
+                                               "=\"",
+                                               EscapeString (Value, true),
+                                               "\"");
+                               case XPathNodeType.Namespace:
+                                       return String.Concat (
+                                               "xmlns",
+                                               LocalName.Length > 0 ? ":" : String.Empty,
+                                               LocalName,
+                                               "=\"",
+                                               EscapeString (Value, true),
+                                               "\"");
+                               case XPathNodeType.Text:
+                                       return EscapeString (Value, false);
+                               case XPathNodeType.Whitespace:
+                               case XPathNodeType.SignificantWhitespace:
+                                       return Value;
+                               }
+
                                XmlWriterSettings s = new XmlWriterSettings ();
                                s.Indent = true;
                                s.OmitXmlDeclaration = true;
+                               s.ConformanceLevel = ConformanceLevel.Fragment;
                                StringBuilder sb = new StringBuilder ();
                                using (XmlWriter w = XmlWriter.Create (sb, s)) {
                                        WriteSubtree (w);
                                }
                                return sb.ToString ();
                        }
-                       [MonoTODO]
                        set {
                                switch (NodeType) {
                                case XPathNodeType.Root:
@@ -931,14 +1145,12 @@ namespace System.Xml.XPath
                        }
                }
 
-               [MonoTODO]
                public virtual IXmlSchemaInfo SchemaInfo {
                        get {
                                return null;
                        }
                }
 
-               [MonoTODO]
                public override object TypedValue {
                        get {
                                switch (NodeType) {
@@ -989,7 +1201,6 @@ namespace System.Xml.XPath
                        }
                }
 
-               [MonoTODO]
                public override XmlSchemaType XmlType {
                        get {
                                if (SchemaInfo != null)
@@ -1018,31 +1229,30 @@ namespace System.Xml.XPath
                }
 
                public virtual void AppendChild (
-                       string xmlFragments)
+                       string newChild)
                {
-                       AppendChild (CreateFragmentReader (xmlFragments));
+                       AppendChild (CreateFragmentReader (newChild));
                }
 
                public virtual void AppendChild (
-                       XmlReader reader)
+                       XmlReader newChild)
                {
                        XmlWriter w = AppendChild ();
-                       while (!reader.EOF)
-                               w.WriteNode (reader, false);
+                       while (!newChild.EOF)
+                               w.WriteNode (newChild, false);
                        w.Close ();
                }
 
-               [MonoTODO]
                public virtual void AppendChild (
-                       XPathNavigator nav)
+                       XPathNavigator newChild)
                {
-                       AppendChild (new XPathNavigatorReader (nav));
+                       AppendChild (new XPathNavigatorReader (newChild));
                }
 
-               public virtual void AppendChildElement (string prefix, string name, string ns, string value)
+               public virtual void AppendChildElement (string prefix, string localName, string namespaceURI, string value)
                {
                        XmlWriter xw = AppendChild ();
-                       xw.WriteStartElement (prefix, name, ns);
+                       xw.WriteStartElement (prefix, localName, namespaceURI);
                        xw.WriteString (value);
                        xw.WriteEndElement ();
                        xw.Close ();
@@ -1056,7 +1266,6 @@ namespace System.Xml.XPath
                }
 
                // must override it.
-               [MonoTODO ("needs tests")]
                public virtual XmlWriter CreateAttributes ()
                {
                        throw new NotSupportedException ();
@@ -1069,12 +1278,12 @@ namespace System.Xml.XPath
                }
 
                // must override it.
-               public virtual void DeleteRange (XPathNavigator nav)
+               public virtual void DeleteRange (XPathNavigator lastSiblingToDelete)
                {
                        throw new NotSupportedException ();
                }
 
-               public virtual XmlWriter ReplaceRange (XPathNavigator nav)
+               public virtual XmlWriter ReplaceRange (XPathNavigator lastSiblingToReplace)
                {
                        throw new NotSupportedException ();
                }
@@ -1096,22 +1305,21 @@ namespace System.Xml.XPath
                                throw new InvalidOperationException ("Could not move to parent to insert sibling node");
                }
 
-               public virtual void InsertAfter (string xmlFragments)
+               public virtual void InsertAfter (string newSibling)
                {
-                       InsertAfter (CreateFragmentReader (xmlFragments));
+                       InsertAfter (CreateFragmentReader (newSibling));
                }
 
-               public virtual void InsertAfter (XmlReader reader)
+               public virtual void InsertAfter (XmlReader newSibling)
                {
                        using (XmlWriter w = InsertAfter ()) {
-                               w.WriteNode (reader, false);
+                               w.WriteNode (newSibling, false);
                        }
                }
 
-               [MonoTODO]
-               public virtual void InsertAfter (XPathNavigator nav)
+               public virtual void InsertAfter (XPathNavigator newSibling)
                {
-                       InsertAfter (new XPathNavigatorReader (nav));
+                       InsertAfter (new XPathNavigatorReader (newSibling));
                }
 
                public virtual XmlWriter InsertBefore ()
@@ -1119,22 +1327,21 @@ namespace System.Xml.XPath
                        throw new NotSupportedException ();
                }
 
-               public virtual void InsertBefore (string xmlFragments)
+               public virtual void InsertBefore (string newSibling)
                {
-                       InsertBefore (CreateFragmentReader (xmlFragments));
+                       InsertBefore (CreateFragmentReader (newSibling));
                }
 
-               public virtual void InsertBefore (XmlReader reader)
+               public virtual void InsertBefore (XmlReader newSibling)
                {
                        using (XmlWriter w = InsertBefore ()) {
-                               w.WriteNode (reader, false);
+                               w.WriteNode (newSibling, false);
                        }
                }
 
-               [MonoTODO]
-               public virtual void InsertBefore (XPathNavigator nav)
+               public virtual void InsertBefore (XPathNavigator newSibling)
                {
-                       InsertBefore (new XPathNavigatorReader (nav));
+                       InsertBefore (new XPathNavigatorReader (newSibling));
                }
 
                public virtual void InsertElementAfter (string prefix, 
@@ -1162,22 +1369,21 @@ namespace System.Xml.XPath
                                return AppendChild ();
                }
 
-               public virtual void PrependChild (string xmlFragments)
+               public virtual void PrependChild (string newChild)
                {
-                       PrependChild (CreateFragmentReader (xmlFragments));
+                       PrependChild (CreateFragmentReader (newChild));
                }
 
-               public virtual void PrependChild (XmlReader reader)
+               public virtual void PrependChild (XmlReader newChild)
                {
                        using (XmlWriter w = PrependChild ()) {
-                               w.WriteNode (reader, false);
+                               w.WriteNode (newChild, false);
                        }
                }
 
-               [MonoTODO]
-               public virtual void PrependChild (XPathNavigator nav)
+               public virtual void PrependChild (XPathNavigator newChild)
                {
-                       PrependChild (new XPathNavigatorReader (nav));
+                       PrependChild (new XPathNavigatorReader (newChild));
                }
 
                public virtual void PrependChildElement (string prefix, 
@@ -1188,26 +1394,25 @@ namespace System.Xml.XPath
                        }
                }
 
-               public virtual void ReplaceSelf (string xmlFragment)
+               public virtual void ReplaceSelf (string newNode)
                {
-                       ReplaceSelf (CreateFragmentReader (xmlFragment));
+                       ReplaceSelf (CreateFragmentReader (newNode));
                }
 
                // must override it.
-               public virtual void ReplaceSelf (XmlReader reader)
+               public virtual void ReplaceSelf (XmlReader newNode)
                {
                        throw new NotSupportedException ();
                }
 
-               [MonoTODO]
-               public virtual void ReplaceSelf (XPathNavigator navigator)
+               public virtual void ReplaceSelf (XPathNavigator newNode)
                {
-                       ReplaceSelf (new XPathNavigatorReader (navigator));
+                       ReplaceSelf (new XPathNavigatorReader (newNode));
                }
 
                // Dunno the exact purpose, but maybe internal editor use
                [MonoTODO]
-               public virtual void SetTypedValue (object value)
+               public virtual void SetTypedValue (object typedValue)
                {
                        throw new NotSupportedException ();
                }
@@ -1217,7 +1422,6 @@ namespace System.Xml.XPath
                        throw new NotSupportedException ();
                }
 
-               [MonoTODO]
                private void DeleteChildren ()
                {
                        switch (NodeType) {