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); } }
private static Members GetMembersResult(MemberMetrics metricsResults) { Members member = new Members(); member.AddRange(MetricsReportBuilder.GetMemberResults(metricsResults)); return(member); }
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); }
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() }); }
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); }
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); }
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)); }