Beispiel #1
0
        private async void OnCreateGraph()
        {
            IsReady = false;

            Save();

            var request = new AnalysisRequest
            {
                Spec = Document.Text,
                PackagesToAnalyze = PackagesToAnalyze != null?PackagesToAnalyze.ToArray() : null,
                                        UsedTypesOnly = UsedTypesOnly,
                                        AllEdges      = AllEdges,
                                        CreateClustersForNamespaces = CreateClustersForNamespaces
            };

            try
            {
                myCTS = new CancellationTokenSource();

                var doc = await myAnalysisClient.AnalyseAsync(request, myCTS.Token);

                myCTS.Dispose();
                myCTS = null;

                if (doc != null)
                {
                    BuildGraph(doc);
                }
            }
            finally
            {
                IsReady = true;
            }
        }
        public AnalysisDocument Execute(SystemPackaging config, CancellationToken cancellationToken)
        {
            myConfig            = config;
            myCancellationToken = cancellationToken;

            myRelevantPackages = PackagesToAnalyze.Any()
                ? myConfig.Packages
                                 .Where(p => PackagesToAnalyze.Any(name => p.Name.Equals(name, StringComparison.OrdinalIgnoreCase)))
                                 .ToList()
                : myConfig.Packages;

            myPackageToTypesMap = new Dictionary <string, List <Type> >();

            Load();

            Console.WriteLine("Analyzing ...");

            var edges = Analyze()
                        .Distinct()
                        .ToList();

            Console.WriteLine();

            if (myAssemblyLoader.SkippedAssemblies.Any())
            {
                Console.WriteLine("Skipped assemblies:");
                foreach (var asm in myAssemblyLoader.SkippedAssemblies)
                {
                    Console.WriteLine("  {0}", asm);
                }
                Console.WriteLine();
            }

            Console.WriteLine("Building Graph ...");

            return(GenerateDocument(edges));
        }
Beispiel #3
0
        private void BuildGraph(AnalysisDocument response)
        {
            if (!response.Nodes.Any() && !response.Edges.Any())
            {
                MessageBox.Show("Neither nodes nor edges found");
                return;
            }

            var presentation = myPresentationCreationService.CreatePresentation(Path.GetTempPath());

            var builder = new RelaxedGraphBuilder();

            foreach (var edge in response.Edges)
            {
                builder.TryAddEdge(edge.Item1, edge.Item2);
            }

            foreach (var node in response.Nodes)
            {
                builder.TryAddNode(node);
            }

            foreach (var cluster in response.Clusters)
            {
                builder.TryAddCluster(cluster.Key, cluster.Value);
            }

            var captionModule = presentation.GetPropertySetFor <Caption>();

            // add potentially empty clusters
            {
                var spec          = SpecUtils.Deserialize(Document.Text);
                var emptyClusters = spec.Packages
                                    .Where(p => PackagesToAnalyze == null || PackagesToAnalyze.Contains(p.Name))
                                    .SelectMany(p => p.Clusters)
                                    .Where(cluster => !response.Clusters.Any(c => c.Key == cluster.Id));

                foreach (var cluster in emptyClusters)
                {
                    builder.TryAddCluster(cluster.Id, Enumerable.Empty <string>());
                    captionModule.Add(new Caption(cluster.Id, cluster.Name));
                }
            }

            presentation.Graph = builder.Graph;

            foreach (var caption in response.Captions)
            {
                captionModule.Add(new Caption(caption.Key, caption.Value));
            }

            var converter = new BrushConverter();

            var nodeStyles = presentation.GetPropertySetFor <NodeStyle>();

            foreach (var style in response.NodeStyles)
            {
                var brush = (Brush)converter.ConvertFromString(style.Value);
                brush.Freeze();
                nodeStyles.Add(new NodeStyle(style.Key)
                {
                    FillColor = brush
                });
            }

            var edgeStyles = presentation.GetPropertySetFor <EdgeStyle>();

            foreach (var style in response.EdgeStyles)
            {
                var brush = (Brush)converter.ConvertFromString(style.Value);
                brush.Freeze();
                edgeStyles.Add(new EdgeStyle(style.Key)
                {
                    Color = brush
                });
            }

            Model.Presentation = presentation;

            // only synchronize our own presentation
            myGraphToSpecSynchronizer.Presentation = presentation;
        }