private UmlType UpdateTypeInArray(ArrayList Types, Type t, string typename) { // resolve kind UmlKind kind = UmlKind.Class; if (t.IsInterface) { kind = UmlKind.Interface; } else if (t.IsEnum) { kind = UmlKind.Enum; } else if (t.IsValueType) { kind = UmlKind.Struct; } // search existing or create a new UmlType found = null; foreach (UmlType e in Types) { if (e.name.Equals(typename)) { found = e; break; } } recreate: if (found == null) { if (kind == UmlKind.Enum) { found = new UmlEnum(); } else { found = new UmlClass(); ((UmlClass)found).kind = kind; } found.name = typename; Types.Add(found); } else { if (found.Kind == UmlKind.Enum && kind != UmlKind.Enum || found.Kind != UmlKind.Enum && kind == UmlKind.Enum) { Types.Remove(found); found = null; goto recreate; } if (found.Kind != UmlKind.Enum) { ((UmlClass)found).kind = kind; } found.Deleted = false; } return(found); }
private UmlMember GetMember( string name, string signature, ModifiersNode mod, UmlKind kind, UmlClass cl ) { UmlMember member = null; if( cl.Members == null ) cl.Members = new ArrayList(); else foreach( UmlMember m in cl.Members ) if( m.signature.Equals( signature ) ) { member = m; break; } recreate: if( member == null ) { switch( kind ) { case UmlKind.Constant: member = new UmlConstant(); break; case UmlKind.Field: member = new UmlField(); break; case UmlKind.Method: member = new UmlMethod(); break; case UmlKind.Property: member = new UmlProperty(); break; case UmlKind.Event: member = new UmlEvent(); break; case UmlKind.Indexer: member = new UmlIndexer(); break; case UmlKind.Operator: member = new UmlOperator(); break; case UmlKind.Constructor:member = new UmlConstructor(); break; case UmlKind.Destructor:member = new UmlDestructor(); break; } System.Diagnostics.Debug.Assert( member != null, "unknown Member kind" ); member.signature = signature; member.name = name; cl.Members.Add( member ); } else { if( member.Kind != kind ) { cl.Members.Remove( member ); member = null; goto recreate; } member.Deleted = false; } member.visibility = cl.Kind == UmlKind.Interface ? UmlVisibility.Public : UmlVisibility.Private; if( mod != null ) { if( (mod.value & (int)Modifiers.Internal) != 0 && (mod.value & (int)Modifiers.Protected) != 0 ) member.visibility = UmlVisibility.ProtectedInternal; else if( (mod.value & (int)Modifiers.Internal) != 0 ) member.visibility = UmlVisibility.Internal; else if( (mod.value & (int)Modifiers.Protected) != 0 ) member.visibility = UmlVisibility.Protected; else if( (mod.value & (int)Modifiers.Public) != 0 ) member.visibility = UmlVisibility.Public; else if( (mod.value & (int)Modifiers.Private) != 0 ) member.visibility = UmlVisibility.Private; if( (mod.value & (int)Modifiers.Static) != 0 ) member.IsStatic = true; if( (mod.value & (int)Modifiers.Abstract) != 0 ) member.IsAbstract = true; } return member; }