static string[] initPhase <T>(Assembly assembly, out string[] availableTypes, out string[] availableNames) where T : ICodeGeneratorInterface { var instances = CodeGeneratorUtil .GetOrderedTypes <T>(assembly) .Where(type => !type.IsAbstract) .Select(type => (T)Activator.CreateInstance(type)); if (typeof(T) == typeof(ICodeGenFilePostProcessor)) { instances = instances .OrderBy(instance => ((ICodeGenFilePostProcessor)instance).priority); } else { instances = instances .OrderBy(instance => instance.name); } availableTypes = instances .Select(instance => instance.GetType().FullName) .ToArray(); availableNames = instances .Select(instance => instance.name) .ToArray(); return(instances .Where(instance => instance.isEnabledByDefault) .Select(instance => instance.GetType().FullName) .ToArray()); }