Author: msierad
Date: 2006-12-11 08:45:48 -0500 (Mon, 11 Dec 2006)
New Revision: 69320

Modified:
   
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
   
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
   trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
   
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
   trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
   
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/TaskEngine.cs
Log:
2006-12-11  Marek Sieradzki  <[EMAIL PROTECTED]>

        * TaskEngine.cs, ItemReference.cs: Use IDictionary <string,
        BuildItemGroup> not IDictionary.

        * BuildItemGroup.cs, BuildItem.cs: Evaluate even if condition was
        evaluated to false because we want to add every item to
        Project.EvaluatedItemsByNameIgnoringCondition.

        * Project.cs (Build): Don't throw an exception just return false.
        (GetEvaluatedProperty): Avoid NullReferenceException.
        (SetProjectExtensions): Implemented.



Modified: 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs
===================================================================
--- 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs 
    2006-12-11 13:40:52 UTC (rev 69319)
+++ 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItem.cs 
    2006-12-11 13:45:48 UTC (rev 69320)
@@ -184,12 +184,11 @@
                        if (Include == String.Empty)
                                throw new InvalidProjectFileException ("Item 
must have Include attribute.");
                        
-                       foreach (XmlElement xe in xmlElement.ChildNodes) {
+                       foreach (XmlElement xe in xmlElement.ChildNodes)
                                this.SetMetadata (xe.Name, xe.InnerText);
-                       }
                }
 
-               internal void Evaluate ()
+               internal void Evaluate (bool evaluatedTo)
                {
                        DirectoryScanner directoryScanner;
                        OldExpression includeExpr, excludeExpr;
@@ -218,24 +217,38 @@
                        directoryScanner.Scan ();
                        
                        foreach (string matchedFile in 
directoryScanner.MatchedFilenames) {
-                               AddEvaluatedItem (matchedFile);
+                               AddEvaluatedItem (evaluatedTo, matchedFile);
                        }
                }
                
