コード例 #1
0
 private static IEnumerable <Member> GetMemberResults(MemberMetrics metrics)
 {
     foreach (MemberMetric memberMetric in metrics.Results)
     {
         Member member = new Member();
         member.Name = memberMetric.Name;
         Member member1  = member;
         string codeFile = memberMetric.CodeFile;
         if (codeFile == null)
         {
             codeFile = string.Empty;
         }
         member1.File = codeFile;
         member.Line  = memberMetric.LineNumber;
         Member member2 = member;
         if (memberMetric.Kind == MemberMetricKind.Method)
         {
             member2.Kind = "Method";
         }
         else if (memberMetric.Kind == MemberMetricKind.PropertyAccessor)
         {
             member2.Kind = "Property";
         }
         else if (memberMetric.Kind == MemberMetricKind.EventAccessor)
         {
             member2.Kind = "Event";
         }
         if (memberMetric.Metrics != null)
         {
             member2.Add(MetricsReportBuilder.GetMetricsResult(memberMetric.Metrics));
         }
         yield return(member2);
     }
 }
コード例 #2
0
        private static Members GetMembersResult(MemberMetrics metricsResults)
        {
            Members member = new Members();

            member.AddRange(MetricsReportBuilder.GetMemberResults(metricsResults));
            return(member);
        }
コード例 #3
0
        public MemberMetrics Calculate(TypeDeclarationSyntaxInfo typeNode)
        {
            SyntaxNode root = base.Context.Root;
            MemberCollectorSyntaxWalker memberCollectorSyntaxWalker = new MemberCollectorSyntaxWalker();
            IEnumerable <MemberNode>    members = memberCollectorSyntaxWalker.GetMembers(base.Context.Model, typeNode);
            MemberMetrics memberMetric          = new MemberMetrics()
            {
                Results = this.CalculateMemberMetrics(members).ToList <MemberMetric>().AsReadOnly()
            };

            return(memberMetric);
        }
コード例 #4
0
        private MemberMetrics CalculateMemberMetrics(Compilation compilation, TypeDeclaration typeNodes)
        {
            List <MemberMetric> memberMetrics = new List <MemberMetric>();

            Parallel.ForEach <TypeDeclarationSyntaxInfo>(typeNodes.SyntaxNodes, (TypeDeclarationSyntaxInfo typeNode) => {
                MemberMetrics memberMetric = (new MemberMetricsCalculator(compilation.GetSemanticModel(typeNode.Syntax.SyntaxTree))).Calculate(typeNode);
                memberMetrics.AddRange(memberMetric.Results);
            });
            return(new MemberMetrics()
            {
                Results = memberMetrics.AsReadOnly()
            });
        }
コード例 #5
0
        private TypeMetrics CalculateTypeMetrics(Compilation compilation, NamespaceDeclaration namespaceNodes)
        {
            List <TypeMetric> typeMetrics = new List <TypeMetric>();

            foreach (KeyValuePair <string, TypeDeclaration> typeDeclaration in GetTypeDeclarations(namespaceNodes))
            {
                TypeDeclaration value        = typeDeclaration.Value;
                MemberMetrics   memberMetric = CalculateMemberMetrics(compilation, value);
                typeMetrics.Add(CalculateTypeMetrics(compilation, value, memberMetric));
            }
            TypeMetrics typeMetric = new TypeMetrics()
            {
                Results = typeMetrics.ToList <TypeMetric>().AsReadOnly()
            };

            return(typeMetric);
        }
コード例 #6
0
        public TypeMetric CalculateFrom(TypeDeclarationSyntaxInfo typeNode, MemberMetrics memberMetrics)
        {
            TypeDeclarationSyntax syntax     = (TypeDeclarationSyntax)typeNode.Syntax;
            TypeMetricKind        metricKind = TypeMetricsCalculator.GetMetricKind(syntax);
            LcomMetrics           lcomMetric = this.CalculateLackOfCohesion(syntax);
            TypeMetric            typeMetric = new TypeMetric()
            {
                Name          = TypeMetricsCalculator.GetDisplayName(syntax),
                Kind          = metricKind,
                MemberMetrics = memberMetrics
            };
            List <MetricResult> metricResults = new List <MetricResult>();

            foreach (MetricCalculator calculator in calculators)
            {
                typeMetric.AddMetricResult(calculator.Calculate <MemberMetrics, MemberMetric>(memberMetrics));
            }
            typeMetric.AddMetricResult(new MetricResult()
            {
                Name  = MetricNames.LackOfCohesionOfMethods,
                Value = lcomMetric.Lcom
            });
            typeMetric.AddMetricResult(new MetricResult()
            {
                Name  = MetricNames.LackOfCohesionOfMethodsHendersonSellers,
                Value = lcomMetric.LcomHendersonSellers
            });
            typeMetric.AddMetricResult(new MetricResult()
            {
                Name  = MetricNames.NumberOfFields,
                Value = lcomMetric.NumFields
            });
            typeMetric.AddMetricResult(new MetricResult()
            {
                Name  = MetricNames.NumberOfMethods,
                Value = lcomMetric.NumMethods
            });
            return(typeMetric);
        }
コード例 #7
0
        private TypeMetric CalculateTypeMetrics(Compilation compilation, TypeDeclaration typeNodes, MemberMetrics memberMetrics)
        {
            if (!typeNodes.SyntaxNodes.Any <TypeDeclarationSyntaxInfo>())
            {
                return(null);
            }
            TypeDeclarationSyntaxInfo typeDeclarationSyntaxInfo = typeNodes.SyntaxNodes.FirstOrDefault <TypeDeclarationSyntaxInfo>();
            SemanticModel             semanticModel             = compilation.GetSemanticModel(typeDeclarationSyntaxInfo.Syntax.SyntaxTree);

            return((new TypeMetricsCalculator(semanticModel)).CalculateFrom(typeDeclarationSyntaxInfo, memberMetrics));
        }