public IEnumerable<Cci.INamespaceTypeDefinition> GetTopLevelTypes(EmitContext context)
{
Cci.NoPiaReferenceIndexer noPiaIndexer = null;
// First time through, we need to collect emitted names of all top level types.
HashSet<string> names = (_namesOfTopLevelTypes == null) ? new HashSet<string>() : null;
//// First time through, we need to push things through NoPiaReferenceIndexer
//// to make sure we collect all to be embedded NoPia types and members.
//if (EmbeddedTypesManagerOpt != null && !EmbeddedTypesManagerOpt.IsFrozen)
//{
// noPiaIndexer = new Cci.NoPiaReferenceIndexer(context);
// Debug.Assert(names != null);
// this.Dispatch(noPiaIndexer);
//}
AddTopLevelType(names, _rootModuleType);
VisitTopLevelType(noPiaIndexer, _rootModuleType);
yield return _rootModuleType;
foreach (var type in this.GetAnonymousTypes())
{
AddTopLevelType(names, type);
VisitTopLevelType(noPiaIndexer, type);
yield return type;
}
foreach (var type in this.GetTopLevelTypesCore(context))
{
AddTopLevelType(names, type);
VisitTopLevelType(noPiaIndexer, type);
yield return type;
}
var privateImpl = this.PrivateImplClass;
if (privateImpl != null)
{
AddTopLevelType(names, privateImpl);
VisitTopLevelType(noPiaIndexer, privateImpl);
yield return privateImpl;
}
//if (EmbeddedTypesManagerOpt != null)
//{
// foreach (var embedded in EmbeddedTypesManagerOpt.GetTypes(context.Diagnostics, names))
// {
// AddTopLevelType(names, embedded);
// yield return embedded;
// }
//}
if (names != null)
{
Debug.Assert(_namesOfTopLevelTypes == null);
_namesOfTopLevelTypes = names;
}
}