private static Namespaces GetNamespaces(NamespaceMetrics metrics)
        {
            Namespaces @namespace = new Namespaces();

            @namespace.AddRange(MetricsReportBuilder.GetNamespaceResults(metrics));
            return(@namespace);
        }
 private static IEnumerable <string> CalculateClassCoupling(NamespaceMetrics metrics)
 {
     return((
                from x in metrics.Results.SelectMany <NamespaceMetric, MetricResult>((NamespaceMetric x) => x.Metrics).Where <MetricResult>((MetricResult x) => x.Name == "ClassCoupling").OfType <ClassCouplingMetricResult>().SelectMany <ClassCouplingMetricResult, string>((ClassCouplingMetricResult x) => x.Types).Distinct <string>()
                orderby x
                select x).ToList <string>());
 }
        private static double CalculateMaintainabilityIndex(NamespaceMetrics metrics)
        {
            IEnumerable <double> list = metrics.Results.SelectMany <NamespaceMetric, MetricResult>((NamespaceMetric x) => x.Metrics).Where <MetricResult>((MetricResult x) => x.Name == "MaintainabilityIndex").Select <MetricResult, double>((MetricResult x) => (double)x.Value).ToList <double>();

            if (!list.Any <double>())
            {
                return(100);
            }
            return(Math.Round(list.Sum() / (double)list.Count <double>()));
        }
        private int CalculateDepthOfInheritance(NamespaceMetrics metrics)
        {
            IEnumerable <int> nums = metrics.Results.SelectMany <NamespaceMetric, MetricResult>((NamespaceMetric x) => x.Metrics).Where <MetricResult>((MetricResult x) => x.Name == "DepthOfInheritance").Select <MetricResult, int>((MetricResult x) => (int)x.Value);

            if (!nums.Any <int>())
            {
                return(0);
            }
            return(nums.Max());
        }
 private static IEnumerable <Namespace> GetNamespaceResults(NamespaceMetrics metrics)
 {
     foreach (NamespaceMetric namespaceMetric in metrics.Results)
     {
         Namespace @namespace = new Namespace();
         @namespace.Name = namespaceMetric.Name;
         Namespace namespace1 = @namespace;
         if (namespaceMetric.Metrics != null)
         {
             namespace1.Add(MetricsReportBuilder.GetMetricsResult(namespaceMetric.Metrics));
         }
         namespace1.Add(MetricsReportBuilder.GetTypesResult(namespaceMetric.TypeMetrics));
         yield return(namespace1);
     }
 }
