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);
        }
Esempio n. 3
0
        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));
        }