diff --git a/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs b/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs index ebfb1f75f35..d5de08609ff 100644 --- a/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs +++ b/src/Xamarin.Android.Build.Tasks/Tasks/ReadLibraryProjectImportsCache.cs @@ -24,17 +24,15 @@ // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. #nullable enable -using System; using System.IO; -using System.Linq; using System.Xml.Linq; -using Microsoft.Build.Utilities; using Microsoft.Build.Framework; using Microsoft.Android.Build.Tasks; namespace Xamarin.Android.Tasks { - public class ReadLibraryProjectImportsCache : AndroidTask + [MSBuildMultiThreadableTask] + public class ReadLibraryProjectImportsCache : MultithreadedAndroidTask { public override string TaskPrefix => "RLC"; @@ -66,11 +64,11 @@ public override bool RunTask () { Log.LogDebugMessage ("Task ReadLibraryProjectImportsCache"); Log.LogDebugMessage (" CacheFile: {0}", CacheFile); - if (!File.Exists (CacheFile)) { + if (CacheFile.IsNullOrEmpty () || !File.Exists (TaskEnvironment.GetAbsolutePath (CacheFile))) { Log.LogDebugMessage ("{0} does not exist. No Project Library Imports found", CacheFile); return !Log.HasLoggedErrors; } - var doc = XDocument.Load (CacheFile); + var doc = XDocument.Load (TaskEnvironment.GetAbsolutePath (CacheFile)); Jars = doc.GetPathsAsTaskItems ("Jars", "Jar"); ResolvedAssetDirectories = doc.GetPathsAsTaskItems ("ResolvedAssetDirectories", "ResolvedAssetDirectory"); ResolvedResourceDirectories = doc.GetPathsAsTaskItems ("ResolvedResourceDirectories", "ResolvedResourceDirectory"); @@ -84,4 +82,3 @@ public override bool RunTask () } } } - diff --git a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs index ba7ae2c2763..dbc65453b7a 100644 --- a/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs +++ b/src/Xamarin.Android.Build.Tasks/Tests/Xamarin.Android.Build.Tests/Tasks/MultiThreadedMigrationTests.cs @@ -8,6 +8,7 @@ using Microsoft.Build.Framework; using Mono.Cecil; using NUnit.Framework; +using Xamarin.Android.Tasks; using Xamarin.ProjectTools; namespace Xamarin.Android.Build.Tests @@ -15,6 +16,40 @@ namespace Xamarin.Android.Build.Tests [TestFixture] public class MultiThreadedMigrationTests { + [Test] + public void ReadLibraryProjectImportsCacheUsesProjectDirectory () + { + var directory = Path.Combine (Path.GetTempPath (), Path.GetRandomFileName ()); + Directory.CreateDirectory (directory); + try { + var cacheFile = Path.GetRandomFileName (); + File.WriteAllText (Path.Combine (directory, cacheFile), "a.jar"); + var task = new ReadLibraryProjectImportsCache { + BuildEngine = new MockBuildEngine (TextWriter.Null), + TaskEnvironment = TaskEnvironment.CreateWithProjectDirectoryAndEnvironment (directory, new Dictionary ()), + CacheFile = cacheFile, + }; + Assert.IsTrue (task.Execute ()); + Assert.AreEqual ("a.jar", task.Jars?.Single ().ItemSpec); + } finally { + Directory.Delete (directory, recursive: true); + } + } + + [TestCase ("")] + [TestCase ("missing.xml")] + public void ReadLibraryProjectImportsCacheMissingFile (string cacheFile) + { + var task = new ReadLibraryProjectImportsCache { + BuildEngine = new MockBuildEngine (TextWriter.Null), + TaskEnvironment = TaskEnvironment.CreateWithProjectDirectoryAndEnvironment ( + Path.Combine (Path.GetTempPath (), Path.GetRandomFileName ()), new Dictionary ()), + CacheFile = cacheFile, + }; + Assert.IsTrue (task.Execute ()); + Assert.IsNull (task.Jars); + } + [Test] public void MigratedTasksHaveDirectAttribute () {