diff options
author | Lluis Sanchez <lluis@xamarin.com> | 2019-11-15 18:42:21 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-15 18:42:21 +0300 |
commit | cbe8924f8aa63cb0175329190b587b23ba956cbe (patch) | |
tree | d2e08aba544f56ac36439fed2b2fa0b24a00feac | |
parent | f5545da3fd325f2ba7198172cd7a501e11e44e94 (diff) | |
parent | d6f0f14d1834e6bff1fdb378f9d130f184336a29 (diff) |
Merge pull request #9337 from mono/backport-pr-9335-to-release-8.4monodevelop-8.4.0.2535
[release-8.4] [Debugger] Fixed an NRE exception in OVTVController.RemoveValue if no…
2 files changed, 13 insertions, 2 deletions
diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs index 42504aa22a..f0e8816a96 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/Mac/MacObjectValueTreeView.cs @@ -828,6 +828,11 @@ namespace MonoDevelop.Debugger foreach (var row in selectedRows) { var item = (MacObjectValueNode) ItemAtRow ((nint) row); + // The user is only allowed to delete top-level nodes. It doesn't make sense to allow + // deleting child nodes of anything else. + if (!(item.Target.Parent is RootObjectValueNode)) + continue; + nodesToDelete.Add (item.Target); } diff --git a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs index 30801ce85c..13ebca43b2 100644 --- a/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs +++ b/main/src/addins/MonoDevelop.Debugger/MonoDevelop.Debugger/ObjectValue/ObjectValueTreeViewController.cs @@ -299,12 +299,18 @@ namespace MonoDevelop.Debugger void RemoveValue (ObjectValueNode node) { var toplevel = node.Parent is RootObjectValueNode; - int index = node.Parent.Children.IndexOf (node); + int index; + + if (node.Parent != null) { + index = node.Parent.Children.IndexOf (node); + } else { + index = -1; + } UnregisterNode (node); OnEvaluationCompleted (node, new ObjectValueNode[0]); - if (AllowWatchExpressions && toplevel) + if (AllowWatchExpressions && toplevel && index != -1) ExpressionRemoved?.Invoke (this, new ExpressionRemovedEventArgs (index, node.Name)); } |