private void CleanUpNamespaces(SDSolution sdSolution) { for(int i = 0; i < sdSolution.Repositories.Count; i++) { var sdRepository = sdSolution.Repositories[i]; ExecuteOnStepMessage(string.Format(_parserStrings.CleanUp, sdRepository.TargetFx.Name)); ExecuteOnStepProgress((int)((double)i / sdSolution.Repositories.Count * 10) + 50); foreach (var sdNamespace in sdRepository.GetAllNamespaces()) { if (sdNamespace.Types.Count == 0) sdRepository.RemoveNamespace(sdNamespace); } } ExecuteOnStepProgress(50); }
private SDSolution ParseSolution(CSharpSolution solution, ICoreConfigSection sharpDoxConfig, Dictionary<string, string> tokens, bool structured) { var sdSolution = new SDSolution(solution.SolutionFile); var targetFxParser = new SDTargetFxParser(); _currentProjectIndex = 1; _totalProjects = solution.Projects.Count; for (var i = 0; i < solution.Projects.Count; i++) { ExecuteOnStepProgress((int)(((double)i / (double)solution.Projects.Count) * 50) + 20); var project = solution.Projects[i]; var projectFileName = project.FileName; var targetFx = targetFxParser.GetTargetFx(projectFileName); var sdRepository = sdSolution.GetExistingOrNew(targetFx); if (structured) { StructureParseNamespaces(project, sdRepository); StructureParseTypes(project, sdRepository); } else { ParseNamespaces(project, sdRepository, sharpDoxConfig, tokens); ParseTypes(project, sdRepository, sharpDoxConfig); // Because of excluding privates, internals and protected members // it is possible, that a namespace has no visible namespaces at all. // It is necessary to remove empty namespaces. RemoveEmptyNamespaces(sdRepository); } _currentProjectIndex++; } ExecuteOnStepProgress(80); if (!structured) { var i = 0; foreach (var sdRepository in sdSolution.Repositories) { ParseMethodCalls(solution, sdRepository); ResolveUses(sdRepository); } } return sdSolution; }
public SDSolution GetParsedSolution(string solutionFile, ICoreConfigSection sharpDoxConfig, Dictionary<string, string> tokens, bool parseMethodCalls, bool ignoreExcludes = false) { var sdSolution = new SDSolution(solutionFile); var solution = _roslynLoader.LoadSolutionFile(solutionFile); var parserOptions = new ParserOptions(); parserOptions.CodeSolution = solution; parserOptions.SDSolution = sdSolution; parserOptions.SharpDoxConfig = sharpDoxConfig; parserOptions.Tokens = tokens; parserOptions.IgnoreExcludes = ignoreExcludes; ParseProjects(parserOptions); CleanUpNamespaces(sdSolution); if (parseMethodCalls) ParseMethodCalls(parserOptions); ResolveSeeTokens(parserOptions); ResolveUses(parserOptions); return sdSolution; }