diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompiler.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompiler.cs deleted file mode 100644 index 2ff0be2b9f74..000000000000 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompiler.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Linq; -using System.Collections.Generic; - -using Xamarin.Messaging.Build.Client; -using Microsoft.Build.Framework; - -namespace Xamarin.MacDev.Tasks { - public class FindAotCompiler : FindAotCompilerTaskBase, ITaskCallback, ICancelableTask { - public override bool Execute () - { - bool result; - - if (ShouldExecuteRemotely ()) { - result = new TaskRunner (SessionId, BuildEngine4).RunAsync (this).Result; - } else { - result = base.Execute (); - } - - return result; - } - - public void Cancel () - { - if (ShouldExecuteRemotely ()) - BuildConnection.CancelAsync (BuildEngine4).Wait (); - } - - public bool ShouldCopyToBuildServer (ITaskItem item) - { - return false; - } - - public bool ShouldCreateOutputFile (ITaskItem item) => false; - - public IEnumerable GetAdditionalItemsToBeCopied () => Enumerable.Empty (); - } -} - diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompilerTaskBase.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompilerTaskBase.cs index 14e9f59c4a3d..f2f549b139a1 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompilerTaskBase.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindAotCompilerTaskBase.cs @@ -5,14 +5,14 @@ using Xamarin.Localization.MSBuild; namespace Xamarin.MacDev.Tasks { - public abstract class FindAotCompilerTaskBase : XamarinBuildTask { + public class FindAotCompiler : XamarinBuildTask { [Required] public ITaskItem [] MonoAotCrossCompiler { get; set; } [Output] public string AotCompiler { get; set; } - public override bool Execute () + protected override bool ExecuteLocally () { // If we can't find the AOT compiler path in MonoAotCrossCompiler, evaluate a project file that does know how to find it. // This happens when executing remotely from Windows, because the MonoAotCrossCompiler item group will be empty in that case. diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs index ee4821886cc3..12de4c78724e 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/FindILLink.cs @@ -1,21 +1,15 @@ -using System.Collections.Generic; using System.IO; using System.Linq; using Microsoft.Build.Framework; -using Microsoft.Build.Tasks; using Xamarin.Localization.MSBuild; -using Xamarin.Messaging.Build.Client; namespace Xamarin.MacDev.Tasks { - public class FindILLink : XamarinBuildTask, ITaskCallback, ICancelableTask { + public class FindILLink : XamarinBuildTask { [Output] public string ILLinkPath { get; set; } - public override bool Execute () + protected override bool ExecuteLocally () { - if (this.ShouldExecuteRemotely (SessionId)) - return new TaskRunner (SessionId, BuildEngine4).RunAsync (this).Result; - var targetName = "ComputeILLinkTaskPath"; var target = $@" @@ -35,18 +29,6 @@ public override bool Execute () return !Log.HasLoggedErrors; } - - public IEnumerable GetAdditionalItemsToBeCopied () => Enumerable.Empty (); - - public bool ShouldCopyToBuildServer (ITaskItem item) => false; - - public bool ShouldCreateOutputFile (ITaskItem item) => false; - - public void Cancel () - { - if (ShouldExecuteRemotely ()) - BuildConnection.CancelAsync (BuildEngine4).Wait (); - } } } diff --git a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs index ca62dadf57b9..f931b9ecff46 100644 --- a/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs +++ b/msbuild/Xamarin.MacDev.Tasks/Tasks/XamarinBuildTask.cs @@ -5,10 +5,11 @@ using Microsoft.Build.Framework; using Microsoft.Build.Tasks; using Xamarin.Localization.MSBuild; +using Xamarin.Messaging.Build.Client; using Threading = System.Threading.Tasks; namespace Xamarin.MacDev.Tasks { - public abstract class XamarinBuildTask : XamarinTask { + public abstract class XamarinBuildTask : XamarinTask, ITaskCallback, ICancelableTask { public bool KeepTemporaryOutput { get; set; } [Required] @@ -110,6 +111,27 @@ async Threading.Task ExecuteBuildAsync (string dotnetPath, string projec return File.ReadAllText (outputFile).Trim (); return string.Empty; } + + public override sealed bool Execute () + { + if (this.ShouldExecuteRemotely (SessionId)) + return new TaskRunner (SessionId, BuildEngine4).RunAsync (this).Result; + return ExecuteLocally (); + } + + protected abstract bool ExecuteLocally (); + + public virtual IEnumerable GetAdditionalItemsToBeCopied () => Enumerable.Empty (); + + public virtual bool ShouldCopyToBuildServer (ITaskItem item) => false; + + public virtual bool ShouldCreateOutputFile (ITaskItem item) => false; + + public virtual void Cancel () + { + if (ShouldExecuteRemotely ()) + BuildConnection.CancelAsync (BuildEngine4).Wait (); + } } }