Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/monodevelop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriain holmes <iain@xamarin.com>2018-02-15 17:59:02 +0300
committeriain holmes <iain@xamarin.com>2018-02-15 18:18:24 +0300
commit3400406c7c6b53db23746e7011b9f4b915a6b09f (patch)
treece268d3769a32fe063cddeff973729a96985754a /main/src/core/MonoDevelop.Ide/MonoDevelop.Ide.Gui.Components
parent62e173d4f6bd89d93374b2142ede549d39a8be24 (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.cs34
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.");