From 603d50d8b9fe7980b5f6c1a41b0475394ee8b832 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Mon, 23 Aug 2010 21:11:09 +0000 Subject: [PATCH] Handle sequence points with no filename when opening a file from the Code Coverage window. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6443 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Project/Src/CodeCoverageClassTreeNode.cs | 36 ++++++++++++------- .../Project/Src/CodeCoverageMethodTreeNode.cs | 2 +- .../Project/Src/CodeCoverageTreeNode.cs | 23 +++++++++++- 3 files changed, 47 insertions(+), 14 deletions(-) diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageClassTreeNode.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageClassTreeNode.cs index 5060b34cd7..21dcddbe99 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageClassTreeNode.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageClassTreeNode.cs @@ -20,22 +20,34 @@ namespace ICSharpCode.CodeCoverage public override void ActivateItem() { - if (Nodes.Count > 0) { - CodeCoverageMethodTreeNode methodNode = Nodes[0] as CodeCoverageMethodTreeNode; - if (methodNode != null && methodNode.Method.SequencePoints.Count > 0) { - FileService.OpenFile(methodNode.Method.SequencePoints[0].Document); + foreach (CodeCoverageTreeNode node in Nodes) { + CodeCoverageMethodTreeNode methodNode = node as CodeCoverageMethodTreeNode; + CodeCoverageMethodsTreeNode methodsNode = node as CodeCoverageMethodsTreeNode; + + bool openedFile = false; + if (methodNode != null) { + openedFile = OpenFile(methodNode.Method.SequencePoints); + } else if ((methodsNode != null) && (methodsNode.Methods.Count > 0)) { + openedFile = OpenFile(methodsNode.Methods[0].SequencePoints); } - // when the first node is a property: - CodeCoverageMethodsTreeNode methodsNode = Nodes[0] as CodeCoverageMethodsTreeNode; - if (methodsNode != null && methodsNode.Methods.Count > 0) { - var sequencePoints = methodsNode.Methods[0].SequencePoints; - if (sequencePoints != null) { - FileService.OpenFile(sequencePoints[0].Document); - } + + if (openedFile) { + break; } } } + bool OpenFile(List sequencePoints) + { + foreach (CodeCoverageSequencePoint point in sequencePoints) { + if (point.HasDocument()) { + OpenFile(point.Document); + return true; + } + } + return false; + } + protected override void Initialize() { Nodes.Clear(); @@ -51,7 +63,7 @@ namespace ICSharpCode.CodeCoverage } } - // Add properties. + // Add properties.s foreach (CodeCoverageProperty property in properties) { CodeCoveragePropertyTreeNode node = new CodeCoveragePropertyTreeNode(property); node.AddTo(this); diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodTreeNode.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodTreeNode.cs index 6f5f9ed182..b77572417d 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodTreeNode.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodTreeNode.cs @@ -43,7 +43,7 @@ namespace ICSharpCode.CodeCoverage } } - FileService.JumpToFilePosition(firstSequencePoint.Document, line, column); + JumpToFilePosition(firstSequencePoint.Document, line, column); } else if (Parent != null) { ((ExtTreeNode)Parent).ActivateItem(); diff --git a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageTreeNode.cs b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageTreeNode.cs index 78bcd31199..d8cecd5d54 100644 --- a/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageTreeNode.cs +++ b/src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageTreeNode.cs @@ -7,6 +7,8 @@ using System; using System.Drawing; +using System.IO; +using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop.Gui; namespace ICSharpCode.CodeCoverage @@ -135,6 +137,25 @@ namespace ICSharpCode.CodeCoverage { ExtTreeView treeView = (ExtTreeView)TreeView; treeView.SortNodes(Nodes, false); - } + } + + protected void OpenFile(string fileName) + { + if (FileExists(fileName)) { + FileService.OpenFile(fileName); + } + } + + bool FileExists(string fileName) + { + return !String.IsNullOrEmpty(fileName) && File.Exists(fileName); + } + + protected void JumpToFilePosition(string fileName, int line, int column) + { + if (FileExists(fileName)) { + FileService.JumpToFilePosition(fileName, line, column); + } + } } }