Skip to content

Commit 72b27ae

Browse files
Project
1 parent 8603b03 commit 72b27ae

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+7674
-0
lines changed

MetricsExtractor.sln

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
2+
Microsoft Visual Studio Solution File, Format Version 12.00
3+
# Visual Studio 2013
4+
VisualStudioVersion = 12.0.31101.0
5+
MinimumVisualStudioVersion = 10.0.40219.1
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MetricsExtractor", "MetricsExtractor\MetricsExtractor.csproj", "{9DC6404C-B685-4733-ACB0-94504FD05E64}"
7+
EndProject
8+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MetricsExtractorTests", "MetricsExtractorTests\MetricsExtractorTests.csproj", "{C30CF34D-B32E-4C7B-922C-E1CCB47BA2A2}"
9+
EndProject
10+
Global
11+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
12+
Debug|Any CPU = Debug|Any CPU
13+
Release|Any CPU = Release|Any CPU
14+
EndGlobalSection
15+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
16+
{9DC6404C-B685-4733-ACB0-94504FD05E64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
17+
{9DC6404C-B685-4733-ACB0-94504FD05E64}.Debug|Any CPU.Build.0 = Debug|Any CPU
18+
{9DC6404C-B685-4733-ACB0-94504FD05E64}.Release|Any CPU.ActiveCfg = Release|Any CPU
19+
{9DC6404C-B685-4733-ACB0-94504FD05E64}.Release|Any CPU.Build.0 = Release|Any CPU
20+
{C30CF34D-B32E-4C7B-922C-E1CCB47BA2A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
21+
{C30CF34D-B32E-4C7B-922C-E1CCB47BA2A2}.Debug|Any CPU.Build.0 = Debug|Any CPU
22+
{C30CF34D-B32E-4C7B-922C-E1CCB47BA2A2}.Release|Any CPU.ActiveCfg = Release|Any CPU
23+
{C30CF34D-B32E-4C7B-922C-E1CCB47BA2A2}.Release|Any CPU.Build.0 = Release|Any CPU
24+
EndGlobalSection
25+
GlobalSection(SolutionProperties) = preSolution
26+
HideSolutionNode = FALSE
27+
EndGlobalSection
28+
EndGlobal

MetricsExtractor.v2.ncrunchsolution

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<SolutionConfiguration>
2+
<FileVersion>1</FileVersion>
3+
<InferProjectReferencesUsingAssemblyNames>false</InferProjectReferencesUsingAssemblyNames>
4+
<AllowParallelTestExecution>false</AllowParallelTestExecution>
5+
<AllowTestsToRunInParallelWithThemselves>true</AllowTestsToRunInParallelWithThemselves>
6+
<FrameworkUtilisationTypeForNUnit>UseDynamicAnalysis</FrameworkUtilisationTypeForNUnit>
7+
<FrameworkUtilisationTypeForGallio>UseStaticAnalysis</FrameworkUtilisationTypeForGallio>
8+
<FrameworkUtilisationTypeForMSpec>UseStaticAnalysis</FrameworkUtilisationTypeForMSpec>
9+
<FrameworkUtilisationTypeForMSTest>UseStaticAnalysis</FrameworkUtilisationTypeForMSTest>
10+
<FrameworkUtilisationTypeForXUnitV2>UseStaticAnalysis</FrameworkUtilisationTypeForXUnitV2>
11+
<MetricsExclusionList>
12+
</MetricsExclusionList>
13+
</SolutionConfiguration>

MetricsExtractor/App.config

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<configuration>
3+
<startup>
4+
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
5+
</startup>
6+
</configuration>

MetricsExtractor/ClassRank.cs

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace MetricsExtractor
2+
{
3+
public enum ClassRank
4+
{
5+
A = 100,
6+
B = 84,
7+
C = 68,
8+
D = 52,
9+
E = 36,
10+
F = 20
11+
}
12+
}

MetricsExtractor/ClassRanking.cs

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
namespace MetricsExtractor
2+
{
3+
public class ClassRanking
4+
{
5+
public ClassRanking(string className, ClassRank rank)
6+
{
7+
ClassName = className;
8+
Rank = rank;
9+
}
10+
11+
public string ClassName { get; private set; }
12+
13+
public ClassRank Rank { get; private set; }
14+
}
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Xml.Serialization;
2+
3+
namespace MetricsExtractor.CodeMetrics
4+
{
5+
/// <remarks />
6+
[XmlType(AnonymousType = true), XmlRoot(Namespace = "", IsNullable = false)]
7+
public class CodeMetricsReport
8+
{
9+
/// <remarks />
10+
[XmlArrayItem("Target", IsNullable = false)]
11+
public Target[] Targets { get; set; }
12+
13+
/// <remarks />
14+
[XmlAttribute]
15+
public double Version { get; set; }
16+
}
17+
}
+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
using System.Xml.Serialization;
4+
5+
namespace MetricsExtractor.CodeMetrics
6+
{
7+
/// <remarks />
8+
[XmlType(AnonymousType = true)]
9+
public class Member
10+
{
11+
/// <remarks />
12+
[XmlArrayItem("Metric", IsNullable = false)]
13+
public Metric[] Metrics { get; set; }
14+
15+
[XmlIgnore]
16+
public Dictionary<MetricKind, double> MetricsDic
17+
{
18+
get
19+
{
20+
return Metrics.ToDictionary(x => x.Kind, x => x.Value);
21+
}
22+
}
23+
24+
/// <remarks />
25+
[XmlAttribute]
26+
public string Name { get; set; }
27+
28+
/// <remarks />
29+
[XmlAttribute]
30+
public string File { get; set; }
31+
32+
/// <remarks />
33+
[XmlAttribute]
34+
public ushort Line { get; set; }
35+
36+
/// <remarks />
37+
[XmlIgnore]
38+
public bool LineSpecified { get; set; }
39+
}
40+
}
+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System.Text.RegularExpressions;
2+
using System.Xml.Serialization;
3+
4+
namespace MetricsExtractor.CodeMetrics
5+
{
6+
/// <remarks />
7+
[XmlType(AnonymousType = true)]
8+
public class Metric
9+
{
10+
[XmlAttribute("Name")]
11+
public MetricKind Kind { get; set; }
12+
13+
/// <remarks />
14+
[XmlAttribute("Value")]
15+
public string StringValue { get; set; }
16+
17+
public double Value { get { return double.Parse(Regex.Replace(StringValue, @"[^\d]", "")); } }
18+
19+
public override string ToString()
20+
{
21+
return string.Format("{0}: {1}", Kind, Value);
22+
}
23+
}
24+
25+
public enum MetricKind
26+
{
27+
MaintainabilityIndex,
28+
CyclomaticComplexity,
29+
ClassCoupling,
30+
DepthOfInheritance,
31+
LinesOfCode
32+
}
33+
}
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Xml.Serialization;
2+
3+
namespace MetricsExtractor.CodeMetrics
4+
{
5+
/// <remarks />
6+
[XmlType(AnonymousType = true)]
7+
public class Module
8+
{
9+
/// <remarks />
10+
[XmlArrayItem("Metric", IsNullable = false)]
11+
public Metric[] Metrics { get; set; }
12+
13+
/// <remarks />
14+
[XmlArrayItem("Namespace", IsNullable = false)]
15+
public Namespace[] Namespaces { get; set; }
16+
17+
/// <remarks />
18+
[XmlAttribute]
19+
public string Name { get; set; }
20+
21+
/// <remarks />
22+
[XmlAttribute]
23+
public string AssemblyVersion { get; set; }
24+
25+
/// <remarks />
26+
[XmlAttribute]
27+
public string FileVersion { get; set; }
28+
}
29+
}
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System.Xml.Serialization;
2+
3+
namespace MetricsExtractor.CodeMetrics
4+
{
5+
/// <remarks />
6+
[XmlType(AnonymousType = true)]
7+
public class Modules
8+
{
9+
/// <remarks />
10+
public Module Module { get; set; }
11+
}
12+
}
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System.Xml.Serialization;
2+
3+
namespace MetricsExtractor.CodeMetrics
4+
{
5+
/// <remarks />
6+
[XmlType(AnonymousType = true)]
7+
public class Namespace
8+
{
9+
/// <remarks />
10+
[XmlArrayItem("Metric", IsNullable = false)]
11+
public Metric[] Metrics { get; set; }
12+
13+
/// <remarks />
14+
[XmlArrayItem("Type", IsNullable = false)]
15+
public NamespaceType[] Types { get; set; }
16+
17+
/// <remarks />
18+
[XmlAttribute]
19+
public string Name { get; set; }
20+
}
21+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System.Xml.Serialization;
2+
3+
namespace MetricsExtractor.CodeMetrics
4+
{
5+
/// <remarks />
6+
[XmlType(AnonymousType = true)]
7+
public class NamespaceType
8+
{
9+
/// <remarks />
10+
[XmlArrayItem("Metric", IsNullable = false)]
11+
public Metric[] Metrics { get; set; }
12+
13+
/// <remarks />
14+
[XmlArrayItem("Member", IsNullable = false)]
15+
public Member[] Members { get; set; }
16+
17+
/// <remarks />
18+
[XmlAttribute]
19+
public string Name { get; set; }
20+
public string FullName { get { return string.Format("{0}.{1}", Namespace, Name); } }
21+
public string Namespace { get; set; }
22+
23+
public NamespaceType WithNamespace(string @namespace)
24+
{
25+
Namespace = @namespace;
26+
return this;
27+
}
28+
}
29+
}
+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.IO;
2+
using System.Xml.Serialization;
3+
4+
namespace MetricsExtractor.CodeMetrics
5+
{
6+
/// <remarks />
7+
[XmlType(AnonymousType = true)]
8+
public class Target
9+
{
10+
/// <remarks />
11+
public Modules Modules { get; set; }
12+
13+
/// <remarks />
14+
[XmlAttribute]
15+
public string Name { get; set; }
16+
17+
public override string ToString()
18+
{
19+
return Path.GetFileNameWithoutExtension(Name);
20+
}
21+
}
22+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Reflection;
5+
6+
namespace MetricsExtractor
7+
{
8+
public static class DashedParameterSerializer
9+
{
10+
public static T Deserialize<T>(IEnumerable<string> parameters)
11+
{
12+
var instance = Activator.CreateInstance<T>();
13+
14+
var propertyInfos = typeof(T).GetProperties().ToList();
15+
16+
PropertyInfo currentPropertyInfo = null;
17+
foreach (var parameter in parameters)
18+
{
19+
if (parameter.StartsWith("-"))
20+
currentPropertyInfo = propertyInfos.SingleOrDefault(p => p.Name.Equals(parameter.Substring(1), StringComparison.OrdinalIgnoreCase));
21+
else if (currentPropertyInfo != null)
22+
{
23+
if (currentPropertyInfo.PropertyType.IsArray)
24+
currentPropertyInfo.SetValue(instance, parameter.Split(';'));
25+
else
26+
currentPropertyInfo.SetValue(instance, parameter);
27+
}
28+
}
29+
30+
return instance;
31+
}
32+
}
33+
}

MetricsExtractor/EstadoDoProjeto.cs

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System.Collections.Generic;
2+
using System.Linq;
3+
4+
namespace MetricsExtractor
5+
{
6+
public class EstadoDoProjeto
7+
{
8+
public int Manutenibilidade { get; set; }
9+
10+
public int TotalDeMetodos { get; set; }
11+
12+
public IList<MetodoRuim> MetodosRuins { get; set; }
13+
14+
public double PercentualDeMetodosRuins { get { return MetodosRuins.Count / (double)TotalDeMetodos; } }
15+
16+
public double CCAbsoluto { get; set; }
17+
18+
public double CC { get { return CCAbsoluto / LinhasDeCodigo; } }
19+
20+
public double LinhasDeCodigo { get; set; }
21+
22+
public double AcoplamentoAbsoluto { get; set; }
23+
24+
public double Acoplamento { get { return AcoplamentoAbsoluto / LinhasDeCodigo; } }
25+
26+
public double ProfuDeHeranca { get; set; }
27+
28+
public Dictionary<ClassRank, int> TotalDeClassesPorRank { get; set; }
29+
30+
public override string ToString()
31+
{
32+
return string.Join(" - ", GetType().GetProperties().Select(p => string.Format("{0}: {1}", p.Name, p.GetValue(this))));
33+
}
34+
}
35+
}

MetricsExtractor/MetodoComTipo.cs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using MetricsExtractor.CodeMetrics;
2+
3+
namespace MetricsExtractor
4+
{
5+
internal class MetodoComTipo
6+
{
7+
public NamespaceType Tipo { get; set; }
8+
9+
public Member Metodo { get; set; }
10+
}
11+
}

0 commit comments

Comments
 (0)