diff options
Diffstat (limited to 'mcs/class/Microsoft.Build/Microsoft.Build.Execution/HostServices.cs')
-rw-r--r-- | mcs/class/Microsoft.Build/Microsoft.Build.Execution/HostServices.cs | 109 |
1 files changed, 81 insertions, 28 deletions
diff --git a/mcs/class/Microsoft.Build/Microsoft.Build.Execution/HostServices.cs b/mcs/class/Microsoft.Build/Microsoft.Build.Execution/HostServices.cs index 2389bdf330..e68755affe 100644 --- a/mcs/class/Microsoft.Build/Microsoft.Build.Execution/HostServices.cs +++ b/mcs/class/Microsoft.Build/Microsoft.Build.Execution/HostServices.cs @@ -26,42 +26,95 @@ // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. // -using Microsoft.Build.Framework; using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Build.Framework; namespace Microsoft.Build.Execution { - public class HostServices - { - public ITaskHost GetHostObject (string projectFile, string targetName, string taskName) - { - throw new NotImplementedException (); - } + public class HostServices + { + class HostObjectRegistration + { + public string ProjectFile { get; set; } + public string TargetName { get; set; } + public string TaskName { get; set; } + public ITaskHost HostObject { get; set; } + } + + readonly List<HostObjectRegistration> hosts = new List<HostObjectRegistration> (); + readonly Dictionary<string,NodeAffinity> node_affinities = new Dictionary<string, NodeAffinity> (); + + HostObjectRegistration GetHostRegistration (string projectFile, string targetName, string taskName) + { + if (projectFile == null) + throw new ArgumentNullException ("projectFile"); + if (targetName == null) + throw new ArgumentNullException ("targetName"); + if (taskName == null) + throw new ArgumentNullException ("taskName"); + return hosts.FirstOrDefault (h => + string.Equals (projectFile, h.ProjectFile, StringComparison.OrdinalIgnoreCase) && + string.Equals (targetName, h.TargetName, StringComparison.OrdinalIgnoreCase) && + string.Equals (taskName, h.TaskName, StringComparison.OrdinalIgnoreCase)); + } + + public ITaskHost GetHostObject (string projectFile, string targetName, string taskName) + { + var reg = GetHostRegistration (projectFile, targetName, taskName); + return reg != null ? reg.HostObject : null; + } - public NodeAffinity GetNodeAffinity (string projectFile) - { - throw new NotImplementedException (); - } + public NodeAffinity GetNodeAffinity (string projectFile) + { + if (projectFile == null) + throw new ArgumentNullException ("projectFile"); + NodeAffinity na; + return node_affinities.TryGetValue (projectFile, out na) ? na : NodeAffinity.Any; + } + + IEnumerable<HostObjectRegistration> GetRegistrationsByProject (string project) + { + return hosts.Where (h => string.Equals (project, h.ProjectFile, StringComparison.OrdinalIgnoreCase)); + } - public void OnRenameProject (string oldFullPath, string newFullPath) - { - throw new NotImplementedException (); - } + public void OnRenameProject (string oldFullPath, string newFullPath) + { + if (oldFullPath == null) + throw new ArgumentNullException ("oldFullPath"); + if (newFullPath == null) + throw new ArgumentNullException ("newFullPath"); + foreach (var reg in GetRegistrationsByProject (oldFullPath)) + reg.ProjectFile = newFullPath; + } - public void RegisterHostObject (string projectFile, string targetName, string taskName, ITaskHost hostObject) - { - throw new NotImplementedException (); - } + public void RegisterHostObject (string projectFile, string targetName, string taskName, ITaskHost hostObject) + { + if (hostObject == null) + throw new ArgumentNullException ("hostObject"); + var reg = GetHostRegistration (projectFile, targetName, taskName); + if (reg != null) + reg.HostObject = hostObject; + else + hosts.Add (new HostObjectRegistration () { ProjectFile = projectFile, TargetName = targetName, TaskName = taskName, HostObject = hostObject }); + } - public void SetNodeAffinity (string projectFile, NodeAffinity nodeAffinity) - { - throw new NotImplementedException (); - } + public void SetNodeAffinity (string projectFile, NodeAffinity nodeAffinity) + { + if (projectFile == null) + throw new ArgumentNullException ("projectFile"); + node_affinities [projectFile] = nodeAffinity; + } - public void UnregisterProject (string projectFullPath) - { - throw new NotImplementedException (); - } - } + public void UnregisterProject (string projectFullPath) + { + if (projectFullPath == null) + throw new ArgumentNullException ("projectFullPath"); + var removed = GetRegistrationsByProject (projectFullPath).ToArray (); + foreach (var r in removed) + hosts.Remove (r); + } + } } |