private void DetermineExtensionAndComposition(ClassDeclarationSyntax c, CSharpObjectCollection coll) { if (c.BaseList != null) { foreach (var baseType in c.BaseList.Types) { coll.SetExtends(c.Identifier.ToString(), baseType.Type.ToString()); log?.Invoke($"{c.Identifier.ToString()} extends {baseType.Type.ToString()}"); } } foreach (var member in c.Members) { if (member is FieldDeclarationSyntax) { try { var visibility = GetVisibility(member as FieldDeclarationSyntax); var field = member as FieldDeclarationSyntax; var type = field.Declaration.Type; if (type is IdentifierNameSyntax) { coll.SetAssociation( c.Identifier.ToString(), (type as IdentifierNameSyntax).Identifier.Text, visibility); log?.Invoke( $"{c.Identifier.ToString()} associates to {(type as IdentifierNameSyntax).Identifier.Text}"); } else if (type is GenericNameSyntax) { coll.SetAssociation( c.Identifier.ToString(), (type as GenericNameSyntax).Identifier.Text, visibility); foreach (var arg in (type as GenericNameSyntax).TypeArgumentList.Arguments) { coll.SetAssociation(c.Identifier.ToString(), arg.ToString(), visibility); log?.Invoke($"{c.Identifier.ToString()} associates to {arg.ToString()}"); } } } catch (Exception e) { log?.Invoke(e.ToString()); } } } }
public void Clone(CSharpObjectCollection coll, Settings settings) { coll.AddClass(Name); foreach (var c in ClassAssociations) { if ( (c.Visibility == CSharpVisibility.Public && settings.IncludePublicAssociations) || (c.Visibility == CSharpVisibility.Protected && settings.IncludeProtectedAssociations) || (c.Visibility == CSharpVisibility.Internal && settings.IncludeInternalAssociations) || (c.Visibility == CSharpVisibility.Private && settings.IncludePrivateAssociations) ) { if (!coll.ClassExists(c.Class.Name)) { c.Class.Clone(coll, settings); } coll.SetAssociation(Name, c.Class.Name, c.Visibility); } } if (settings.IncludeInheritance) { foreach (var i in Implements) { if (!coll.InterfaceExists(i.Name)) { coll.AddInterface(i.Name); } coll.SetExtends(Name, i.Name); } if (Derives != null) { if (!coll.ClassExists(Derives.Name)) { Derives.Clone(coll, settings); } coll.SetExtends(Name, Derives.Name); } } }