public string Write(ClassDiagramVisitorContext context) { string color = _class.Color ?? _diagram.GetClassColor(_class); StringBuilder buffer = new StringBuilder(); buffer.AppendLine(string.Format(" class \"{0}\"{1} {2}", _class.Name, color, "{")); var definedMembers = _class.Members.InnerList.Where(x => !x.IsInherited).OrderBy(x => x.Name).ToArray(); if (!IsBaseClassVisible(_class, context)) { var inheritedMembers = _class.Members.InnerList.Where(x => x.IsInherited).OrderBy(x => x.Name); WriteClassMembers(inheritedMembers, buffer); if (definedMembers.Length > 0) { buffer.AppendLine(" --"); } } WriteClassMembers(definedMembers, buffer); buffer.AppendLine(" }"); var note = _class.MetaModel.Note != null ? _class.MetaModel.Note.ToString() : null; if (note != null) { buffer.AppendLine(note); } return buffer.ToString(); }
private bool IsBaseClassVisible(ClassDescriptor @class, ClassDiagramVisitorContext context) { if (_diagram.RootClasses.InnerList.Any(x => x.ReflectedType == @class.ReflectedType.BaseType)) return true; if (context.VisitedRelatedClasses.Any(x => x.ReflectedType == @class.ReflectedType.BaseType)) return true; return false; }
private void LoadMethods(ClassDiagramVisitorContext context) { var methods = this.ReflectedType.GetMethods(context.ShowMethodsBindingFlags); foreach (var method in methods) { if(!method.IsProperty()) // weed up the compiler generated methods for properties _methods.Add(new ClassMethodDescriptor(method)); } }
public string Write(ClassDiagramVisitorContext context) { StringBuilder buffer = new StringBuilder(); var names = Enum.GetNames(_enumType); buffer.AppendLine("enum \"{0}\" {1}".FormatWith(_enumType.Name, "{")); foreach (var name in names) { buffer.AppendLine(" {0}".FormatWith(name)); } buffer.AppendLine("}"); return buffer.ToString(); }
protected override void LoadMembers(ClassDiagramVisitorContext context) { // don't load any member for enums }
public ClassDiagramFormatter(ClassDiagram diagram, ClassDiagramVisitorContext context) { _diagram = diagram; _context = context; }
protected abstract void Finalize(ClassDiagramVisitorContext current);
protected override void Finalize(ClassDiagramVisitorContext current) { var formatter = Definition.CreateFormatter(ClassDiagramVisitorContext.Current); _buffer.Append(formatter.Format()); }
public ClassDiagramGeneration(ClassDiagramVisitorContext context) { _previousVisitorContext = ClassDiagramVisitorContext.Current; ClassDiagramVisitorContext.Current = context; }
protected virtual void LoadMembers(ClassDiagramVisitorContext context) { switch (context.ScanMode) { case ClassDiagramScanModes.SystemServiceModelMember: _members.AddRange(this.ReflectedType.GetFields() .Where(x => x.HasAttribute<DataMemberAttribute>() || x.HasAttribute<MessageBodyMemberAttribute>()) .Select(field => new ClassMemberDescriptor(this.ReflectedType, field, context.GetTypeMetaModel(field.FieldType))) ); _members.AddRange(this.ReflectedType.GetProperties() .Where(x => x.HasAttribute<DataMemberAttribute>() || x.HasAttribute<MessageBodyMemberAttribute>()) .Select(property => new ClassMemberDescriptor(this.ReflectedType, property, context.GetTypeMetaModel(property.PropertyType))) ); break; default: _members.AddRange(this.ReflectedType.GetFields() .Select(field => new ClassMemberDescriptor(this.ReflectedType, field, context.GetTypeMetaModel(field.FieldType))) ); _members.AddRange(this.ReflectedType.GetProperties() .Select(property => new ClassMemberDescriptor(this.ReflectedType, property, context.GetTypeMetaModel(property.PropertyType))) ); break; } }
public void Visit(ClassDiagramVisitorContext context) { this.MetaModel = context.GetTypeMetaModel(this.ReflectedType); LoadMembers(context); bool showInheritance = this.RenderInheritance && this.ReflectedType.BaseType != null; if (showInheritance) { var baseTypeMetaModel = context.GetTypeMetaModel(this.ReflectedType.BaseType); showInheritance = !baseTypeMetaModel.HideAsBaseClass && !baseTypeMetaModel.Hidden; } 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.GetReflected(), ClassDiagramRelationshipTypes.HasMany, nextLevel, member.Name); } } else { context.AddRelated(this, member.MemberType.GetReflected(), ClassDiagramRelationshipTypes.HasA, nextLevel, member.Name); } } } } } } if (showInheritance) { context.AddRelated(this, this.ReflectedType.BaseType.GetReflected(), ClassDiagramRelationshipTypes.Base, this.Level - 1); } }
protected override void LoadMembers(ClassDiagramVisitorContext context) { // don't load members if it's an enum }
private bool ShouldShowInheritanceInterface(ClassDiagramVisitorContext context, Type type) { bool showInheritance = this.RenderInheritance && this.ReflectedType.BaseType != null; if (showInheritance) { var interfaceModel = context.GetTypeMetaModel(type); showInheritance |= !interfaceModel.HideAsBaseClass && !interfaceModel.Hidden; } return showInheritance; }
protected virtual void LoadMembers(ClassDiagramVisitorContext context) { switch (context.ScanMode) { case ClassDiagramScanModes.SystemServiceModelMember: _members.AddRange(this.ReflectedType.GetFields() .Where(x => x.HasAttribute<DataMemberAttribute>() || x.HasAttribute<MessageBodyMemberAttribute>()) .Where(x => !x.IsDefined(typeof(CompilerGeneratedAttribute), false)) .Select(field => new ClassMemberDescriptor(this, field)) ); _members.AddRange(this.ReflectedType.GetProperties() .Where(x => x.HasAttribute<DataMemberAttribute>() || x.HasAttribute<MessageBodyMemberAttribute>()) .Where(x => !x.IsDefined(typeof(CompilerGeneratedAttribute), false)) .Select(property => new ClassMemberDescriptor(this, property)) ); break; case ClassDiagramScanModes.AllMembers: _members.AddRange(this.ReflectedType.GetFields(context.ShowMembersBindingFlags) .Where(x => !x.IsDefined(typeof(CompilerGeneratedAttribute), false)) .Select(field => new ClassMemberDescriptor(this, field)) ); _members.AddRange(this.ReflectedType.GetProperties(context.ShowMembersBindingFlags) .Where(x => !x.IsDefined(typeof(CompilerGeneratedAttribute), false)) .Select(property => new ClassMemberDescriptor(this, property)) ); break; default: _members.AddRange(this.ReflectedType.GetFields() .Where(x => !x.IsDefined(typeof(CompilerGeneratedAttribute), false)) .Select(field => new ClassMemberDescriptor(this, field)) ); _members.AddRange(this.ReflectedType.GetProperties() .Where(x => !x.IsDefined(typeof(CompilerGeneratedAttribute), false)) .Select(property => new ClassMemberDescriptor(this, property)) ); break; } }
protected override void Finalize(ClassDiagramVisitorContext current) { _classes.AddRange(current.VisitedRelatedClasses); }
public ClassDiagramSimulation(ClassDiagram diagram) { _definition = diagram; _context = _definition.CreateGenerationContext(); }
protected override void Finalize(ClassDiagramVisitorContext current) { var formatter = Definition.CreateFormatter(ClassDiagramVisitorContext.Current); _file.Write(formatter.Format()); }