protected virtual Type[] GetTypesToTest(ConventionData data)
        {
            if (data.SourceTypes != null)
            {
                return data.SourceTypes;
            }

            return GetAssembliesToScan(data)
                .SelectMany(a => a.SafeGetTypes())
                .Where(data.Types.Invoke)
                .OrderBy(t => t.FullName)
                .ToArray();
        }
 protected virtual Assembly[] GetAssembliesToScan(ConventionData data)
 {
     if (data.Assemblies != null)
     {
         return data.Assemblies;
     }
     var assembly = Assembly.GetCallingAssembly();
     var companyName = assembly.FullName.Substring(0, assembly.FullName.IndexOf('.'));
     var assemblyNames = assembly.GetReferencedAssemblies();
     var applicationAssemblies = Array.FindAll(assemblyNames, n => n.FullName.StartsWith(companyName));
     var assemblies = Array.ConvertAll(applicationAssemblies, n => n.TryLoadAssembly());
     return Array.FindAll(assemblies, a => a != null);
 }