Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2455)

Unified Diff: experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/IDEBuildLogger.cs

Issue 10928195: First round of dead file removal (Closed) Base URL: https://github.com/samclegg/nativeclient-sdk.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/IDEBuildLogger.cs
diff --git a/experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/IDEBuildLogger.cs b/experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/IDEBuildLogger.cs
deleted file mode 100644
index 4e978555e187a0128ebbd1c7f2d57c94722b688d..0000000000000000000000000000000000000000
--- a/experimental/visual_studio_plugin/third_party/Microsoft.VisualStudio.Project/IDEBuildLogger.cs
+++ /dev/null
@@ -1,504 +0,0 @@
-/// Copyright (c) Microsoft Corporation. All rights reserved.
-
-using System;
-using System.CodeDom.Compiler;
-using System.Diagnostics;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.Text;
-using Microsoft.Build.Framework;
-using Microsoft.Build.Utilities;
-using Microsoft.VisualStudio;
-using Microsoft.VisualStudio.Shell;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.Win32;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-
-namespace Microsoft.VisualStudio.Project
-{
-
- /// <summary>
- /// This class implements an MSBuild logger that output events to VS outputwindow and tasklist.
- /// </summary>
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1001:TypesThatOwnDisposableFieldsShouldBeDisposable"), ComVisible(true)]
- internal sealed class IDEBuildLogger : Logger
- {
- #region fields
- // TODO: Remove these constants when we have a version that suppoerts getting the verbosity using automation.
- private string buildVerbosityRegistryRoot = @"Software\Microsoft\VisualStudio\9.0";
- private const string buildVerbosityRegistrySubKey = @"General";
- private const string buildVerbosityRegistryKey = "MSBuildLoggerVerbosity";
- // TODO: Re-enable this constants when we have a version that suppoerts getting the verbosity using automation.
- //private const string EnvironmentCategory = "Environment";
- //private const string ProjectsAndSolutionSubCategory = "ProjectsAndSolution";
- //private const string BuildAndRunPage = "BuildAndRun";
-
- private int currentIndent;
- private IVsOutputWindowPane outputWindowPane;
- private string errorString = SR.GetString(SR.Error, CultureInfo.CurrentUICulture);
- private string warningString = SR.GetString(SR.Warning, CultureInfo.CurrentUICulture);
- private bool isLogTaskDone;
- private TaskProvider taskProvider;
- private IVsHierarchy hierarchy;
- private IServiceProvider serviceProvider;
-
- #endregion
-
- #region properties
- public string WarningString
- {
- get { return this.warningString; }
- set { this.warningString = value; }
- }
- public string ErrorString
- {
- get { return this.errorString; }
- set { this.errorString = value; }
- }
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- public bool IsLogTaskDone
- {
- get { return this.isLogTaskDone; }
- set { this.isLogTaskDone = value; }
- }
- /// <summary>
- /// When building from within VS, setting this will
- /// enable the logger to retrive the verbosity from
- /// the correct registry hive.
- /// </summary>
- internal string BuildVerbosityRegistryRoot
- {
- get { return buildVerbosityRegistryRoot; }
- set { buildVerbosityRegistryRoot = value; }
- }
- /// <summary>
- /// Set to null to avoid writing to the output window
- /// </summary>
- internal IVsOutputWindowPane OutputWindowPane
- {
- get { return outputWindowPane; }
- set { outputWindowPane = value; }
- }
- #endregion
-
- #region ctors
- /// <summary>
- /// Constructor. Inititialize member data.
- /// </summary>
- public IDEBuildLogger(IVsOutputWindowPane output, TaskProvider taskProvider, IVsHierarchy hierarchy)
- {
- if(taskProvider == null)
- throw new ArgumentNullException("taskProvider");
- if(hierarchy == null)
- throw new ArgumentNullException("hierarchy");
-
- this.taskProvider = taskProvider;
- this.outputWindowPane = output;
- this.hierarchy = hierarchy;
- IOleServiceProvider site;
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hierarchy.GetSite(out site));
- this.serviceProvider = new ServiceProvider(site);
- }
- #endregion
-
- #region overridden methods
- /// <summary>
- /// Overridden from the Logger class.
- /// </summary>
- public override void Initialize(IEventSource eventSource)
- {
- if(null == eventSource)
- {
- throw new ArgumentNullException("eventSource");
- }
- eventSource.BuildStarted += new BuildStartedEventHandler(BuildStartedHandler);
- eventSource.BuildFinished += new BuildFinishedEventHandler(BuildFinishedHandler);
- eventSource.ProjectStarted += new ProjectStartedEventHandler(ProjectStartedHandler);
- eventSource.ProjectFinished += new ProjectFinishedEventHandler(ProjectFinishedHandler);
- eventSource.TargetStarted += new TargetStartedEventHandler(TargetStartedHandler);
- eventSource.TargetFinished += new TargetFinishedEventHandler(TargetFinishedHandler);
- eventSource.TaskStarted += new TaskStartedEventHandler(TaskStartedHandler);
- eventSource.TaskFinished += new TaskFinishedEventHandler(TaskFinishedHandler);
- eventSource.CustomEventRaised += new CustomBuildEventHandler(CustomHandler);
- eventSource.ErrorRaised += new BuildErrorEventHandler(ErrorHandler);
- eventSource.WarningRaised += new BuildWarningEventHandler(WarningHandler);
- eventSource.MessageRaised += new BuildMessageEventHandler(MessageHandler);
- }
- #endregion
-
- #region event delegates
- /// <summary>
- /// This is the delegate for error events.
- /// </summary>
- private void ErrorHandler(object sender, BuildErrorEventArgs errorEvent)
- {
- AddToErrorList(
- errorEvent,
- errorEvent.Code,
- errorEvent.File,
- errorEvent.LineNumber,
- errorEvent.ColumnNumber);
- }
-
- /// <summary>
- /// This is the delegate for warning events.
- /// </summary>
- private void WarningHandler(object sender, BuildWarningEventArgs errorEvent)
- {
- AddToErrorList(
- errorEvent,
- errorEvent.Code,
- errorEvent.File,
- errorEvent.LineNumber,
- errorEvent.ColumnNumber);
- }
-
- /// <summary>
- /// Add the error/warning to the error list and potentially to the output window.
- /// </summary>
- [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1800:DoNotCastUnnecessarily")]
- private void AddToErrorList(
- BuildEventArgs errorEvent,
- string errorCode,
- string file,
- int line,
- int column)
- {
- TaskPriority priority = (errorEvent is BuildErrorEventArgs) ? TaskPriority.High : TaskPriority.Normal;
- if(OutputWindowPane != null
- && (this.Verbosity != LoggerVerbosity.Quiet || errorEvent is BuildErrorEventArgs))
- {
- // Format error and output it to the output window
- string message = FormatMessage(errorEvent.Message);
- CompilerError e = new CompilerError(file,
- line,
- column,
- errorCode,
- message);
- e.IsWarning = (errorEvent is BuildWarningEventArgs);
-
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(OutputWindowPane.OutputStringThreadSafe(GetFormattedErrorMessage(e)));
- }
-
- // Add error to task list
- ErrorTask task = new ErrorTask();
- task.Document = file;
- task.Line = line - 1; // The task list does +1 before showing this number.
- task.Column = column;
- task.Text = errorEvent.Message;
- task.Priority = priority;
- task.Category = TaskCategory.BuildCompile;
- task.HierarchyItem = hierarchy;
- task.Navigate += new EventHandler(NavigateTo);
- if(errorEvent is BuildWarningEventArgs)
- task.ErrorCategory = TaskErrorCategory.Warning;
- this.taskProvider.Tasks.Add(task);
- }
-
-
- /// <summary>
- /// This is the delegate for Message event types
- /// </summary>
- private void MessageHandler(object sender, BuildMessageEventArgs messageEvent)
- {
- if(LogAtImportance(messageEvent.Importance))
- {
- LogEvent(sender, messageEvent);
- }
- }
-
- private void NavigateTo(object sender, EventArgs arguments)
- {
- Microsoft.VisualStudio.Shell.Task task = sender as Microsoft.VisualStudio.Shell.Task;
- if(task == null)
- throw new ArgumentException("Sender is not a Microsoft.VisualStudio.Shell.Task", "sender");
-
- // Get the doc data for the task's document
- if(String.IsNullOrEmpty(task.Document))
- return;
-
- IVsUIShellOpenDocument openDoc = serviceProvider.GetService(typeof(IVsUIShellOpenDocument)) as IVsUIShellOpenDocument;
- if(openDoc == null)
- return;
-
- IVsWindowFrame frame;
- IOleServiceProvider sp;
- IVsUIHierarchy hier;
- uint itemid;
- Guid logicalView = VSConstants.LOGVIEWID_Code;
-
- if(Microsoft.VisualStudio.ErrorHandler.Failed(openDoc.OpenDocumentViaProject(task.Document, ref logicalView, out sp, out hier, out itemid, out frame)) || frame == null)
- return;
-
- object docData;
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(frame.GetProperty((int)__VSFPROPID.VSFPROPID_DocData, out docData));
-
- // Get the VsTextBuffer
- VsTextBuffer buffer = docData as VsTextBuffer;
- if(buffer == null)
- {
- IVsTextBufferProvider bufferProvider = docData as IVsTextBufferProvider;
- if(bufferProvider != null)
- {
- IVsTextLines lines;
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(bufferProvider.GetTextBuffer(out lines));
- buffer = lines as VsTextBuffer;
- Debug.Assert(buffer != null, "IVsTextLines does not implement IVsTextBuffer");
- if(buffer == null)
- return;
- }
- }
-
- // Finally, perform the navigation.
- IVsTextManager mgr = serviceProvider.GetService(typeof(VsTextManagerClass)) as IVsTextManager;
- if(mgr == null)
- return;
-
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(mgr.NavigateToLineAndColumn(buffer, ref logicalView, task.Line, task.Column, task.Line, task.Column));
- }
-
- /// <summary>
- /// This is the delegate for BuildStartedHandler events.
- /// </summary>
- private void BuildStartedHandler(object sender, BuildStartedEventArgs buildEvent)
- {
- if(LogAtImportance(MessageImportance.Low))
- {
- LogEvent(sender, buildEvent);
- }
- // Remove all errors and warnings since we are rebuilding
- taskProvider.Tasks.Clear();
- }
-
- /// <summary>
- /// This is the delegate for BuildFinishedHandler events.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="buildEvent"></param>
- private void BuildFinishedHandler(object sender, BuildFinishedEventArgs buildEvent)
- {
- if(LogAtImportance(buildEvent.Succeeded ? MessageImportance.Low :
- MessageImportance.High))
- {
- if(this.outputWindowPane != null)
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(this.outputWindowPane.OutputStringThreadSafe(Environment.NewLine));
- LogEvent(sender, buildEvent);
- }
- }
-
-
- /// <summary>
- /// This is the delegate for ProjectStartedHandler events.
- /// </summary>
- private void ProjectStartedHandler(object sender, ProjectStartedEventArgs buildEvent)
- {
- if(LogAtImportance(MessageImportance.Low))
- {
- LogEvent(sender, buildEvent);
- }
- }
-
- /// <summary>
- /// This is the delegate for ProjectFinishedHandler events.
- /// </summary>
- private void ProjectFinishedHandler(object sender, ProjectFinishedEventArgs buildEvent)
- {
- if(LogAtImportance(buildEvent.Succeeded ? MessageImportance.Low
- : MessageImportance.High))
- {
- LogEvent(sender, buildEvent);
- }
- }
-
- /// <summary>
- /// This is the delegate for TargetStartedHandler events.
- /// </summary>
- private void TargetStartedHandler(object sender, TargetStartedEventArgs buildEvent)
- {
- if(LogAtImportance(MessageImportance.Normal))
- {
- LogEvent(sender, buildEvent);
- }
- ++this.currentIndent;
- }
-
-
- /// <summary>
- /// This is the delegate for TargetFinishedHandler events.
- /// </summary>
- private void TargetFinishedHandler(object sender, TargetFinishedEventArgs buildEvent)
- {
- --this.currentIndent;
- if((IsLogTaskDone) &&
- LogAtImportance(buildEvent.Succeeded ? MessageImportance.Low
- : MessageImportance.High))
- {
- LogEvent(sender, buildEvent);
- }
- }
-
-
- /// <summary>
- /// This is the delegate for TaskStartedHandler events.
- /// </summary>
- private void TaskStartedHandler(object sender, TaskStartedEventArgs buildEvent)
- {
- if(LogAtImportance(MessageImportance.Normal))
- {
- LogEvent(sender, buildEvent);
- }
- ++this.currentIndent;
- }
-
-
- /// <summary>
- /// This is the delegate for TaskFinishedHandler events.
- /// </summary>
- private void TaskFinishedHandler(object sender, TaskFinishedEventArgs buildEvent)
- {
- --this.currentIndent;
- if((IsLogTaskDone) &&
- LogAtImportance(buildEvent.Succeeded ? MessageImportance.Normal
- : MessageImportance.High))
- {
- LogEvent(sender, buildEvent);
- }
- }
-
-
- /// <summary>
- /// This is the delegate for CustomHandler events.
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="buildEvent"></param>
- private void CustomHandler(object sender, CustomBuildEventArgs buildEvent)
- {
- LogEvent(sender, buildEvent);
- }
-
- #endregion
-
- #region helpers
- /// <summary>
- /// This method takes a MessageImportance and returns true if messages
- /// at importance i should be loggeed. Otherwise return false.
- /// </summary>
- private bool LogAtImportance(MessageImportance importance)
- {
- // If importance is too low for current settings, ignore the event
- bool logIt = false;
-
- this.SetVerbosity();
-
- switch(this.Verbosity)
- {
- case LoggerVerbosity.Quiet:
- logIt = false;
- break;
- case LoggerVerbosity.Minimal:
- logIt = (importance == MessageImportance.High);
- break;
- case LoggerVerbosity.Normal:
- // Falling through...
- case LoggerVerbosity.Detailed:
- logIt = (importance != MessageImportance.Low);
- break;
- case LoggerVerbosity.Diagnostic:
- logIt = true;
- break;
- default:
- Debug.Fail("Unknown Verbosity level. Ignoring will cause everything to be logged");
- break;
- }
-
- return logIt;
- }
-
- /// <summary>
- /// This is the method that does the main work of logging an event
- /// when one is sent to this logger.
- /// </summary>
- private void LogEvent(object sender, BuildEventArgs buildEvent)
- {
- // Fill in the Message text
- if(OutputWindowPane != null && !String.IsNullOrEmpty(buildEvent.Message))
- {
- StringBuilder msg = new StringBuilder(this.currentIndent + buildEvent.Message.Length + 1);
- if(this.currentIndent > 0)
- {
- msg.Append('\t', this.currentIndent);
- }
- msg.AppendLine(buildEvent.Message);
- Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(this.OutputWindowPane.OutputStringThreadSafe(msg.ToString()));
- }
- }
-
- /// <summary>
- /// Format error messages for the task list
- /// </summary>
- /// <param name="e"></param>
- /// <returns></returns>
- private string GetFormattedErrorMessage(CompilerError e)
- {
- if(e == null) return String.Empty;
-
- string errCode = (e.IsWarning) ? this.WarningString : this.ErrorString;
- StringBuilder fileRef = new StringBuilder();
-
- if(!string.IsNullOrEmpty(e.FileName))
- {
- fileRef.AppendFormat(CultureInfo.CurrentUICulture, "{0}({1},{2}):",
- e.FileName, e.Line, e.Column);
- }
- fileRef.AppendFormat(CultureInfo.CurrentUICulture, " {0} {1}: {2}", errCode, e.ErrorNumber, e.ErrorText);
-
- return fileRef.ToString();
- }
-
- /// <summary>
- /// Formats the message that is to be output.
- /// </summary>
- /// <param name="message">The message string.</param>
- /// <returns>The new message</returns>
- private static string FormatMessage(string message)
- {
- if(string.IsNullOrEmpty(message))
- {
- return Environment.NewLine;
- }
-
- StringBuilder sb = new StringBuilder(message.Length + Environment.NewLine.Length);
-
- sb.AppendLine(message);
- return sb.ToString();
- }
-
- /// <summary>
- /// Sets the verbosity level.
- /// </summary>
- private void SetVerbosity()
- {
- // TODO: This should be replaced when we have a version that supports automation.
-
- string verbosityKey = String.Format(CultureInfo.InvariantCulture, @"{0}\{1}", BuildVerbosityRegistryRoot, buildVerbosityRegistrySubKey);
- using(RegistryKey subKey = Registry.CurrentUser.OpenSubKey(verbosityKey))
- {
- if(subKey != null)
- {
- object valueAsObject = subKey.GetValue(buildVerbosityRegistryKey);
- if(valueAsObject != null)
- {
- this.Verbosity = (LoggerVerbosity)((int)valueAsObject);
- }
- }
- }
-
- // TODO: Continue this code to get the Verbosity when we have a version that supports automation to get the Verbosity.
- //EnvDTE.DTE dte = this.serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
- //EnvDTE.Properties properties = dte.get_Properties(EnvironmentCategory, ProjectsAndSolutionSubCategory);
- }
- #endregion
- }
-
-}

Powered by Google App Engine
This is Rietveld 408576698