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; }
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); }
public void Name_Formatting_Suite(Type type, string expectedName) { var model = new TypeMetaModel(type); Assert.That(model.Name, Is.EqualTo(expectedName)); }
public ForTypeDescriptor(ClassDiagram diagram) { _diagram = diagram; _typeMetaModel = _diagram.Types[typeof(T)]; }
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); } } }