From 2128c04d82e6eb5011c903603016da679eb02694 Mon Sep 17 00:00:00 2001 From: Stephane Delcroix Date: Fri, 24 Aug 2018 14:27:17 +0200 Subject: [PATCH] [Xamainr.Android.Build.Tasks] reduce task time - simplify linq queries in ConvertResourceCases --- .../Tasks/ConvertResourcesCases.cs | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ConvertResourcesCases.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ConvertResourcesCases.cs index c17520854f0..64030691239 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ConvertResourcesCases.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ConvertResourcesCases.cs @@ -53,18 +53,25 @@ void FixupResources (ITaskItem item, Dictionary acwMap) { var resdir = item.ItemSpec; // Find all the xml and axml files - var xmls = new[] { resdir } - .Concat (Directory.EnumerateDirectories (resdir, "*", SearchOption.AllDirectories) - .Except (Directory.EnumerateDirectories (resdir, "color*", SearchOption.TopDirectoryOnly)) - .Except (Directory.EnumerateDirectories (resdir, "raw*", SearchOption.TopDirectoryOnly))) - .SelectMany (dir => Directory.EnumerateFiles (dir, "*.xml") - .Concat (Directory.EnumerateFiles (dir, "*.axml"))); + var xmls = new List (); + var colorDir = Path.Combine (resdir, "color"); + var rawDir = Path.Combine (resdir, "raw"); + foreach (var file in Directory.GetFiles (resdir, "*.*xml", SearchOption.AllDirectories)) { + if (file.StartsWith (colorDir, StringComparison.Ordinal) || file.StartsWith (rawDir, StringComparison.Ordinal)) + continue; + var ext = Path.GetExtension (file); + if (ext != ".xml" && ext != ".axml") + continue; + xmls.Add (file); + } var lastUpdate = DateTime.MinValue; if (!string.IsNullOrEmpty (AndroidConversionFlagFile) && File.Exists (AndroidConversionFlagFile)) { lastUpdate = File.GetLastWriteTimeUtc (AndroidConversionFlagFile); } Log.LogDebugMessage (" AndroidConversionFlagFile modified: {0}", lastUpdate); + + var resourcedirectories = ResourceDirectories.Where (s => s != item).Select(s => s.ItemSpec).ToArray(); // Fix up each file foreach (string file in xmls) { var srcmodifiedDate = File.GetLastWriteTimeUtc (file); @@ -78,7 +85,7 @@ void FixupResources (ITaskItem item, Dictionary acwMap) MonoAndroidHelper.SetWriteable (tmpdest); try { bool success = AndroidResource.UpdateXmlResource (resdir, tmpdest, acwMap, - ResourceDirectories.Where (s => s != item).Select(s => s.ItemSpec), (t, m) => { + resourcedirectories, (t, m) => { string targetfile = file; if (targetfile.StartsWith (resdir, StringComparison.InvariantCultureIgnoreCase)) { targetfile = file.Substring (resdir.Length).TrimStart (Path.DirectorySeparatorChar);