Ejemplo n.º 1
0
        /// <summary>
        /// Determines whether the specified <paramref name="module"/> is enabled for the given <paramref name="assembly"/>.
        /// </summary>
        /// <param name="assembly"><see cref="Assembly"/> to check if the <paramref name="module"/> is enabled for.</param>
        /// <param name="module"><see cref="DurianModule"/> representing a Durian module to check for.</param>
        /// <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 bool IsEnabled(this Assembly assembly, DurianModule module)
        {
            if (assembly is null)
            {
                throw new ArgumentNullException(nameof(assembly));
            }

            ModuleIdentity.EnsureIsValidModuleEnum(module);
            return(IsEnabled_Internal(assembly, module));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Includes all the specified <paramref name="modules"/> in the container.
        /// </summary>
        /// <param name="modules">A collection of <see cref="DurianModule"/>s to include.</param>
        /// <exception cref="ArgumentNullException"><paramref name="modules"/> is <see langword="null"/>.</exception>
        /// <exception cref="InvalidOperationException">Unknown <see cref="DurianModule"/> value detected.</exception>
        public void IncludeAll(IEnumerable <DurianModule> modules)
        {
            if (modules is null)
            {
                throw new ArgumentNullException(nameof(modules));
            }

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

                _enums.Add(module);
                _references.Add(null);
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Returns a collection of <see cref="TypeIdentity"/>s representing all enabled Durian <see cref="Type"/>s for the specified <paramref name="assembly"/> that are part of any of the provided <paramref name="modules"/>.
        /// </summary>
        /// <param name="assembly"><see cref="Assembly"/> to get the enabled Durian <see cref="Type"/>s of.</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"/>.</exception>
        /// <exception cref = "InvalidOperationException" > Unknown <see cref="DurianModule"/> value detected. -or- <see cref = "DurianModule.None" /> is not a valid Durian module.</exception>
        public static IEnumerable <TypeIdentity> GetEnabledTypes(this Assembly assembly, params DurianModule[]?modules)
        {
            if (assembly is null)
            {
                throw new ArgumentNullException(nameof(assembly));
            }

            if (modules is null || modules.Length == 0)
            {
                return(Array.Empty <TypeIdentity>());
            }

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

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

            if (attributes.Length == 0)
            {
                return(Array.Empty <TypeIdentity>());
            }

            return(Yield());

            IEnumerable <TypeIdentity> Yield()
            {
                foreach (DurianModule module in modules)
                {
                    if (IsEnabled_Internal(attributes, module))
                    {
                        ModuleIdentity identity = ModuleIdentity.GetModule(module);

                        foreach (TypeIdentity t in identity.Types)
                        {
                            yield return(t);
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
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);
            }
        }
Ejemplo n.º 5
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));
        }
Ejemplo n.º 6
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);
        }
Ejemplo n.º 7
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;
 }