2 // TaskLoggingHelper.cs: Wrapper aroudn IBuildEngine.
5 // Marek Sieradzki (marek.sieradzki@gmail.com)
7 // (C) 2005 Marek Sieradzki
9 // Permission is hereby granted, free of charge, to any person obtaining
10 // a copy of this software and associated documentation files (the
11 // "Software"), to deal in the Software without restriction, including
12 // without limitation the rights to use, copy, modify, merge, publish,
13 // distribute, sublicense, and/or sell copies of the Software, and to
14 // permit persons to whom the Software is furnished to do so, subject to
15 // the following conditions:
17 // The above copyright notice and this permission notice shall be
18 // included in all copies or substantial portions of the Software.
20 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System.Resources;
34 using Microsoft.Build.Framework;
36 namespace Microsoft.Build.Utilities
38 public class TaskLoggingHelper : MarshalByRefObject
40 IBuildEngine buildEngine;
42 string helpKeywordPrefix;
44 ResourceManager taskResources;
46 public TaskLoggingHelper (ITask taskInstance)
48 this.buildEngine = taskInstance.BuildEngine;
52 public string ExtractMessageCode (string message,
53 out string messageWithoutCodePrefix)
55 messageWithoutCodePrefix = "";
60 public virtual string FormatResourceString (string resourceName,
67 public virtual string FormatString (string unformatted,
73 public void LogError (string message,
74 params object[] messageArgs)
76 BuildErrorEventArgs beea = new BuildErrorEventArgs (
77 null, null, null, 0, 0, 0, 0, message,
78 helpKeywordPrefix, null);
79 buildEngine.LogErrorEvent (beea);
80 hasLoggedErrors = true;
83 public void LogError (string subcategory, string errorCode,
84 string helpKeyword, string file,
85 int lineNumber, int columnNumber,
86 int endLineNumber, int endColumnNumber,
88 params object[] messageArgs)
90 BuildErrorEventArgs beea = new BuildErrorEventArgs (
91 subcategory, errorCode, file, lineNumber,
92 columnNumber, endLineNumber, endColumnNumber,
93 message, helpKeywordPrefix /*it's helpKeyword*/,
94 null /*it's senderName*/);
95 // FIXME: what with messageArgs?
96 buildEngine.LogErrorEvent (beea);
97 hasLoggedErrors = true;
100 public void LogErrorFromException (Exception e)
102 LogErrorFromException (e, false);
105 public void LogErrorFromException (Exception e,
108 StringBuilder sb = new StringBuilder ();
109 sb.Append (e.Message);
110 if (showStackTrace == true)
111 sb.Append (e.StackTrace);
112 BuildErrorEventArgs beea = new BuildErrorEventArgs (
113 null, null, null, 0, 0, 0, 0, sb.ToString (),
114 e.HelpLink, e.Source);
115 buildEngine.LogErrorEvent (beea);
116 hasLoggedErrors = true;
119 public void LogErrorFromResources (string messageResourceName,
120 params object[] messageArgs)
122 LogErrorFromResources (null, null, null, null, 0, 0, 0,
123 0, messageResourceName, null);
126 public void LogErrorFromResources (string subcategoryResourceName,
129 string file, int lineNumber,
133 string messageResourceName,
134 params object[] messageArgs)
136 BuildErrorEventArgs beea = new BuildErrorEventArgs (
137 taskResources.GetString (subcategoryResourceName),
138 errorCode, file, lineNumber, columnNumber,
139 endLineNumber, endColumnNumber,
140 taskResources.GetString (messageResourceName),
142 buildEngine.LogErrorEvent (beea);
143 hasLoggedErrors = true;
146 public void LogErrorWithCodeFromResources (string messageResourceName,
147 params object[] messageArgs)
149 // FIXME: there should be something different than normal
150 // LogErrorFromResources
151 LogErrorFromResources (messageResourceName, messageArgs);
154 public void LogErrorWithCodeFromResources (string subcategoryResourceName,
160 string messageResourceName,
161 params object[] messageArgs)
163 // FIXME: there should be something different than normal
164 // LogErrorFromResources
165 LogErrorFromResources (subcategoryResourceName, file,
166 lineNumber, columnNumber, endLineNumber,
167 endColumnNumber, messageResourceName,
171 public void LogMessage (string message,
172 params object[] messageArgs)
174 LogMessage (MessageImportance.Normal, message,
178 public void LogMessage (MessageImportance importance,
180 params object[] messageArgs)
182 BuildMessageEventArgs bmea = new BuildMessageEventArgs (
183 message, helpKeywordPrefix, /*helpKeyword*/
184 null /*sender*/, importance);
185 // FIXME: probably messageArgs contain helpKeyword or
187 buildEngine.LogMessageEvent (bmea);
190 public void LogMessageFromResources (string messageResourceName,
191 params object[] messageArgs)
193 LogMessage (taskResources.GetString (messageResourceName),
197 public void LogMessageFromResources (MessageImportance importance,
198 string messageResourceName,
199 params object[] messageArgs)
201 LogMessage (importance, taskResources.GetString (
202 messageResourceName), messageArgs);
205 public bool LogMessagesFromFile (string filename)
207 return LogMessagesFromFile (filename, MessageImportance.Normal);
210 public bool LogMessagesFromFile (string filename,
211 MessageImportance messageImportance)
214 StreamReader sr = new StreamReader (filename);
215 LogMessage (messageImportance, sr.ReadToEnd (),
220 catch (Exception ex) {
225 public bool LogMessagesFromStream (TextReader stream,
226 MessageImportance messageImportance,
228 // FIXME: what about synchronize
231 LogMessage (messageImportance, stream.ReadToEnd (), null);
234 catch (Exception ex) {
238 // FIXME: should it be done here?
243 public void LogWarning (string message,
244 params object[] messageArgs)
246 // FIXME: what about all the parameters?
247 BuildWarningEventArgs bwea = new BuildWarningEventArgs (
248 null, null, null, 0, 0, 0, 0, message,
249 helpKeywordPrefix, null);
250 buildEngine.LogWarningEvent (bwea);
253 public void LogWarning (string subcategory, string warningCode,
254 string helpKeyword, string file,
255 int lineNumber, int columnNumber,
256 int endLineNumber, int endColumnNumber,
258 params object[] messageArgs)
260 BuildWarningEventArgs bwea = new BuildWarningEventArgs (
261 subcategory, warningCode, file, lineNumber,
262 columnNumber, endLineNumber, endColumnNumber,
263 message, helpKeywordPrefix, null);
264 buildEngine.LogWarningEvent (bwea);
267 public void LogWarningFromException (Exception e)
269 LogWarningFromException (e, false);
272 public void LogWarningFromException (Exception e,
275 StringBuilder sb = new StringBuilder ();
276 sb.Append (e.Message);
278 sb.Append (e.StackTrace);
279 LogWarning (null, null, null, null, 0, 0, 0, 0,
280 sb.ToString (), null);
283 public void LogWarningFromResources (string messageResourceName,
284 params object[] messageArgs)
286 LogWarning (taskResources.GetString (messageResourceName),
290 public void LogWarningFromResources (string subcategoryResourceName,
298 string messageResourceName,
299 params object[] messageArgs)
301 LogWarning (taskResources.GetString (subcategoryResourceName),
302 warningCode, helpKeyword, file, lineNumber,
303 columnNumber, endLineNumber, endColumnNumber,
304 taskResources.GetString (messageResourceName),
308 public void LogWarningWithCodeFromResources (string messageResourceName,
309 params object[] messageArgs)
311 // FIXME: what's different from normal logwarning?
312 LogWarningFromResources (messageResourceName, messageArgs);
315 public void LogWarningWithCodeFromResources (string subcategoryResourceName,
321 string messageResourceName,
322 params object[] messageArgs)
324 LogWarningFromResources (subcategoryResourceName, file,
325 lineNumber, columnNumber, endLineNumber,
326 endColumnNumber, messageResourceName,
330 protected IBuildEngine BuildEngine {
336 public bool HasLoggedErrors {
338 return hasLoggedErrors;
342 public string HelpKeywordPrefix {
344 return helpKeywordPrefix;
347 helpKeywordPrefix = value;
351 protected string TaskName {
357 public ResourceManager TaskResources {
359 return taskResources;
362 taskResources = value;