コード例 #1
0
        public void VisitBeforeEmit(UmlDiagram diagram)
        {
            var typesToAdd = new List <Type>();

            foreach (var diagClass in diagram.GetEntities())
            {
                foreach (var mem in diagClass.Members)
                {
                    switch (mem)
                    {
                    case MethodUmlMember methodUmlMember:
                        var types1 = ProcessMethod(diagram, diagClass, methodUmlMember);
                        typesToAdd.AddRange(types1);
                        break;

                    case PropertyUmlMember propertyUmlMember:
                        var types2 = ProcessProperty(diagram, diagClass, propertyUmlMember);
                        typesToAdd.AddRange(types2);
                        break;
                    }
                }
            }

            foreach (var i in typesToAdd)
            {
                diagram.UpdateTypeInfo(i, null);
            }
        }
コード例 #2
0
 public void VisitBeforeEmit(UmlDiagram diagram)
 {
     foreach (var info in diagram.GetEntities())
     {
         UpdateContainerFromAttributes(info, info.Type);
         foreach (var i in info.Members)
         {
             UpdateContainerFromAttributes(i, i.GetMemberInfo());
         }
     }
 }
コード例 #3
0
        public void VisitBeforeEmit(UmlDiagram diagram)
        {
            foreach (var entity in diagram.GetEntities())
            {
                foreach (var me in entity.Members)
                {
                    var hide = HideMember?.Invoke(diagram, me, entity) ?? SetFlagResult.LeaveUnchanged;

                    if (hide == SetFlagResult.LeaveUnchanged)
                    {
                        hide = DefaultHideMethod(diagram, me, entity);
                    }
                    if (hide != SetFlagResult.LeaveUnchanged)
                    {
                        me.HideOnList = hide == SetFlagResult.SetToTrue;
                    }
                }
            }
        }
コード例 #4
0
        public void VisitBeforeEmit(UmlDiagram diagram)
        {
            foreach (var e in diagram.GetEntities())
            {
                var entityType = e.Type;
                var bt         = entityType.BaseType.MeOrGeneric();
                if (entityType.BaseType != null && diagram.ContainsType(bt))
                {
                    var rel = Inherits(bt, entityType, diagram).With(UmlArrowDirections.Up);
                    var a1  = entityType.BaseType.GetGenericTypeArgumentsIfPossible();
                    if (a1.Length > 0)
                    {
                        var a4 = entityType.BaseType.MeOrGeneric().GetGenericArguments();
                        var sb = new StringBuilder();
                        for (var i = 0; i < a4.Length; i++)
                        {
                            var t1  = a1[i];
                            var t2  = a4[i];
                            var txt = t2.Name + "=" + diagram.GetTypeName(t1);
                            if (i > 0)
                            {
                                sb.Append(", ");
                            }
                            sb.Append(txt);
                        }

                        rel.Label = sb.ToString();
                    }

                    diagram.Relations.Add(rel);
                }

                bool CanAddR(Type clasType, Type interfaceType)
                {
                    clasType = clasType.BaseType;
                    while (clasType != null)
                    {
                        if (!diagram.ContainsType(clasType))
                        {
                            return(true);
                        }
                        if (clasType.GetInterfaces().Contains(interfaceType))
                        {
                            return(false);
                        }
                        clasType = clasType.BaseType;
                    }

                    return(true);
                }

                var entityInterfaces = entityType
                                       .GetInterfaces()
                                       .Select(a => a.MeOrGeneric())
                                       .ToHashSet();
                var hideRelationToInterface = new HashSet <Type>();
                foreach (var entityInterface in entityInterfaces)
                {
                    var baseInterfaces = entityInterface.GetInterfaces();
                    foreach (var baseI in baseInterfaces)
                    {
                        if (diagram.ContainsType(baseI))
                        {
                            hideRelationToInterface.Add(baseI);
                        }
                    }
                }

                foreach (var i in hideRelationToInterface)
                {
                    entityInterfaces.Remove(i);
                }
                foreach (var interfaceType in entityInterfaces)
                {
                    if (!diagram.ContainsType(interfaceType))
                    {
                        continue;
                    }
                    if (!CanAddR(entityType, interfaceType))
                    {
                        continue;
                    }
                    var umlRelation = Inherits(interfaceType, entityType, diagram)
                                      .With(UmlArrowDirections.Up);
                    diagram.Relations.Add(umlRelation);
                }
            }
        }