private static string GetLabel(MethodUmlMember member) { var argsCollection = member.Method.GetParameters() .Select(a => a.Name); var args = string.Join(", ", argsCollection); return($"{member.Name}({args})"); }
public void Visit(UmlDiagram diagram, UmlEntity info) { var type = info.Type; var properties = ScanProperties(type, ScanFlags); info.Members.AddRange(properties); var r = BindingFlags.Public | BindingFlags.NonPublic; if (ScanFlags.HasFlag(ReflectionFlags.InstanceMethod)) { r |= BindingFlags.Instance; } if (ScanFlags.HasFlag(ReflectionFlags.StaticMethod)) { r |= BindingFlags.Static; } var methodInfos = type.GetMethods(r); { var h = SortAndPrepareMethods; if (h != null) { var args = new SortAndPrepareMethodsEventArgs { Methods = methodInfos }; h.Invoke(this, args); methodInfos = args.Methods; } } foreach (var mi in methodInfos) { var add = CheckSkipDefault(mi); var flag = GetMFlag(mi, ReflectionFlags.PublicMethod, ReflectionFlags.ProtectedMethod, ReflectionFlags.PrivateMethod); if (add) { if (!H(flag, ScanFlags)) { add = false; } } var h = AddTypeToDiagram; if (h is null && !add) { continue; } var member = new MethodUmlMember { Group = 20, Name = mi.Name, Method = mi, Visibility = GetVisibilityFromFlags(flag) }; if (mi.IsAbstract) { member.Kind = UmlMemberKind.Abstract; } if (mi.IsStatic) { member.Kind = UmlMemberKind.Static; } if (h != null) { var args = new AddTypeToDiagramEventArgs { Decision = add ? AddDecision.Add : AddDecision.Skip, Member = mi, UmlMember = member }; h(this, args); if (args.Decision != AddDecision.Default) { add = args.Decision == AddDecision.Add; } } if (!add) { continue; } info.Members.Add(member); } }
private static IEnumerable <Type> ProcessMethod(UmlDiagram diagram, UmlEntity diagClass, MethodUmlMember member) { if (diagClass.Type != member.Method.DeclaringType) { if (diagram.ContainsType(diagClass.Type.BaseType.MeOrGeneric())) { member.HideOnList = true; yield break; } } var att = member.Method.GetCustomAttribute <UmlRelationAttribute>(); if (att == null) { yield break; } var ti = new TypeExInfo(att.RelatedType ?? member.Method.ReturnType, att.DoNotResolveCollections); if (!diagram.ContainsType(ti.ElementType)) { yield break; } // create relation member.HideOnList = true; var owner = diagClass.Type; var component = ti.ElementType; const string ownerLabel = ""; const string componentLabel = ""; var arrow = UmlRelationArrow.MkArrow(att, GetMultiplicity(att.Multiple, ti.IsCollection)); if (att.ForceAddToDiagram) { yield return(ti.ElementType); } var rel = new UmlRelation { Left = new UmlRelationEnd(diagram.GetTypeName(owner), ownerLabel), Right = new UmlRelationEnd(diagram.GetTypeName(component), componentLabel), Arrow = arrow, Label = string.IsNullOrEmpty(att.Name) ? GetLabel(member) : att.Name } .WithNote(att) .WitCreatorMeta <MemberToRelationVisitor>(owner, component); rel.Tag = att.Tag; rel.BaseMember = member; diagram.Relations.Add(rel); }