Пример #1
0
        public List <ClassFileInfo> Deep()
        {
            List <ClassFileInfo> result = new List <ClassFileInfo>();

            var solutionFilePath = BuildWorkspaceHelper.GetRelativeWorkspacePath("Syinpo.Model\\Syinpo.Model.csproj");

            {
                //using( var work = MSBuildWorkspace.Create() ) {
                //    var project = work.OpenProjectAsync( solutionFilePath ).Result;
                //    var documents = project.Documents.Where( w => w.Name.EndsWith( ".cs" ) ).ToList();
                //}
            }

            AnalyzerManager manager   = new AnalyzerManager();
            var             analyzer  = manager.GetProject(solutionFilePath);
            AdhocWorkspace  workspace = analyzer.GetWorkspace();
            var             project   = workspace.CurrentSolution.Projects.First();
            var             documents = project.Documents.Where(w => w.Name.EndsWith(".cs")).ToList();

            foreach (var document in documents)
            {
                string fileName = document.Name;
                string filePath = document.FilePath;

                var classes  = document.GetSyntaxRootAsync().Result.DescendantNodes().OfType <ClassDeclarationSyntax>();
                var classes2 = document.GetSyntaxRootAsync().Result.DescendantNodes().ToList().OfType <EnumDeclarationSyntax>();

                if (classes.Any())
                {
                    foreach (var cl in classes)
                    {
                        NamespaceDeclarationSyntax namespaceDeclarationSyntax = null;
                        if (!SyntaxNodeHelper.TryGetParentSyntax(cl, out namespaceDeclarationSyntax))
                        {
                            continue;
                        }

                        var namespaceName = namespaceDeclarationSyntax.Name.ToString();
                        var fullClassName = namespaceName + "." + cl.Identifier.ToString();

                        var keys = document.Folders.ToList();
                        keys.Add(fileName);
                        result.Add(new ClassFileInfo {
                            FileName      = fileName,
                            FilePath      = filePath,
                            ClassName     = cl.Identifier.ToString(),
                            FullClassName = fullClassName,
                            Key           = string.Join(@"/", keys.ToArray())
                        });
                    }
                }

                if (classes2.Any())
                {
                    foreach (var cl in classes2)
                    {
                        NamespaceDeclarationSyntax namespaceDeclarationSyntax = null;
                        if (!SyntaxNodeHelper.TryGetParentSyntax(cl, out namespaceDeclarationSyntax))
                        {
                            continue;
                        }

                        var namespaceName = namespaceDeclarationSyntax.Name.ToString();
                        var fullClassName = namespaceName + "." + cl.Identifier.ToString();

                        var keys = document.Folders.ToList();
                        keys.Add(fileName);
                        result.Add(new ClassFileInfo {
                            FileName      = fileName,
                            FilePath      = filePath,
                            ClassName     = cl.Identifier.ToString(),
                            FullClassName = fullClassName,
                            Key           = string.Join(@"/", keys.ToArray())
                        });
                    }
                }

                #region Old
                if (false)
                {
                    SourceText text = document.GetTextAsync().Result;
                    var        span = TextSpan.FromBounds(0, text.Length);
                    IEnumerable <ClassifiedSpan> classifiedSpans = null;
                    try {
                        classifiedSpans = Classifier.GetClassifiedSpansAsync(document, span).Result;

                        IEnumerable <Range> ranges = classifiedSpans.Select(classifiedSpan => new Range(classifiedSpan, text.GetSubText(classifiedSpan.TextSpan).ToString()));

                        // var classes = ranges.Where(w => w.ClassificationType == "class name").ToList();
                    }
                    catch (Exception ex) {
                        throw new Exception("Exception during Classification of document: " + document.FilePath);
                    }
                }
                #endregion
            }


            return(result);
        }
Пример #2
0
 public void Save(List <ClassFileInfo> data)
 {
     File.WriteAllText(BuildWorkspaceHelper.GetRelativeWorkspacePath(@"Syinpo.SignalRDoc.Generation\swagger\classes.json"), JsonHelper.ToJson(data));
 }