diff options
author | iain holmes <iain@xamarin.com> | 2018-02-15 17:59:02 +0300 |
---|---|---|
committer | iain holmes <iain@xamarin.com> | 2018-02-15 18:18:24 +0300 |
commit | 3400406c7c6b53db23746e7011b9f4b915a6b09f (patch) | |
tree | ce268d3769a32fe063cddeff973729a96985754a /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components | |
parent | 62e173d4f6bd89d93374b2142ede549d39a8be24 (diff) |
[IDE] Fix null reference when code uses Log.WriteLine
The TextWriter was using the version of WriteConsoleLogText that takes no monitor. Change it to use the method that takes a monitor, but improve handling for
null monitors.
Fixes VSTS #567563
Diffstat (limited to 'main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components')
-rw-r--r-- | main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/LogView.cs | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/LogView.cs b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/LogView.cs index 4b1d4137ad..f3c7aefd5a 100644 --- a/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/LogView.cs +++ b/main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components/LogView.cs @@ -553,10 +553,10 @@ namespace MonoDevelop.Ide.Gui.Components protected void UnsafeBeginTask (LogViewProgressMonitor monitor, string name, int totalWork) { - var indent = monitor.Indent; - if (!string.IsNullOrEmpty (name)) { - var tag = indent.Indent (); - buffer.TagTable.Add (tag); + if (!string.IsNullOrEmpty (name) && monitor != null) { + var indent = monitor.Indent; + var t = indent.Indent (); + buffer.TagTable.Add (t); indents.Push (name); } else indents.Push (null); @@ -567,14 +567,17 @@ namespace MonoDevelop.Ide.Gui.Components UnsafeAddText (null, Environment.NewLine, null); } - monitor.Marker = buffer.CreateMark (name, buffer.EndIter, false); + var marker = buffer.CreateMark (name, buffer.EndIter, false); + if (monitor != null) { + monitor.Marker = marker; + } UnsafeAddText (null, Environment.NewLine, null); // Move the mark to the line before EndIter, so other text inserted at EndIter // doesn't move this mark. - buffer.MoveMark (monitor.Marker, buffer.GetIterAtOffset (buffer.CharCount - 1)); + buffer.MoveMark (marker, buffer.GetIterAtOffset (buffer.CharCount - 1)); } - + public void BeginTask (string name, int totalWork) { BeginTask (null, name, totalWork); @@ -585,7 +588,7 @@ namespace MonoDevelop.Ide.Gui.Components var bt = new QueuedBeginTask (monitor, name, totalWork); addQueuedUpdate (bt); } - + public void EndTask () { EndTask (null); @@ -600,8 +603,10 @@ namespace MonoDevelop.Ide.Gui.Components protected void UnsafeEndTask (LogViewProgressMonitor monitor) { if (indents.Count > 0 && indents.Pop () != null) { - buffer.TagTable.Remove (monitor.Indent.IndentTag); - monitor.Indent.Unindent (); + if (monitor != null) { + buffer.TagTable.Remove (monitor.Indent.IndentTag); + monitor.Indent.Unindent (); + } } } @@ -736,7 +741,7 @@ namespace MonoDevelop.Ide.Gui.Components public override void Execute (LogView pad) { - pad.UnsafeAddText (Monitor.Marker, Text.ToString (), Tag); + pad.UnsafeAddText (Monitor?.Marker, Text.ToString (), Tag); } public QueuedTextWrite (LogViewProgressMonitor monitor, string text, TextTag tag) @@ -840,7 +845,7 @@ namespace MonoDevelop.Ide.Gui.Components if (clearConsole) outputPad.Clear (); - internalLogger.TextWritten += outputPad.WriteConsoleLogText; + internalLogger.TextWritten += WriteConsoleLogText; console = new LogViewProgressConsole (this); } @@ -879,6 +884,11 @@ namespace MonoDevelop.Ide.Gui.Components base.OnEndTask (name, totalWork, stepWork); } + void WriteConsoleLogText (string text) + { + outputPad.WriteConsoleLogText (this, text); + } + Exception GetDisposedException () { return new InvalidOperationException ("Output progress monitor already disposed."); |