public virtual void Process(Type @class, TPrinter printer)
        {
            // NOTE: CHANGE IT!!!
            AssemblySelector selector = AssemblySelector.Get(@class.Assembly);

            ClassInclude  defaultClassInclude = selector.GetClassInclude(@class, printer.Diagram);
            ClassSelector classSelector       = ClassSelector.Get(@class, defaultClassInclude);

            printer.BeginClass(ModelUtils.ToClassType(@class),
                               PlantUmlUtils.GetSimpleName(@class),
                               PlantUmlUtils.GetGenerics(@class),
                               PlantUmlUtils.GetStereotypes(@class)?.ToArray());

            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetConstructors(@class), printer);
            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetMethods(@class), printer);
            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetProperties(@class), printer);
            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetEvents(@class), printer);
            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetFields(@class), printer);

            printer.EndClass();

            //this.ProcessNestedIfChecked(classSelector, ModelUtils.GetNestedTypes(@class), printer);

            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetGeneralizations(@class), printer);
            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetAssociations(@class), printer);
            this.ProcessMembersIfChecked(classSelector, ModelUtils.GetDependencies(@class), printer);
        }
        public virtual void Process(Assembly assembly, TPrinter printer)
        {
            AssemblySelector selector = AssemblySelector.Get(assembly);

            // Check in which diagram can be used.
            foreach (string diagram in selector.GetDiagrams())
            {
                printer.BeginDiagram(diagram);

                foreach (Type @class in assembly.DefinedTypes.Where(@class => [email protected]()))
                {
                    ClassSelector classSelector = ClassSelector.Get(@class);

                    // Is pointed out with a 'DiagramAttribute' OR 'ClassDiagramAttribute'.
                    if (selector.Check(@class, diagram) ||
                        classSelector.GetClassInclude(diagram) != ClassInclude.None)
                    {
                        this.provider.GetProcessor <Type>().Process(@class, printer);
                    }
                }

                printer.EndDiagram();
            }
        }