1 using System; 2 3 4 namespace Microsoft.Build.Framework 5 { 6 [Serializable] 7 public class BuildEventContext 8 { 9 static readonly Random rnd = new Random (); 10 11 public static BuildEventContext Invalid = new BuildEventContext ( 12 InvalidSubmissionId, 13 InvalidNodeId, 14 InvalidProjectInstanceId, 15 InvalidTargetId, 16 InvalidProjectContextId, 17 InvalidTaskId); 18 NewInstance()19 internal static BuildEventContext NewInstance () 20 { 21 return new BuildEventContext (rnd.Next (), rnd.Next (), rnd.Next (), rnd.Next ()); 22 } 23 BuildEventContext(int nodeId, int targetId, int projectContextId, int taskId)24 public BuildEventContext (int nodeId, int targetId, int projectContextId, int taskId) 25 : this (nodeId, rnd.Next (), targetId, projectContextId, taskId) 26 { 27 } 28 BuildEventContext(int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId)29 public BuildEventContext (int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId) 30 : this (rnd.Next (), nodeId, projectInstanceId, projectContextId, targetId, taskId) 31 { 32 } 33 BuildEventContext(int submissionId, int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId)34 public BuildEventContext (int submissionId, int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId) 35 { 36 SubmissionId = submissionId; 37 NodeId = nodeId; 38 ProjectInstanceId = projectInstanceId; 39 TargetId = targetId; 40 ProjectContextId = projectContextId; 41 TaskId = taskId; 42 } 43 44 public const int InvalidSubmissionId = -1; 45 public const int InvalidNodeId = -2; 46 public const int InvalidProjectInstanceId = -1; 47 public const int InvalidTargetId = -1; 48 public const int InvalidProjectContextId = -2; 49 public const int InvalidTaskId = -1; 50 51 public int SubmissionId { get; private set; } 52 public int NodeId { get; private set; } 53 public int ProjectInstanceId { get; private set; } 54 public int TargetId { get; private set; } 55 public int ProjectContextId { get; private set; } 56 public int TaskId { get; private set; } 57 58 // MSDN document says "true if the references are equal, false otherwise." but that doesn't make sense. Equals(object obj)59 public override bool Equals (object obj) 60 { 61 var o = obj as BuildEventContext; 62 return (object) o != null && 63 o.NodeId == NodeId && 64 o.ProjectContextId == ProjectContextId && 65 o.ProjectInstanceId == ProjectInstanceId && 66 o.SubmissionId == SubmissionId && 67 o.TargetId == TargetId && 68 o.TaskId == TaskId; 69 } 70 GetHashCode()71 public override int GetHashCode () 72 { 73 return 74 (NodeId << 5) + 75 (ProjectContextId << 4) + 76 (ProjectInstanceId << 3) + 77 (SubmissionId << 2) + 78 (TargetId << 1) + 79 TaskId; 80 } 81 operator ==(BuildEventContext left, BuildEventContext right)82 public static bool operator == (BuildEventContext left, BuildEventContext right) 83 { 84 return (object) left == null ? (object)right == null : left.Equals (right); 85 } 86 operator !=(BuildEventContext left, BuildEventContext right)87 public static bool operator != (BuildEventContext left, BuildEventContext right) 88 { 89 return (object) left == null ? (object)right != null : !left.Equals (right); 90 } 91 } 92 } 93 94 95