public Compilation UnifyPartialTypes() { foreach (var syntaxTree in compilation.SyntaxTrees) { var compilationUnit = (CompilationUnitSyntax)syntaxTree.GetRoot(); compilationUnit.Accept(scanner); } var partialTypes = scanner.typeDeclarationsBySymbol.Where(x => x.Value.Count > 1).SelectMany(x => x.Value).ToArray(); if (!partialTypes.Any()) { return(compilation); } var compilationUnits = new HashSet <CompilationUnitSyntax>(partialTypes.Select(x => (CompilationUnitSyntax)x.SyntaxTree.GetRoot()).Distinct()); foreach (var syntaxTree in compilation.SyntaxTrees) { var compilationUnit = (CompilationUnitSyntax)syntaxTree.GetRoot(); if (compilationUnits.Contains(compilationUnit)) { compilationUnit = (CompilationUnitSyntax)compilationUnit.Accept(qualifier); compilation = compilation.ReplaceSyntaxTree(syntaxTree, SyntaxFactory.SyntaxTree(compilationUnit, path: syntaxTree.FilePath)); } } Context.Update(project.Solution, project, compilation, new ReflectionCache(project, compilation)); scanner = new PartialClassScanner(this); foreach (var syntaxTree in compilation.SyntaxTrees) { var compilationUnit = (CompilationUnitSyntax)syntaxTree.GetRoot(); compilationUnit.Accept(scanner); } return(CreateNewCompilation()); }
public PartialClassReassembler(Project project, Compilation compilation) { this.project = project; this.compilation = compilation; scanner = new PartialClassScanner(this); qualifier = new PartialClassIdentifierFullyQualifier(this); }