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()); }
private async Task<Tuple<Compilation, ITypeMetric>> CalculateTypeMetrics(Solution solution, Compilation compilation, TypeDeclaration typeNodes, IEnumerable<IMemberMetric> memberMetrics) { if (typeNodes.SyntaxNodes.Any()) { var tuple = await VerifyCompilation(compilation, typeNodes.SyntaxNodes.First()).ConfigureAwait(false); var semanticModel = tuple.Item2; compilation = tuple.Item1; var typeNode = tuple.Item3; var calculator = new TypeMetricsCalculator(semanticModel, solution, _typeDocumentationFactory); var metrics = await calculator.CalculateFrom(typeNode, memberMetrics); return new Tuple<Compilation, ITypeMetric>( compilation, metrics); } return null; }