public override void Run() { if (!TypeSystemServices.CompilerGeneratedTypesModuleExists()) { return; } var cgm = TypeSystemServices.GetCompilerGeneratedTypesModule(); var callableFinder = new TypeFinder(new TypeCollector(type => type.ParentNamespace == cgm.Entity)); foreach (var module in CompileUnit.Modules) { if (module != cgm) { module.Accept(callableFinder); } } var foundSet = new HashSet <IType>(callableFinder.Results); var count = 0; while (foundSet.Count > count) { count = foundSet.Count; var sweeper = new TypeFinder(new TypeCollector(type => foundSet.Contains(type))); cgm.Accept(sweeper); foreach (var swept in sweeper.Results) { foundSet.Add(swept); } } var rejects = cgm.Members .Cast <TypeDefinition>() .Where(td => !td.Name.Contains("$adaptor$") && !foundSet.Contains(td.Entity)); foreach (var type in rejects) { cgm.Members.Remove(type); } }