Exemple #6
0
        public ProjectMetric(string name, IEnumerable <INamespaceMetric> namespaceMetrics, IEnumerable <string> referencedProjects, double relationalCohesion)
        {
            Name = name;
            RelationalCohesion   = relationalCohesion;
            AssemblyDependencies = referencedProjects.AsArray();
            EfferentCoupling     = AssemblyDependencies.Count();
            NamespaceMetrics     = namespaceMetrics.AsArray();
            LinesOfCode          = NamespaceMetrics.Sum(x => x.LinesOfCode);
            MaintainabilityIndex = LinesOfCode == 0 ? 100 : NamespaceMetrics.Sum(x => x.MaintainabilityIndex * x.LinesOfCode) / LinesOfCode;
            CyclomaticComplexity = LinesOfCode == 0 ? 0 : NamespaceMetrics.Sum(x => x.CyclomaticComplexity * x.LinesOfCode) / LinesOfCode;
            Dependencies         = NamespaceMetrics.SelectMany(x => x.Dependencies).Where(x => x.Assembly != Name).Distinct(Comparer).AsArray();
            Dependants           = Dependencies.Select(x => x.Assembly)
                                   .Distinct()
                                   .AsArray();
            AfferentCoupling = Dependants.Count();
            var typeMetrics = NamespaceMetrics.SelectMany(x => x.TypeMetrics).AsArray();

            Abstractness = typeMetrics.Count(x => x.IsAbstract) / (double)typeMetrics.Length;
        }
        public ModuleMetric Calculate(Project project)
        {
            Compilation      compilation      = ProjectExtensions.GetCompilation(project);
            IModuleSymbol    moduleSymbol     = compilation.Assembly.Modules.FirstOrDefault <IModuleSymbol>();
            NamespaceMetrics namespaceMetric  = ModuleMetricsCalculator.CalculateNamespaceMetrics(project, this.IgnoreGeneratedCode);
            NamespaceMetrics namespaceMetric1 = namespaceMetric;

            if (namespaceMetric == null)
            {
                return(null);
            }
            IEnumerable <string> strs = ModuleMetricsCalculator.CalculateClassCoupling(namespaceMetric1);
            double       num          = ModuleMetricsCalculator.CalculateMaintainabilityIndex(namespaceMetric1);
            int          num1         = ModuleMetricsCalculator.CalculateCyclomaticComplexity(namespaceMetric1);
            int          num2         = this.CalculateDepthOfInheritance(namespaceMetric1);
            int          num3         = ModuleMetricsCalculator.CalculateLinesOfCode(namespaceMetric1);
            int          num4         = namespaceMetric1.Results.Count <NamespaceMetric>();
            int          num5         = ModuleMetricsCalculator.CalculateNumberOfTypes(namespaceMetric1);
            int          num6         = ModuleMetricsCalculator.CalculateNumberOfMethods(namespaceMetric1);
            ModuleMetric moduleMetric = new ModuleMetric();

            moduleMetric.ModuleName       = moduleSymbol.Name;
            moduleMetric.ProjectFile      = project.FilePath ?? string.Empty;
            moduleMetric.AssemblyVersion  = string.Empty;
            moduleMetric.FileVersion      = string.Empty;
            moduleMetric.NamespaceMetrics = namespaceMetric1;
            List <MetricResult> metricResults = new List <MetricResult>();

            moduleMetric.AddMetricResult(new MetricResult()
            {
                Name  = "MaintainabilityIndex",
                Value = num
            });

            moduleMetric.AddMetricResult(new MetricResult
            {
                Name  = "CyclomaticComplexity",
                Value = num1
            });
            moduleMetric.AddMetricResult(new ClassCouplingMetricResult
            {
                Name  = "ClassCoupling",
                Value = strs.Count <string>(),
                Types = strs
            });
            moduleMetric.AddMetricResult(new MetricResult
            {
                Name  = "DepthOfInheritance",
                Value = num2
            });
            moduleMetric.AddMetricResult(new MetricResult
            {
                Name  = "LinesOfCode",
                Value = num3
            });
            moduleMetric.AddMetricResult(new MetricResult
            {
                Name  = "NumberOfNamespaces",
                Value = num4
            });
            moduleMetric.AddMetricResult(new MetricResult
            {
                Name  = "NumberOfTypes",
                Value = num5
            });
            moduleMetric.AddMetricResult(new MetricResult
            {
                Name  = "NumberOfMethods",
                Value = num6
            });
            return(moduleMetric);
        }
 private static int CalculateNumberOfTypes(NamespaceMetrics namespaceMetrics)
 {
     return(namespaceMetrics.Results.Sum <NamespaceMetric>((NamespaceMetric metric) => metric.TypeMetrics.Results.Count <TypeMetric>()));
 }
 private static int CalculateNumberOfMethods(NamespaceMetrics namespaceMetrics)
 {
     return(namespaceMetrics.Results.Sum <NamespaceMetric>((NamespaceMetric namespaceMetric) => namespaceMetric.TypeMetrics.Results.Sum <TypeMetric>((TypeMetric typeMetric) => typeMetric.MemberMetrics.Results.Count <MemberMetric>())));
 }
 private static int CalculateLinesOfCode(NamespaceMetrics metrics)
 {
     return(metrics.Results.SelectMany <NamespaceMetric, MetricResult>((NamespaceMetric x) => x.Metrics).Where <MetricResult>((MetricResult x) => x.Name == "LinesOfCode").Select <MetricResult, int>((MetricResult x) => (int)x.Value).Sum());
 }
 private static int CalculateCyclomaticComplexity(NamespaceMetrics metrics)
 {
     return(metrics.Results.SelectMany <NamespaceMetric, MetricResult>((NamespaceMetric x) => x.Metrics).Where <MetricResult>((MetricResult x) => x.Name == "CyclomaticComplexity").Select <MetricResult, int>((MetricResult x) => (int)x.Value).Sum());
 }