-               private void AddEvaluatedItem (string itemSpec)
+               private void AddEvaluatedItem (bool evaluatedTo, string 
itemSpec)
                {
                        Project project = this.parentItemGroup.Project;
-                       
+                       BuildItemGroup big;                     
                        BuildItem bi = new BuildItem (this);
                        bi.finalItemSpec = itemSpec;
-                       project.EvaluatedItems.AddItem (bi);
-                       if (project.EvaluatedItemsByName.Contains (bi.name) == 
false) {
-                               BuildItemGroup big = new BuildItemGroup (null, 
project);
-                               project.EvaluatedItemsByName.Add (bi.name, big);
+
+                       if (evaluatedTo) {
+                               project.EvaluatedItems.AddItem (bi);
+       
+                               if (!project.EvaluatedItemsByName.ContainsKey 
(bi.name)) {
+                                       big = new BuildItemGroup (null, 
project);
+                                       project.EvaluatedItemsByName.Add 
(bi.name, big);
+                               } else {
+                                       big = project.EvaluatedItemsByName 
[bi.name];
+                               }
+
                                big.AddItem (bi);
+                       }
+
+                       if 
(!project.EvaluatedItemsByNameIgnoringCondition.ContainsKey (bi.name)) {
+                               big = new BuildItemGroup (null, project);
+                               
project.EvaluatedItemsByNameIgnoringCondition.Add (bi.name, big);
                        } else {
-                               ((BuildItemGroup) project.EvaluatedItemsByName 
[bi.name]).AddItem (bi);
+                               big = 
project.EvaluatedItemsByNameIgnoringCondition [bi.name];
                        }
+
+                       big.AddItem (bi);
                }
                
                internal string ConvertToString (OldExpression transform)

Modified: 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
===================================================================
--- 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
        2006-12-11 13:40:52 UTC (rev 69319)
+++ 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/BuildItemGroup.cs
        2006-12-11 13:45:48 UTC (rev 69320)
@@ -73,11 +73,10 @@
                {
                        foreach (BuildItem bi in buildItems) {
                                if (bi.Condition == String.Empty)
-                                       bi.Evaluate ();
+                                       bi.Evaluate (true);
                                else {
                                        ConditionExpression ce = 
ConditionParser.ParseCondition (bi.Condition);
-                                       if (ce.BoolEvaluate (parentProject))
-                                               bi.Evaluate ();
+                                       bi.Evaluate (ce.BoolEvaluate 
(parentProject));
                                }
                        }
                }

Modified: 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog
===================================================================
--- 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog    
    2006-12-11 13:40:52 UTC (rev 69319)
+++ 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ChangeLog    
    2006-12-11 13:45:48 UTC (rev 69320)
@@ -1,3 +1,16 @@
+2006-12-11  Marek Sieradzki  <[EMAIL PROTECTED]>
+
+       * TaskEngine.cs, ItemReference.cs: Use IDictionary <string,
+       BuildItemGroup> not IDictionary.
+
+       * BuildItemGroup.cs, BuildItem.cs: Evaluate even if condition was
+       evaluated to false because we want to add every item to
+       Project.EvaluatedItemsByNameIgnoringCondition.
+
+       * Project.cs (Build): Don't throw an exception just return false.
+       (GetEvaluatedProperty): Avoid NullReferenceException.
+       (SetProjectExtensions): Implemented.
+
 2006-12-08  Marek Sieradzki  <[EMAIL PROTECTED]>
 
        * TaskElement.cs, Xml.cs, ProcessingPass.cs: Removed.

Modified: 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
===================================================================
--- 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
 2006-12-11 13:40:52 UTC (rev 69319)
+++ 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/ItemReference.cs
 2006-12-11 13:45:48 UTC (rev 69320)
@@ -137,8 +137,8 @@
                {
                        if (itemName != String.Empty) {
                                BuildItemGroup big;
-                               if (parentProject.EvaluatedItemsByName.Contains 
(itemName)) {
-                                       big = 
(BuildItemGroup)parentProject.EvaluatedItemsByName [itemName];
+                               if 
(parentProject.EvaluatedItemsByName.ContainsKey (itemName)) {
+                                       big = 
parentProject.EvaluatedItemsByName [itemName];
                                        return big.ConvertToITaskItemArray 
(transform);
                                } else
                                        return null;
@@ -150,8 +150,8 @@
                {
                        if (itemName != String.Empty) {
                                BuildItemGroup big;
-                               if (parentProject.EvaluatedItemsByName.Contains 
(itemName)) {
-                                       big = 
(BuildItemGroup)parentProject.EvaluatedItemsByName [itemName];
+                               if 
(parentProject.EvaluatedItemsByName.ContainsKey (itemName)) {
+                                       big = 
parentProject.EvaluatedItemsByName [itemName];
                                        
                                        return big.ConvertToString (transform, 
separator);
                                } else

Modified: 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs
===================================================================
--- 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs   
    2006-12-11 13:40:52 UTC (rev 69319)
+++ 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/Project.cs   
    2006-12-11 13:45:48 UTC (rev 69320)
@@ -42,7 +42,6 @@
        public class Project {
        
                bool                            buildEnabled;
-               //IDictionary                   conditionedProperties;
                Dictionary <string, List <string>>      conditionedProperties;
                string[]                        defaultTargets;
                Encoding                        encoding;
@@ -197,7 +196,8 @@
                        
                        foreach (string target in targetNames) {
                                if (!targets.Exists (target))
-                                       throw new InvalidOperationException 
(String.Format ("Target {0} does not exist.", target));
+                                       // FIXME: test if it's logged
+                                       return false;
                                
                                if (!targets [target].Build ())
                                        return false;
@@ -220,7 +220,7 @@
                        if (evaluatedItemsByName.ContainsKey (itemName))
                                return evaluatedItemsByName [itemName];
                        else
-                               return null;
+                               return new BuildItemGroup ();
                }
 
                public BuildItemGroup GetEvaluatedItemsByNameIgnoringCondition 
(string itemName)
@@ -228,12 +228,17 @@
                        if (evaluatedItemsByNameIgnoringCondition.ContainsKey 
(itemName))
                                return evaluatedItemsByNameIgnoringCondition 
[itemName];
                        else
-                               return null;
+                               return new BuildItemGroup ();
                }
 
                public string GetEvaluatedProperty (string propertyName)
                {
-                       return (string) evaluatedProperties [propertyName];
+                       if (propertyName == null)
+                               throw new ArgumentNullException 
("propertyName");
+
+                       BuildProperty bp = evaluatedProperties [propertyName];
+
+                       return bp == null ? null : (string) bp;
                }
 
                public string GetProjectExtensions (string id)
@@ -243,7 +248,6 @@
 
                        XmlNode node = xmlDocument.SelectSingleNode 
(String.Format ("/tns:Project/tns:ProjectExtensions/tns:{0}", id), 
XmlNamespaceManager);
 
-                       // FIXME: InnerXml or InnerText?
                        if (node == null)
                                return String.Empty;
                        else
@@ -351,7 +355,6 @@
                        xmlDocument.Save (outTextWriter);
                }
 
-               [MonoTODO]
                public void SetImportedProperty (string propertyName,
                                                 string propertyValue,
                                                 string condition,
@@ -361,7 +364,6 @@
                                
PropertyPosition.UseExistingOrCreateAfterLastPropertyGroup);
                }
 
-               [MonoTODO]
                public void SetImportedProperty (string propertyName,
                                                 string propertyValue,
                                                 string condition,
@@ -383,10 +385,34 @@
                        throw new NotImplementedException ();
                }
 
-               [MonoTODO]
                public void SetProjectExtensions (string id, string xmlText)
                {
-                       throw new NotImplementedException ();
+                       XmlNode projectExtensions, node;
+
+                       if (id == null || id == String.Empty || xmlText == null)
+                               return;
+
+                       projectExtensions = xmlDocument.SelectSingleNode 
("/tns:Project/tns:ProjectExtensions", XmlNamespaceManager);
+                       
+                       
+                       if (projectExtensions == null) {
+                               projectExtensions = xmlDocument.CreateElement 
("ProjectExtensions", XmlNamespace);
+                               xmlDocument.DocumentElement.AppendChild 
(projectExtensions);
+
+                               node = xmlDocument.CreateElement (id, 
XmlNamespace);
+                               node.InnerXml = xmlText;
+                               projectExtensions.AppendChild (node);
+                       } else {
+                               node = xmlDocument.SelectSingleNode 
(String.Format ("/tns:Project/tns:ProjectExtensions/tns:{0}", id), 
XmlNamespaceManager);
+
+                               if (node == null) {
+                                       node = xmlDocument.CreateElement (id, 
XmlNamespace);
+                                       projectExtensions.AppendChild (node);
+                               }
+                               
+                               node.InnerXml = xmlText;
+                               
+                       }
                }
                
                [MonoTODO]
@@ -683,11 +709,11 @@
                        get { return evaluatedItemsIgnoringCondition; }
                }
                
-               internal IDictionary EvaluatedItemsByName {
+               internal IDictionary <string, BuildItemGroup> 
EvaluatedItemsByName {
                        get { return evaluatedItemsByName; }
                }
                
-               internal IDictionary EvaluatedItemsByNameIgnoringCondition {
+               internal IDictionary <string, BuildItemGroup> 
EvaluatedItemsByNameIgnoringCondition {
                        get { return evaluatedItemsByNameIgnoringCondition; }
                }
 

Modified: 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/TaskEngine.cs
===================================================================
--- 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/TaskEngine.cs
    2006-12-11 13:40:52 UTC (rev 69319)
+++ 
trunk/mcs/class/Microsoft.Build.Engine/Microsoft.Build.BuildEngine/TaskEngine.cs
    2006-12-11 13:45:48 UTC (rev 69320)
@@ -152,8 +152,8 @@
                {
                        BuildItemGroup newItems = CollectItemGroup 
(propertyInfo, o, itemName);
                        
-                       if (parentProject.EvaluatedItemsByName.Contains 
(itemName)) {
-                               BuildItemGroup big = (BuildItemGroup) 
parentProject.EvaluatedItemsByName [itemName];
+                       if (parentProject.EvaluatedItemsByName.ContainsKey 
(itemName)) {
+                               BuildItemGroup big = 
parentProject.EvaluatedItemsByName [itemName];
                                big.Clear ();
                                parentProject.EvaluatedItemsByName.Remove 
(itemName);
                                parentProject.EvaluatedItemsByName.Add 
(itemName, newItems);

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to