private static IReadOnlyDictionary <string, IReadOnlyList <INamedTypeDefinition> > GenerateTypeTable(IEnumerable <IAssembly> seedAssemblies, IAssembly refAssembly = null)
        {
            var typeTable = new Dictionary <string, IReadOnlyList <INamedTypeDefinition> >();

            foreach (var assembly in seedAssemblies)
            {
                bool internalsVisibleTo = refAssembly != null && UnitHelper.AssemblyOneAllowsAssemblyTwoToAccessItsInternals(assembly, refAssembly);

                foreach (var type in assembly.GetAllTypes().OfType <INamedTypeDefinition>())
                {
                    if (internalsVisibleTo ? TypeHelper.IsVisibleToFriendAssemblies(type) : TypeHelper.IsVisibleOutsideAssembly(type))
                    {
                        AddTypeAndNestedTypesToTable(typeTable, type);
                    }
                }
            }
            return(typeTable);
        }