internal static IEnumerable<DerivedTypesEntryNode> FindDerivedTypes(TypeDefinition type, ModuleDefinition[] assemblies)
{
foreach (ModuleDefinition module in assemblies)
{
foreach (TypeDefinition td in TreeTraversal.PreOrder(module.Types, t => t.NestedTypes))
{
if (type.IsInterface && td.HasInterfaces)
{
foreach (TypeReference typeRef in td.Interfaces)
{
if (IsSameType(typeRef, type))
yield return new DerivedTypesEntryNode(td, assemblies);
}
}
else if (!type.IsInterface && td.BaseType != null && IsSameType(td.BaseType, type))
{
yield return new DerivedTypesEntryNode(td, assemblies);
}
}
}
}