Merge pull request #704 from jgagnon/master
[mono.git] / mcs / class / Microsoft.Build / Microsoft.Build.Construction / ProjectImportElement.cs
index 894c27b6d6c9227848b7b0079f2f4272749709b9..889534839078d58fc3c076313d779c77cda0f646 100644 (file)
 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 //
 
+using System;
 using System.Xml;
+using Microsoft.Build.Exceptions;
+
+
 namespace Microsoft.Build.Construction
 {
-        public class ProjectImportElement : ProjectElementContainer
+        [System.Diagnostics.DebuggerDisplayAttribute ("Project={Project} Condition={Condition}")]
+        public class ProjectImportElement : ProjectElement
         {
                 internal ProjectImportElement (string project, ProjectRootElement containingProject)
+                        : this(containingProject)
                 {
                         Project = project;
+                }
+
+                internal ProjectImportElement (ProjectRootElement containingProject)
+                {
                         ContainingProject = containingProject;
                 }
 
-                public string Project { get; set; }
+                string project;
+                public string Project { get { return project ?? String.Empty; } set { project = value; } }
 
                 internal override string XmlName {
                         get { return "Import"; }
                 }
 
-                internal override void Save (XmlWriter writer)
+                internal override void SaveValue (XmlWriter writer)
+                {
+                        SaveAttribute (writer, "Project", Project);
+                        base.SaveValue (writer);
+                }
+                
+                internal override void LoadValue (XmlReader reader)
+                {
+                        if (string.IsNullOrWhiteSpace (Project))
+                                throw new InvalidProjectFileException (Location, null, "Project attribute is null or empty on an Import element");
+                        base.LoadValue (reader);
+                }
+
+                internal override void LoadAttribute (string name, string value)
                 {
-                        writer.WriteStartElement (XmlName);
-                        if (!string.IsNullOrWhiteSpace (Project))
-                                writer.WriteAttributeString ("Project", Project);
-                        foreach (var child in Children)
-                                child.Save (writer);
-                        writer.WriteEndElement ();
+                        switch (name) {
+                        case "Project":
+                                Project = value;
+                                break;
+                        default:
+                                base.LoadAttribute (name, value);
+                                break;
+                        }
                 }
         }
 }