private NamespaceMetric CalculateNamespaceMetrics(Compilation compilation, NamespaceDeclaration namespaceNodes, TypeMetrics typeMetrics) { if (!namespaceNodes.SyntaxNodes.Any <NamespaceDeclarationSyntaxInfo>()) { return(null); } NamespaceDeclarationSyntaxInfo namespaceDeclarationSyntaxInfo = namespaceNodes.SyntaxNodes.FirstOrDefault <NamespaceDeclarationSyntaxInfo>(); SemanticModel semanticModel = compilation.GetSemanticModel(namespaceDeclarationSyntaxInfo.Syntax.SyntaxTree); return((new NamespaceMetricsCalculator(semanticModel)).CalculateFrom(namespaceDeclarationSyntaxInfo, typeMetrics)); }
public NamespaceMetric CalculateFrom(NamespaceDeclarationSyntaxInfo namespaceNode, TypeMetrics typeMetrics) { NamespaceMetric namespaceMetric = new NamespaceMetric() { Name = namespaceNode.Name, TypeMetrics = typeMetrics }; foreach (MetricCalculator calculator in calculators) { namespaceMetric.AddMetricResult(calculator.Calculate <TypeMetrics, TypeMetric>(typeMetrics)); } return(namespaceMetric); }
private static async Task <Tuple <Compilation, SemanticModel, SyntaxTree, NamespaceDeclarationSyntaxInfo> > VerifyCompilation(Compilation compilation, NamespaceDeclarationSyntaxInfo namespaceNode) { SemanticModel semanticModel; var tree = namespaceNode.Syntax.SyntaxTree; if (tree == null) { var compilationUnit = SyntaxFactory.CompilationUnit() .WithMembers(SyntaxFactory.List(new[] { (MemberDeclarationSyntax)namespaceNode.Syntax })); var cu = CSharpSyntaxTree.Create(compilationUnit); var root = await cu.GetRootAsync().ConfigureAwait(false); namespaceNode.Syntax = root.ChildNodes().First(); var newCompilation = compilation.AddSyntaxTrees(cu); semanticModel = newCompilation.GetSemanticModel(cu); return(new Tuple <Compilation, SemanticModel, SyntaxTree, NamespaceDeclarationSyntaxInfo>(newCompilation, semanticModel, cu, namespaceNode)); } var result = AddToCompilation(compilation, tree); compilation = result.Item1; tree = result.Item2; semanticModel = compilation.GetSemanticModel(tree); return(new Tuple <Compilation, SemanticModel, SyntaxTree, NamespaceDeclarationSyntaxInfo>(compilation, semanticModel, tree, namespaceNode)); }