Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ContractHelper.cs
Go to the documentation of this file.
1#define DEBUG
4
6
7public static class ContractHelper
8{
9 internal static event EventHandler<ContractFailedEventArgs>? InternalContractFailed;
10
11 [DebuggerNonUserCode]
12 public static string? RaiseContractFailedEvent(ContractFailureKind failureKind, string? userMessage, string? conditionText, Exception? innerException)
13 {
14 if (failureKind < ContractFailureKind.Precondition || failureKind > ContractFailureKind.Assume)
15 {
16 throw new ArgumentException(SR.Format(SR.Arg_EnumIllegalVal, failureKind), "failureKind");
17 }
18 string text = "contract failed.";
19 ContractFailedEventArgs contractFailedEventArgs = null;
20 string result;
21 try
22 {
23 text = GetDisplayMessage(failureKind, userMessage, conditionText);
24 EventHandler<ContractFailedEventArgs> internalContractFailed = ContractHelper.InternalContractFailed;
25 if (internalContractFailed != null)
26 {
27 contractFailedEventArgs = new ContractFailedEventArgs(failureKind, text, conditionText, innerException);
28 Delegate[] invocationList = internalContractFailed.GetInvocationList();
29 for (int i = 0; i < invocationList.Length; i++)
30 {
31 EventHandler<ContractFailedEventArgs> eventHandler = (EventHandler<ContractFailedEventArgs>)invocationList[i];
32 try
33 {
34 eventHandler(null, contractFailedEventArgs);
35 }
36 catch (Exception thrownDuringHandler)
37 {
38 contractFailedEventArgs.thrownDuringHandler = thrownDuringHandler;
39 contractFailedEventArgs.SetUnwind();
40 }
41 }
42 if (contractFailedEventArgs.Unwind)
43 {
44 if (innerException == null)
45 {
46 innerException = contractFailedEventArgs.thrownDuringHandler;
47 }
48 throw new ContractException(failureKind, text, userMessage, conditionText, innerException);
49 }
50 }
51 }
52 finally
53 {
54 result = ((contractFailedEventArgs == null || !contractFailedEventArgs.Handled) ? text : null);
55 }
56 return result;
57 }
58
59 [DebuggerNonUserCode]
60 public static void TriggerFailure(ContractFailureKind kind, string? displayMessage, string? userMessage, string? conditionText, Exception? innerException)
61 {
62 if (string.IsNullOrEmpty(displayMessage))
63 {
64 displayMessage = GetDisplayMessage(kind, userMessage, conditionText);
65 }
66 Debug.ContractFailure(displayMessage, string.Empty, GetFailureMessage(kind, null));
67 }
68
69 private static string GetFailureMessage(ContractFailureKind failureKind, string conditionText)
70 {
71 bool flag = !string.IsNullOrEmpty(conditionText);
72 switch (failureKind)
73 {
74 case ContractFailureKind.Assert:
75 if (!flag)
76 {
77 return SR.AssertionFailed;
78 }
79 return SR.Format(SR.AssertionFailed_Cnd, conditionText);
80 case ContractFailureKind.Assume:
81 if (!flag)
82 {
83 return SR.AssumptionFailed;
84 }
85 return SR.Format(SR.AssumptionFailed_Cnd, conditionText);
86 case ContractFailureKind.Precondition:
87 if (!flag)
88 {
90 }
91 return SR.Format(SR.PreconditionFailed_Cnd, conditionText);
92 case ContractFailureKind.Postcondition:
93 if (!flag)
94 {
96 }
97 return SR.Format(SR.PostconditionFailed_Cnd, conditionText);
98 case ContractFailureKind.Invariant:
99 if (!flag)
100 {
101 return SR.InvariantFailed;
102 }
103 return SR.Format(SR.InvariantFailed_Cnd, conditionText);
104 case ContractFailureKind.PostconditionOnException:
105 if (!flag)
106 {
108 }
109 return SR.Format(SR.PostconditionOnExceptionFailed_Cnd, conditionText);
110 default:
111 Contract.Assume(condition: false, "Unreachable code");
112 return SR.AssumptionFailed;
113 }
114 }
115
116 private static string GetDisplayMessage(ContractFailureKind failureKind, string userMessage, string conditionText)
117 {
118 string text = (string.IsNullOrEmpty(conditionText) ? "" : GetFailureMessage(failureKind, conditionText));
119 if (!string.IsNullOrEmpty(userMessage))
120 {
121 return text + " " + userMessage;
122 }
123 return text;
124 }
125}
static void Assume([DoesNotReturnIf(false)] bool condition)
Definition Contract.cs:24
static void ContractFailure(string message, string detailMessage, string failureKindMessage)
Definition Debug.cs:296
static void TriggerFailure(ContractFailureKind kind, string? displayMessage, string? userMessage, string? conditionText, Exception? innerException)
static string GetDisplayMessage(ContractFailureKind failureKind, string userMessage, string conditionText)
static ? string RaiseContractFailedEvent(ContractFailureKind failureKind, string? userMessage, string? conditionText, Exception? innerException)
static string GetFailureMessage(ContractFailureKind failureKind, string conditionText)
static ? EventHandler< ContractFailedEventArgs > InternalContractFailed
static string PostconditionOnExceptionFailed
Definition SR.cs:1818
static string AssumptionFailed_Cnd
Definition SR.cs:1144
static string PostconditionFailed
Definition SR.cs:1814
static string Arg_EnumIllegalVal
Definition SR.cs:144
static string PostconditionOnExceptionFailed_Cnd
Definition SR.cs:1820
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string AssertionFailed_Cnd
Definition SR.cs:1140
static string PreconditionFailed
Definition SR.cs:1822
static string AssumptionFailed
Definition SR.cs:1142
static string AssertionFailed
Definition SR.cs:1138
static string PostconditionFailed_Cnd
Definition SR.cs:1816
static string InvariantFailed
Definition SR.cs:1538
static string PreconditionFailed_Cnd
Definition SR.cs:1824
static string InvariantFailed_Cnd
Definition SR.cs:1540
Definition SR.cs:7