Пример #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ModuleContainer"/> class.
        /// </summary>
        /// <param name="modules">A collection of <see cref="DurianModule"/>s that the current instance should include.</param>
        /// <exception cref="ArgumentNullException"><paramref name="modules"/> is <see langword="null"/>.</exception>
        /// <exception cref="InvalidOperationException">Unknown <see cref="DurianModule"/> value detected.</exception>
        public ModuleContainer(IEnumerable <DurianModule> modules)
        {
            if (modules is null)
            {
                throw new ArgumentNullException(nameof(modules));
            }

            List <DurianModule> enums = modules.ToList();

            foreach (DurianModule m in modules)
            {
                ModuleIdentity.EnsureIsValidModuleEnum(m);
            }

            _enums      = enums;
            _references = new List <ModuleReference?>(_enums.Count);

            for (int i = 0; i < _enums.Count; i++)
            {
                _references.Add(null);
            }
        }
Пример #2
0
        /// <summary>
        /// Converts a collection of <see cref="DurianModule"/>s into an array of <see cref="ModuleIdentity"/>s.
        /// </summary>
        /// <param name="modules">A collection of <see cref="DurianModule"/>s to convert.</param>
        /// <exception cref="ArgumentNullException"><paramref name="modules"/> is <see langword="null"/>.</exception>
        /// <exception cref="InvalidOperationException">Unknown <see cref="DurianModule"/> value detected.</exception>
        public static ModuleIdentity[] ToIdentities(IEnumerable <DurianModule> modules)
        {
            if (modules is null)
            {
                throw new ArgumentNullException(nameof(modules));
            }

            DurianModule[] array = modules.ToArray();

            if (array.Length == 0)
            {
                return(Array.Empty <ModuleIdentity>());
            }

            ModuleIdentity[] identities = new ModuleIdentity[array.Length];

            for (int i = 0; i < identities.Length; i++)
            {
                identities[i] = ModuleIdentity.GetModule(array[i]);
            }

            return(identities);
        }
Пример #3
0
        /// <summary>
        /// Determines whether the specified <paramref name="type"/> is enabled for the given <paramref name="assembly"/>.
        /// </summary>
        /// <param name="assembly"><see cref="Assembly"/> to check if the <paramref name="type"/> is enabled for.</param>
        /// <param name="type"><see cref="TypeIdentity"/> to check if is enabled.</param>
        /// <param name="modules">Array of <see cref="DurianModule"/>s to pick the <see cref="TypeIdentity"/>s from.</param>
        /// <exception cref="ArgumentNullException"><paramref name="assembly"/> is <see langword="null"/>. -or- <paramref name="type"/> is <see langword="null"/>.</exception>
        /// <exception cref="InvalidOperationException">Unknown <see cref="DurianModule"/> value detected. -or- <see cref="DurianModule.None"/> is not a valid Durian module.</exception>
        public static bool IsEnabled(this Assembly assembly, TypeIdentity type, [NotNullWhen(true)] params DurianModule[]?modules)
        {
            if (assembly is null)
            {
                throw new ArgumentNullException(nameof(assembly));
            }

            if (type is null)
            {
                throw new ArgumentNullException(nameof(type));
            }

            if (modules is null || modules.Length == 0)
            {
                return(false);
            }

            foreach (DurianModule module in modules)
            {
                ModuleIdentity.EnsureIsValidModuleEnum(module);
            }

            return(IsEnabled_Internal(assembly, type, modules));
        }
Пример #4
0
        /// <summary>
        /// Returns a collection of all Durian modules present in the provided array of <paramref name="modules"/> that are enabled for the specified <paramref name="assembly"/>.
        /// </summary>
        /// <param name="assembly"><see cref="Assembly"/> to get the enabled Durian modules of.</param>
        /// <param name="modules">Array of <see cref="DurianModule"/>s to pick the enabled modules from.</param>
        /// <returns>A new instance of <see cref="ModuleContainer"/> that contains the enabled Durian modules.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="assembly"/> is <see langword="null"/>.</exception>
        /// <exception cref="InvalidOperationException">Unknown <see cref="DurianModule"/> value detected. -or- <see cref="DurianModule.None"/> is not a valid Durian module.</exception>
        public static ModuleContainer GetEnabledModules(this Assembly assembly, params DurianModule[]?modules)
        {
            if (assembly is null)
            {
                throw new ArgumentNullException(nameof(assembly));
            }

            if (modules is null || modules.Length == 0)
            {
                return(new ModuleContainer());
            }

            foreach (DurianModule module in modules)
            {
                ModuleIdentity.EnsureIsValidModuleEnum(module);
            }

            EnableModuleAttribute[] attributes = assembly.GetCustomAttributes <EnableModuleAttribute>().ToArray();

            if (attributes.Length == 0)
            {
                return(new ModuleContainer());
            }

            ModuleContainer container = new(modules.Length);

            foreach (DurianModule module in modules)
            {
                if (!container.Contains(module) && IsEnabled_Internal(attributes, module))
                {
                    container.Include(module);
                }
            }

            return(container);
        }
Пример #5
0
 internal PackageReference(DurianPackage package, ModuleIdentity onAllocate)
 {
     EnumValue   = package;
     _onAllocate = onAllocate;
 }
Пример #6
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ModuleReference"/> class.
 /// </summary>
 /// <param name="module">The module this <see cref="ModuleReference"/> references.</param>
 /// <exception cref="InvalidOperationException">Unknown <see cref="DurianModule"/> value detected. -or- <see cref="DurianModule.None"/> is not a valid Durian module.</exception>
 public ModuleReference(DurianModule module)
 {
     ModuleIdentity.EnsureIsValidModuleEnum(module);
     EnumValue = module;
 }
Пример #7
0
        /// <summary>
        /// Returns a collection of <see cref="TypeIdentity"/>s representing all <see cref="Type"/>s declared in the <c>Durian.Core</c> package that are part of any existing Durian module.
        /// </summary>
        public static IEnumerable <TypeIdentity> GetAllTypes()
        {
            ModuleIdentity[] identities = ModuleIdentity.GetAllModules().AsIdentities();

            return(GetAllTypes(identities));
        }