Merge pull request #799 from kebby/master
[mono.git] / mcs / class / Microsoft.Build.Tasks / Microsoft.Build.Tasks / Delete.cs
index 195f3dafee046d28092d660c0f08a93436d19b5a..0497fd8550c061f0615a523306577713640719f1 100644 (file)
@@ -28,7 +28,7 @@
 #if NET_2_0
 
 using System;
-using System.Collections;
+using System.Collections.Generic;
 using System.IO;
 using System.Security;
 using Microsoft.Build.Framework;
@@ -36,27 +36,33 @@ using Microsoft.Build.Framework;
 namespace Microsoft.Build.Tasks {
        public sealed class Delete : TaskExtension {
        
-               ITaskItem[]     deletedFiles;
-               ITaskItem[]     files;
+               ITaskItem []    deletedFiles;
+               ITaskItem []    files;
                bool            treatErrorsAsWarnings;
                
                public Delete ()
                {
-                       this.treatErrorsAsWarnings = false;
+                       treatErrorsAsWarnings = false;
                }
 
                public override bool Execute ()
                {
-                       ArrayList temporaryDeletedFiles = new ArrayList ();
+                       if (files.Length == 0)
+                               return true;
+
+                       List <ITaskItem> temporaryDeletedFiles = new List <ITaskItem> ();
                
                        foreach (ITaskItem file in files) {
+                               string path = file.GetMetadata ("FullPath");
+                               if (path == null || !File.Exists (path))
+                                       //skip
+                                       continue;
+
                                try {
-                                       File.Delete (file.GetMetadata ("FullPath"));
+                                       File.Delete (path);
+                                       Log.LogMessage (MessageImportance.Normal, "Deleting file '{0}'", path);
                                        temporaryDeletedFiles.Add (file);
                                }
-                               catch (ArgumentNullException ex) {
-                                       LogException (ex);
-                               }
                                catch (ArgumentException ex) {
                                        LogException (ex);
                                }
@@ -80,51 +86,36 @@ namespace Microsoft.Build.Tasks {
                                }
                        }
                        
-                       deletedFiles = new ITaskItem [temporaryDeletedFiles.Count];
-                       int i = 0;
-                       foreach (ITaskItem file in temporaryDeletedFiles)
-                               deletedFiles [i++] = file;
+                       deletedFiles = temporaryDeletedFiles.ToArray ();
                        
                        return true;
                }
                
-               private void LogException (Exception ex)
+               void LogException (Exception ex)
                {
-                       if (treatErrorsAsWarnings == true)
+                       if (treatErrorsAsWarnings)
                                Log.LogWarningFromException (ex);
                        else
                                Log.LogErrorFromException (ex);
                }
 
                [Output]
-               public ITaskItem[] DeletedFiles {
-                       get {
-                               return deletedFiles;
-                       }
-                       set {
-                               deletedFiles = value;
-                       }
+               public ITaskItem [] DeletedFiles {
+                       get { return deletedFiles; }
+                       set { deletedFiles = value; }
                }
 
                [Required]
-               public ITaskItem[] Files {
-                       get {
-                               return files;
-                       }
-                       set {
-                               files = value;
-                       }
+               public ITaskItem [] Files {
+                       get { return files; }
+                       set { files = value; }
                }
 
                public bool TreatErrorsAsWarnings {
-                       get {
-                               return treatErrorsAsWarnings;
-                       }
-                       set {
-                               treatErrorsAsWarnings = value;
-                       }
+                       get { return treatErrorsAsWarnings; }
+                       set { treatErrorsAsWarnings = value; }
                }
        }
 }
 
-#endif
\ No newline at end of file
+#endif