[xbuild]: Fix conditions for <ItemGroup> inside <Target>.
[mono.git] / mcs / class / Microsoft.Build.Engine / Microsoft.Build.BuildEngine / BuildTaskItem.cs
index 4b6925c9876dd6e1423b6ccf9df133aa77ce5739..3fc4f14807d71f264fcbd3559eeb21b4778af1a8 100644 (file)
@@ -31,6 +31,7 @@ namespace Microsoft.Build.BuildEngine
 {
        internal class BuildTaskItem : BuildItem, IBuildTask
        {
+               BuildTaskItemGroup parent;
                Project project;
 
                public bool ContinueOnError {
@@ -40,22 +41,35 @@ namespace Microsoft.Build.BuildEngine
                internal BuildTaskItem (Project project, XmlElement itemElement, BuildTaskItemGroup parentItemGroup)
                        : base (itemElement, parentItemGroup)
                {
+                       this.parent = parentItemGroup;
                        this.project = project;
                }
 
+               bool CheckCondition (string condition)
+               {
+                       if (string.IsNullOrEmpty (condition))
+                               return true;
+                       var ce = ConditionParser.ParseCondition (condition);
+                       return ce.BoolEvaluate (project);
+               }
+
+               bool CheckCondition ()
+               {
+                       return CheckCondition (parent.Condition) && CheckCondition (Condition);
+               }
+
                public bool Execute ()
                {
-                       if (Condition == String.Empty)
-                               Evaluate (project, true);
-                       else {
-                               ConditionExpression ce = ConditionParser.ParseCondition (Condition);
-                               Evaluate (project, ce.BoolEvaluate (project));
-                       }
+                       var condition = CheckCondition ();
+                       Evaluate (project, condition);
                        return true;
                }
                
                public IEnumerable<string> GetAttributes ()
                {
+                       foreach (XmlAttribute attrib in parent.XmlElement.Attributes)
+                               yield return attrib.Value;
+
                        foreach (XmlAttribute attrib in XmlElement.Attributes)
                                yield return attrib.Value;
                }