Exemple #1
0
        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());
        }
Exemple #2
0
 public PartialClassReassembler(Project project, Compilation compilation)
 {
     this.project     = project;
     this.compilation = compilation;
     scanner          = new PartialClassScanner(this);
     qualifier        = new PartialClassIdentifierFullyQualifier(this);
 }