[xbuild] Fix warnings.
[mono.git] / mcs / class / Microsoft.Build.Engine / Microsoft.Build.BuildEngine / BuildChoose.cs
index 240718478eac0a6b684b64a0a29847133ecc7c99..53725110f80f87e692164f4cd3d46144747e6dda 100644 (file)
@@ -36,14 +36,45 @@ namespace Microsoft.Build.BuildEngine {
                
                BuildWhen       otherwise;
                //Project               project;
+               //ImportedProject       importedProject;
                //XmlElement    xmlElement;
                List <BuildWhen>        whens;
                
                public BuildChoose (XmlElement xmlElement, Project project)
+                       : this (xmlElement, project, null)
+               {
+               }
+
+               internal BuildChoose (XmlElement xmlElement, Project project, ImportedProject importedProject)
                {
                        //this.xmlElement = xmlElement;
                        //this.project = project;
+                       //this.importedProject = importedProject;
                        this.whens = new List <BuildWhen> ();
+
+                       foreach (XmlNode xn in xmlElement.ChildNodes) {
+                               if (!(xn is XmlElement))
+                                       continue;
+
+                               XmlElement xe = (XmlElement)xn;
+
+                               if (xe.Name == "When") {
+                                       if (otherwise != null)
+                                               throw new InvalidProjectFileException ("The 'Otherwise' element must be last in a 'Choose' element.");
+                                       if (xe.Attributes.GetNamedItem ("Condition") == null)
+                                               throw new InvalidProjectFileException ("The 'When' element requires a 'Condition' attribute.");
+                                       BuildWhen bw = new BuildWhen (xe, project);
+                                       whens.Add (bw);
+                               } else if (xe.Name == "Otherwise") {
+                                       if (this.whens.Count == 0)
+                                               throw new InvalidProjectFileException ("At least one 'When' element must occur in a 'Choose' element.");
+                                       
+                                       otherwise = new BuildWhen (xe, project);
+                               }
+                       }
+
+                       DefinedInFileName = importedProject != null ? importedProject.FullFileName :
+                                               project != null ? project.FullFileName : null;
                }
                
                public void Evaluate ()
@@ -64,6 +95,8 @@ namespace Microsoft.Build.BuildEngine {
                        get { return whens; }
                        set { whens = value; }
                }
+
+               internal string DefinedInFileName { get; private set; }
        }
 }