ArchiMetrics.Analysis.Metrics.MemberMetricsCalculator.Calculate C# (CSharp) Method

Calculate() public method

public Calculate ( TypeDeclarationSyntaxInfo typeNode ) : Task>
typeNode TypeDeclarationSyntaxInfo
return Task>
		public async Task<IEnumerable<IMemberMetric>> Calculate(TypeDeclarationSyntaxInfo typeNode)
		{
			var walker = new MemberCollector();
			var members = walker.GetMembers(typeNode).AsArray();
			if ((typeNode.Syntax is ClassDeclarationSyntax
				|| typeNode.Syntax is StructDeclarationSyntax)
				&& members.All(m => m.Kind() != SyntaxKind.ConstructorDeclaration))
			{
				var defaultConstructor = SyntaxFactory.ConstructorDeclaration(typeNode.Name)
											   .WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
											   .WithBody(SyntaxFactory.Block());
				members = members.Concat(new[] { defaultConstructor }).AsArray();
			}

			var metrics = await CalculateMemberMetrics(members).ConfigureAwait(false);
			return metrics.AsArray();
		}

Usage Example

		private async Task<Tuple<Compilation, IEnumerable<IMemberMetric>>> CalculateMemberMetrics(Compilation compilation, TypeDeclaration typeNodes, Solution solution)
		{
			var comp = compilation;
			var metrics = typeNodes.SyntaxNodes
				.Select(async info =>
				{
					var tuple = await VerifyCompilation(comp, info).ConfigureAwait(false);
					var semanticModel = tuple.Item2;
					comp = tuple.Item1;
					var calculator = new MemberMetricsCalculator(semanticModel, solution, _memberDocumentationFactory);

					return await calculator.Calculate(info).ConfigureAwait(false);
				});
			var results = await Task.WhenAll(metrics).ConfigureAwait(false);
			return new Tuple<Compilation, IEnumerable<IMemberMetric>>(comp, results.SelectMany(x => x).AsArray());
		}