PageRenderTime 53ms CodeModel.GetById 27ms RepoModel.GetById 1ms app.codeStats 0ms

/MSBuild/Microsoft/Build/Shared/EventArgsFormatting.cs

#
C# | 150 lines | 138 code | 12 blank | 0 comment | 35 complexity | a0dc0676eadc2f2668cc77c0f55291d2 MD5 | raw file
Possible License(s): Apache-2.0, LGPL-3.0
  1. namespace Microsoft.Build.Shared
  2. {
  3. using Microsoft.Build.Framework;
  4. using System;
  5. using System.Globalization;
  6. using System.Text;
  7. internal static class EventArgsFormatting
  8. {
  9. private static readonly string[] newLines = new string[] { "\r\n", "\n" };
  10. internal static string EscapeCarriageReturn(string stringWithCarriageReturn)
  11. {
  12. if (!string.IsNullOrEmpty(stringWithCarriageReturn))
  13. {
  14. return stringWithCarriageReturn.Replace("\r", @"\r");
  15. }
  16. return stringWithCarriageReturn;
  17. }
  18. internal static string FormatEventMessage(BuildErrorEventArgs e)
  19. {
  20. return FormatEventMessage(e, false);
  21. }
  22. internal static string FormatEventMessage(BuildWarningEventArgs e)
  23. {
  24. return FormatEventMessage(e, false);
  25. }
  26. internal static string FormatEventMessage(BuildErrorEventArgs e, bool removeCarriageReturn)
  27. {
  28. Microsoft.Build.Shared.ErrorUtilities.VerifyThrowArgumentNull(e, "e");
  29. return FormatEventMessage("error", e.Subcategory, removeCarriageReturn ? EscapeCarriageReturn(e.Message) : e.Message, e.Code, e.File, null, e.LineNumber, e.EndLineNumber, e.ColumnNumber, e.EndColumnNumber, e.ThreadId);
  30. }
  31. internal static string FormatEventMessage(BuildWarningEventArgs e, bool removeCarriageReturn)
  32. {
  33. Microsoft.Build.Shared.ErrorUtilities.VerifyThrowArgumentNull(e, "e");
  34. return FormatEventMessage("warning", e.Subcategory, removeCarriageReturn ? EscapeCarriageReturn(e.Message) : e.Message, e.Code, e.File, null, e.LineNumber, e.EndLineNumber, e.ColumnNumber, e.EndColumnNumber, e.ThreadId);
  35. }
  36. internal static string FormatEventMessage(BuildErrorEventArgs e, bool removeCarriageReturn, bool showProjectFile)
  37. {
  38. Microsoft.Build.Shared.ErrorUtilities.VerifyThrowArgumentNull(e, "e");
  39. return FormatEventMessage("error", e.Subcategory, removeCarriageReturn ? EscapeCarriageReturn(e.Message) : e.Message, e.Code, e.File, showProjectFile ? e.ProjectFile : null, e.LineNumber, e.EndLineNumber, e.ColumnNumber, e.EndColumnNumber, e.ThreadId);
  40. }
  41. internal static string FormatEventMessage(BuildWarningEventArgs e, bool removeCarriageReturn, bool showProjectFile)
  42. {
  43. Microsoft.Build.Shared.ErrorUtilities.VerifyThrowArgumentNull(e, "e");
  44. return FormatEventMessage("warning", e.Subcategory, removeCarriageReturn ? EscapeCarriageReturn(e.Message) : e.Message, e.Code, e.File, showProjectFile ? e.ProjectFile : null, e.LineNumber, e.EndLineNumber, e.ColumnNumber, e.EndColumnNumber, e.ThreadId);
  45. }
  46. internal static string FormatEventMessage(string category, string subcategory, string message, string code, string file, int lineNumber, int endLineNumber, int columnNumber, int endColumnNumber, int threadId)
  47. {
  48. return FormatEventMessage(category, subcategory, message, code, file, null, lineNumber, endLineNumber, columnNumber, endColumnNumber, threadId);
  49. }
  50. internal static string FormatEventMessage(string category, string subcategory, string message, string code, string file, string projectFile, int lineNumber, int endLineNumber, int columnNumber, int endColumnNumber, int threadId)
  51. {
  52. StringBuilder builder = new StringBuilder();
  53. if ((file == null) || (file.Length == 0))
  54. {
  55. builder.Append("MSBUILD : ");
  56. }
  57. else
  58. {
  59. builder.Append("{1}");
  60. if (lineNumber == 0)
  61. {
  62. builder.Append(" : ");
  63. }
  64. else if (columnNumber == 0)
  65. {
  66. if (endLineNumber == 0)
  67. {
  68. builder.Append("({2}): ");
  69. }
  70. else
  71. {
  72. builder.Append("({2}-{7}): ");
  73. }
  74. }
  75. else if (endLineNumber == 0)
  76. {
  77. if (endColumnNumber == 0)
  78. {
  79. builder.Append("({2},{3}): ");
  80. }
  81. else
  82. {
  83. builder.Append("({2},{3}-{8}): ");
  84. }
  85. }
  86. else if (endColumnNumber == 0)
  87. {
  88. builder.Append("({2}-{7},{3}): ");
  89. }
  90. else
  91. {
  92. builder.Append("({2},{3},{7},{8}): ");
  93. }
  94. }
  95. if ((subcategory != null) && (subcategory.Length != 0))
  96. {
  97. builder.Append("{9} ");
  98. }
  99. builder.Append("{4} ");
  100. if (code == null)
  101. {
  102. builder.Append(": ");
  103. }
  104. else
  105. {
  106. builder.Append("{5}: ");
  107. }
  108. if (message != null)
  109. {
  110. builder.Append("{6}");
  111. }
  112. if ((projectFile != null) && !string.Equals(projectFile, file))
  113. {
  114. builder.Append(" [{10}]");
  115. }
  116. if (message == null)
  117. {
  118. message = string.Empty;
  119. }
  120. string format = builder.ToString();
  121. string[] strArray = SplitStringOnNewLines(message);
  122. StringBuilder builder2 = new StringBuilder();
  123. for (int i = 0; i < strArray.Length; i++)
  124. {
  125. builder2.Append(string.Format(CultureInfo.CurrentCulture, format, new object[] { threadId, file, lineNumber, columnNumber, category, code, strArray[i], endLineNumber, endColumnNumber, subcategory, projectFile }));
  126. if (i < (strArray.Length - 1))
  127. {
  128. builder2.AppendLine();
  129. }
  130. }
  131. return builder2.ToString();
  132. }
  133. private static string[] SplitStringOnNewLines(string s)
  134. {
  135. return s.Split(newLines, StringSplitOptions.None);
  136. }
  137. }
  138. }