Browse Source

CodeCoverage: Applied SD5 suggestions

pull/343/head
Dragan 12 years ago
parent
commit
6880262042
  1. 23
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageControl.cs
  2. 21
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs
  3. 32
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethod.cs
  4. 19
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs
  5. 4
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageModule.cs
  6. 20
      src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageResults.cs

23
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageControl.cs

@ -19,12 +19,10 @@ @@ -19,12 +19,10 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Windows.Forms.Integration;
using ICSharpCode.AvalonEdit;
using ICSharpCode.AvalonEdit.AddIn;
using ICSharpCode.AvalonEdit.Document;
using ICSharpCode.AvalonEdit.Editing;
using ICSharpCode.AvalonEdit.Highlighting;
using ICSharpCode.Core;
@ -32,7 +30,6 @@ using ICSharpCode.Core.WinForms; @@ -32,7 +30,6 @@ using ICSharpCode.Core.WinForms;
using ICSharpCode.NRefactory;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
namespace ICSharpCode.CodeCoverage
{
@ -236,9 +233,9 @@ namespace ICSharpCode.CodeCoverage @@ -236,9 +233,9 @@ namespace ICSharpCode.CodeCoverage
listView.BeginUpdate();
try {
listView.Items.Clear();
CodeCoverageClassTreeNode classNode = node as CodeCoverageClassTreeNode;
CodeCoverageMethodTreeNode methodNode = node as CodeCoverageMethodTreeNode;
CodeCoveragePropertyTreeNode propertyNode = node as CodeCoveragePropertyTreeNode;
var classNode = node as CodeCoverageClassTreeNode;
var methodNode = node as CodeCoverageMethodTreeNode;
var propertyNode = node as CodeCoveragePropertyTreeNode;
if (classNode != null) {
AddClassTreeNode(classNode);
} else if (methodNode != null) {
@ -253,9 +250,9 @@ namespace ICSharpCode.CodeCoverage @@ -253,9 +250,9 @@ namespace ICSharpCode.CodeCoverage
void UpdateTextEditor(CodeCoverageTreeNode node)
{
CodeCoverageClassTreeNode classNode = node as CodeCoverageClassTreeNode;
CodeCoverageMethodTreeNode methodNode = node as CodeCoverageMethodTreeNode;
CodeCoveragePropertyTreeNode propertyNode = node as CodeCoveragePropertyTreeNode;
var classNode = node as CodeCoverageClassTreeNode;
var methodNode = node as CodeCoverageMethodTreeNode;
var propertyNode = node as CodeCoveragePropertyTreeNode;
if (classNode != null && classNode.Nodes.Count > 0) {
propertyNode = classNode.Nodes[0] as CodeCoveragePropertyTreeNode;
methodNode = classNode.Nodes[0] as CodeCoverageMethodTreeNode;
@ -280,8 +277,8 @@ namespace ICSharpCode.CodeCoverage @@ -280,8 +277,8 @@ namespace ICSharpCode.CodeCoverage
void AddClassTreeNode(CodeCoverageClassTreeNode node)
{
foreach (CodeCoverageTreeNode childNode in node.Nodes) {
CodeCoverageMethodTreeNode method = childNode as CodeCoverageMethodTreeNode;
CodeCoveragePropertyTreeNode property = childNode as CodeCoveragePropertyTreeNode;
var method = childNode as CodeCoverageMethodTreeNode;
var property = childNode as CodeCoveragePropertyTreeNode;
if (method != null) {
AddSequencePoints(method.Method);
} else {
@ -313,7 +310,7 @@ namespace ICSharpCode.CodeCoverage @@ -313,7 +310,7 @@ namespace ICSharpCode.CodeCoverage
void AddSequencePoint(CodeCoverageSequencePoint sequencePoint)
{
ListViewItem item = new ListViewItem(sequencePoint.VisitCount.ToString());
var item = new ListViewItem(sequencePoint.VisitCount.ToString());
item.SubItems.Add(sequencePoint.Line.ToString());
item.SubItems.Add(sequencePoint.Column.ToString());
item.SubItems.Add(sequencePoint.EndLine.ToString());
@ -329,7 +326,7 @@ namespace ICSharpCode.CodeCoverage @@ -329,7 +326,7 @@ namespace ICSharpCode.CodeCoverage
void ListViewItemActivate(object sender, EventArgs e)
{
if (listView.SelectedItems.Count > 0) {
CodeCoverageSequencePoint sequencePoint = (CodeCoverageSequencePoint)listView.SelectedItems[0].Tag;
var sequencePoint = (CodeCoverageSequencePoint)listView.SelectedItems[0].Tag;
if (sequencePoint.Document.Length > 0) {
FileService.JumpToFilePosition(sequencePoint.Document, sequencePoint.Line, sequencePoint.Column);
}

21
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageHighlighter.cs

@ -18,7 +18,6 @@ @@ -18,7 +18,6 @@
using System;
using System.Collections.Generic;
using System.Windows.Media;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.SharpDevelop;
@ -50,7 +49,7 @@ namespace ICSharpCode.CodeCoverage @@ -50,7 +49,7 @@ namespace ICSharpCode.CodeCoverage
return;
}
ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
var markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
if (markerService != null) {
int startOffset = document.PositionToOffset(sequencePoint.Line, sequencePoint.Column);
int endOffset = document.PositionToOffset(sequencePoint.EndLine, sequencePoint.EndColumn);
@ -66,7 +65,7 @@ namespace ICSharpCode.CodeCoverage @@ -66,7 +65,7 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
public void RemoveMarkers(IDocument document)
{
ITextMarkerService markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
var markerService = document.GetService(typeof(ITextMarkerService)) as ITextMarkerService;
if (markerService != null) {
markerService.RemoveAll(IsCodeCoverageTextMarker);
}
@ -74,7 +73,7 @@ namespace ICSharpCode.CodeCoverage @@ -74,7 +73,7 @@ namespace ICSharpCode.CodeCoverage
bool IsCodeCoverageTextMarker(ITextMarker marker)
{
Type type = marker.Tag as Type;
var type = marker.Tag as Type;
return type == typeof(CodeCoverageHighlighter);
}
@ -109,21 +108,15 @@ namespace ICSharpCode.CodeCoverage @@ -109,21 +108,15 @@ namespace ICSharpCode.CodeCoverage
}
public static System.Drawing.Color GetSequencePointBackColor(CodeCoverageSequencePoint sequencePoint) {
if (sequencePoint.VisitCount > 0) {
if ( sequencePoint.BranchCoverage == true ) {
return CodeCoverageOptions.VisitedColor;
}
return CodeCoverageOptions.PartVisitedColor;
if (sequencePoint.VisitCount != 0) {
return sequencePoint.BranchCoverage == true ? CodeCoverageOptions.VisitedColor : CodeCoverageOptions.PartVisitedColor;
}
return CodeCoverageOptions.NotVisitedColor;
}
public static System.Drawing.Color GetSequencePointForeColor(CodeCoverageSequencePoint sequencePoint) {
if (sequencePoint.VisitCount > 0) {
if ( sequencePoint.BranchCoverage == true ) {
return CodeCoverageOptions.VisitedForeColor;
}
return CodeCoverageOptions.PartVisitedForeColor;
if (sequencePoint.VisitCount != 0) {
return sequencePoint.BranchCoverage == true ? CodeCoverageOptions.VisitedForeColor : CodeCoverageOptions.PartVisitedForeColor;
}
return CodeCoverageOptions.NotVisitedForeColor;
}

32
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethod.cs

@ -18,8 +18,6 @@ @@ -18,8 +18,6 @@
using System;
using System.Collections.Generic;
using System.Reflection;
using System.Xml;
using System.Xml.Linq;
using ICSharpCode.Core;
@ -27,11 +25,11 @@ namespace ICSharpCode.CodeCoverage @@ -27,11 +25,11 @@ namespace ICSharpCode.CodeCoverage
{
public class CodeCoverageMethod
{
string name = String.Empty;
string className = String.Empty;
string fullClassName = String.Empty;
string classNamespace = String.Empty;
List<CodeCoverageSequencePoint> sequencePoints = new List<CodeCoverageSequencePoint>();
readonly string name = String.Empty;
readonly string className = String.Empty;
readonly string fullClassName = String.Empty;
readonly string classNamespace = String.Empty;
readonly List<CodeCoverageSequencePoint> sequencePoints = new List<CodeCoverageSequencePoint>();
public CodeCoverageMethod(string name, string className)
{
@ -111,10 +109,7 @@ namespace ICSharpCode.CodeCoverage @@ -111,10 +109,7 @@ namespace ICSharpCode.CodeCoverage
public static string GetRootNamespace(string ns)
{
int index = ns.IndexOf('.');
if (index > 0) {
return ns.Substring(0, index);
}
return ns;
return index > 0 ? ns.Substring(0, index) : ns;
}
public List<CodeCoverageSequencePoint> SequencePoints {
@ -192,10 +187,7 @@ namespace ICSharpCode.CodeCoverage @@ -192,10 +187,7 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
public static string GetFullNamespace(string prefix, string name)
{
if (prefix.Length > 0) {
return String.Concat(prefix, ".", name);
}
return name;
return prefix.Length > 0 ? String.Concat(prefix, ".", name) : name;
}
/// <summary>
@ -207,7 +199,7 @@ namespace ICSharpCode.CodeCoverage @@ -207,7 +199,7 @@ namespace ICSharpCode.CodeCoverage
/// method will return 'XmlEditor' as one of its strings.
/// </remarks>
public static List<string> GetChildNamespaces(List<CodeCoverageMethod> methods, string parentNamespace) {
List<string> items = new List<string>();
var items = new List<string>();
foreach (CodeCoverageMethod method in methods) {
string classNamespace = method.ClassNamespace;
string dottedParentNamespace = parentNamespace + ".";
@ -226,10 +218,10 @@ namespace ICSharpCode.CodeCoverage @@ -226,10 +218,10 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
public static List<CodeCoverageMethod> GetAllMethods(List<CodeCoverageMethod> methods, string namespaceStartsWith)
{
List<CodeCoverageMethod> matchedMethods = new List<CodeCoverageMethod>();
var matchedMethods = new List<CodeCoverageMethod>();
namespaceStartsWith += ".";
foreach (CodeCoverageMethod method in methods) {
if ((method.ClassNamespace+".").StartsWith(namespaceStartsWith)) {
if ((method.ClassNamespace + ".").StartsWith(namespaceStartsWith, StringComparison.Ordinal)) {
matchedMethods.Add(method);
}
}
@ -241,7 +233,7 @@ namespace ICSharpCode.CodeCoverage @@ -241,7 +233,7 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
public static List<CodeCoverageMethod> GetMethods(List<CodeCoverageMethod> methods, string ns, string className)
{
List<CodeCoverageMethod> matchedMethods = new List<CodeCoverageMethod>();
var matchedMethods = new List<CodeCoverageMethod>();
foreach (CodeCoverageMethod method in methods) {
if (method.ClassName == className && method.ClassNamespace == ns) {
matchedMethods.Add(method);
@ -252,7 +244,7 @@ namespace ICSharpCode.CodeCoverage @@ -252,7 +244,7 @@ namespace ICSharpCode.CodeCoverage
public static List<string> GetClassNames(List<CodeCoverageMethod> methods, string ns)
{
List<string> names = new List<string>();
var names = new List<string>();
foreach (CodeCoverageMethod method in methods) {
if (method.ClassNamespace == ns && !names.Contains(method.ClassName)) {
names.Add(method.ClassName);

19
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageMethodElement.cs

@ -29,8 +29,8 @@ namespace ICSharpCode.CodeCoverage @@ -29,8 +29,8 @@ namespace ICSharpCode.CodeCoverage
{
public class CodeCoverageMethodElement
{
XElement element;
CodeCoverageResults results;
readonly XElement element;
readonly CodeCoverageResults results;
/// <summary>Enables CodeCoverage.Test to compile</summary>
/// <param name="element">XMLElement</param>
@ -310,11 +310,13 @@ namespace ICSharpCode.CodeCoverage @@ -310,11 +310,13 @@ namespace ICSharpCode.CodeCoverage
// ie: static methods start sequence point "{" contains compiler generated branches
// 3) Exclude Contract class (EnsuresOnThrow/Assert/Assume is inside method body)
// 4) Exclude NUnit Assert(.Throws) class
const string assert = "Assert";
const string contract = "Contract";
if (sp.Content == "in" || sp.Content == "{" || sp.Content == "}" ||
sp.Content.StartsWith("Assert.") ||
sp.Content.StartsWith("Assert ") ||
sp.Content.StartsWith("Contract.") ||
sp.Content.StartsWith("Contract ")
sp.Content.StartsWith(assert + ".", StringComparison.Ordinal) ||
sp.Content.StartsWith(assert + " ", StringComparison.Ordinal) ||
sp.Content.StartsWith(contract + ".", StringComparison.Ordinal) ||
sp.Content.StartsWith(contract + " ", StringComparison.Ordinal)
) {
sp.BranchCoverage = true;
continue; // skip
@ -378,10 +380,7 @@ namespace ICSharpCode.CodeCoverage @@ -378,10 +380,7 @@ namespace ICSharpCode.CodeCoverage
string GetMethodName()
{
XElement nameElement = element.Element("Name");
if (nameElement != null) {
return GetMethodName(nameElement.Value);
}
return String.Empty;
return nameElement != null ? GetMethodName(nameElement.Value) : String.Empty;
}
string GetMethodName(string methodSignature)

4
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageModule.cs

@ -23,7 +23,7 @@ namespace ICSharpCode.CodeCoverage @@ -23,7 +23,7 @@ namespace ICSharpCode.CodeCoverage
{
public class CodeCoverageModule : ICodeCoverageWithVisits
{
string name = String.Empty;
readonly string name = String.Empty;
List<CodeCoverageMethod> methods = new List<CodeCoverageMethod>();
List<string> rootNamespaces;
@ -78,7 +78,7 @@ namespace ICSharpCode.CodeCoverage @@ -78,7 +78,7 @@ namespace ICSharpCode.CodeCoverage
public List<CodeCoverageSequencePoint> GetSequencePoints(string fileName)
{
List<CodeCoverageSequencePoint> sequencePoints = new List<CodeCoverageSequencePoint>();
var sequencePoints = new List<CodeCoverageSequencePoint>();
foreach (CodeCoverageMethod method in methods) {
sequencePoints.AddRange(method.GetSequencePoints(fileName));
}

20
src/AddIns/Analysis/CodeCoverage/Project/Src/CodeCoverageResults.cs

@ -29,9 +29,9 @@ namespace ICSharpCode.CodeCoverage @@ -29,9 +29,9 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
public class CodeCoverageResults
{
List<CodeCoverageModule> modules = new List<CodeCoverageModule>();
Dictionary<string, string> fileNames = new Dictionary<string, string>();
Dictionary<string, string> assemblies = new Dictionary<string, string>();
readonly List<CodeCoverageModule> modules = new List<CodeCoverageModule>();
readonly Dictionary<string, string> fileNames = new Dictionary<string, string>();
readonly Dictionary<string, string> assemblies = new Dictionary<string, string>();
public CodeCoverageResults(string fileName)
: this(new StreamReader(fileName, true))
@ -50,7 +50,7 @@ namespace ICSharpCode.CodeCoverage @@ -50,7 +50,7 @@ namespace ICSharpCode.CodeCoverage
public List<CodeCoverageSequencePoint> GetSequencePoints(string fileName)
{
List<CodeCoverageSequencePoint> sequencePoints = new List<CodeCoverageSequencePoint>();
var sequencePoints = new List<CodeCoverageSequencePoint>();
foreach (CodeCoverageModule module in modules) {
sequencePoints.AddRange(module.GetSequencePoints(fileName));
}
@ -63,7 +63,7 @@ namespace ICSharpCode.CodeCoverage @@ -63,7 +63,7 @@ namespace ICSharpCode.CodeCoverage
void ReadResults(XContainer reader)
{
IEnumerable<XElement> modules = reader.Descendants("Module").Where(m => m.Attribute("skippedDueTo") == null);
var modules = reader.Descendants("Module").Where(m => m.Attribute("skippedDueTo") == null);
foreach (XElement file in reader.Descendants("File")) {
AddFileName(file);
}
@ -79,7 +79,6 @@ namespace ICSharpCode.CodeCoverage @@ -79,7 +79,6 @@ namespace ICSharpCode.CodeCoverage
assembly.Elements("Classes").Elements("Class").Where(
c =>
!c.Element("FullName").Value.Contains("__") &&
//!c.Element("FullName").Value.Contains("<") &&
c.Attribute("skippedDueTo") == null).Select(
c => c.Element("FullName").Value).Distinct().OrderBy(name => name);
foreach (string className in classNames) {
@ -130,7 +129,7 @@ namespace ICSharpCode.CodeCoverage @@ -130,7 +129,7 @@ namespace ICSharpCode.CodeCoverage
/// </summary>
CodeCoverageMethod AddMethod(CodeCoverageModule module, string className, XElement reader)
{
CodeCoverageMethod method = new CodeCoverageMethod(className, reader, this);
var method = new CodeCoverageMethod(className, reader, this);
if (!method.Name.Contains("__")) {
module.Methods.Add(method);
}
@ -163,12 +162,9 @@ namespace ICSharpCode.CodeCoverage @@ -163,12 +162,9 @@ namespace ICSharpCode.CodeCoverage
return GetDictionaryValue(assemblies, id);
}
string GetDictionaryValue(Dictionary<string, string> dictionary, string key)
string GetDictionaryValue(IReadOnlyDictionary<string, string> dictionary, string key)
{
if (dictionary.ContainsKey(key)) {
return dictionary[key];
}
return String.Empty;
return dictionary.ContainsKey(key) ? dictionary[key] : String.Empty;
}
/// <summary>

Loading…
Cancel
Save