Ejemplo n.º 1
0
        public ClassMemberDescriptor(ClassDescriptor descriptor, MemberInfo member)
        {
            var property = member as PropertyInfo;

            this.AccessModifier = AccessModifier.Public;

            if (property != null)
            {
                this.MemberType = property.PropertyType;
            }

            var field = member as FieldInfo;

            if (field != null)
            {
                this.MemberType = field.FieldType;
            }

            this.AccessModifier = AccessModifier.GetAccessModifier(member);


            if (this.MemberType == null)
            {
                throw new NPlantException("Member's could not be interpretted as either a property or a field");
            }

            _descriptor = descriptor;

            this.Name        = member.Name;
            this.Key         = this.Name;
            _metaModel       = ClassDiagramVisitorContext.Current.GetTypeMetaModel(this.MemberType);
            this.IsInherited = member.DeclaringType != descriptor.ReflectedType;
        }
Ejemplo n.º 2
0
        public void TypeMetaModel_Should_Be_Properly_Defaulted()
        {
            var model = new TypeMetaModel(typeof(Subject));

            Assert.That(model.Hidden, Is.False);
            Assert.That(model.HideAsBaseClass, Is.False);
            Assert.That(model.IsComplexType, Is.True);
            Assert.That(model.IsPrimitive, Is.False);
            Assert.That(model.Name, Is.EqualTo("Subject"));
            Assert.That(model.Note.ToString(), Is.EqualTo(string.Empty));
            Assert.That(model.TreatAllMembersAsPrimitives, Is.False);
        }
Ejemplo n.º 3
0
        public void Name_Formatting_Suite(Type type, string expectedName)
        {
            var model = new TypeMetaModel(type);

            Assert.That(model.Name, Is.EqualTo(expectedName));
        }
Ejemplo n.º 4
0
 public ForTypeDescriptor(ClassDiagram diagram)
 {
     _diagram       = diagram;
     _typeMetaModel = _diagram.Types[typeof(T)];
 }
Ejemplo n.º 5
0
        public void Visit()
        {
            var context = ClassDiagramVisitorContext.Current;

            this.MetaModel = context.GetTypeMetaModel(this.ReflectedType);

            if (context.ShowMembers)
            {
                LoadMembers(context);
            }

            if (context.ShowMethods)
            {
                LoadMethods(context);
            }

            var showInheritance = ShouldShowInheritance(context);

            if (!this.MetaModel.Hidden)
            {
                foreach (ClassMemberDescriptor member in this.Members.InnerList)
                {
                    if (this.MetaModel.TreatAllMembersAsPrimitives)
                    {
                        member.TreatAsPrimitive = true;
                    }

                    TypeMetaModel metaModel = member.MetaModel;

                    if (!metaModel.Hidden && !member.TreatAsPrimitive)
                    {
                        // if not showing inheritance then show all members
                        // otherwise, only show member that aren't inherited
                        if (!showInheritance || !member.IsInherited)
                        {
                            if (metaModel.IsComplexType && this.GetMemberVisibility(member.Key))
                            {
                                var nextLevel = this.Level + 1;

                                if (member.MemberType.IsEnumerable())
                                {
                                    var enumeratorType          = member.MemberType.GetEnumeratorType();
                                    var enumeratorTypeMetaModel = context.GetTypeMetaModel(enumeratorType);

                                    if (enumeratorTypeMetaModel.IsComplexType)
                                    {
                                        context.AddRelated(this, enumeratorType.GetDescriptor(context), ClassDiagramRelationshipTypes.HasMany, nextLevel, member.Name);
                                    }
                                }
                                else
                                {
                                    context.AddRelated(this, member.MemberType.GetDescriptor(context), ClassDiagramRelationshipTypes.HasA, nextLevel, member.Name);
                                }
                            }
                        }
                    }
                }
            }

            if (showInheritance)
            {
                context.AddRelated(this, this.ReflectedType.BaseType.GetDescriptor(context), ClassDiagramRelationshipTypes.Base, this.Level - 1);
            }

            foreach (Type type in this.ReflectedType.GetInterfaces())
            {
                if (this.ReflectedType.BaseType.GetInterfaces().ToList().Exists(p => p.Equals(type)))
                {
                    continue;
                }
                if (ShouldShowInheritanceInterface(context, type))
                {
                    context.AddRelated(this, type.GetDescriptor(context), ClassDiagramRelationshipTypes.Base, this.Level - 1);
                }
            }
        }