public CSharpObjectCollection AnalyzeFiles(IEnumerable <string> files) { var visitor = new CSharpVisitor(); var coll = new CSharpObjectCollection(); // Pass 1 - add all classes and interfaces found in the files. visitor.HandleClass = c => { var name = c.Identifier.ToString(); coll.AddClass(name); log?.Invoke($"Class: {name}"); }; visitor.HandleInterface = i => { var name = i.Identifier.ToString(); coll.AddInterface(name); log?.Invoke($"Interface: {name}"); }; foreach (var file in files) { visitor.Visit(file); } // Pass 2 - handle extension and composition for all classes found in the files. visitor.HandleClass = c => DetermineExtensionAndComposition(c, coll); visitor.HandleInterface = null; foreach (var file in files) { visitor.Visit(file); } return(coll); }
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); } } }
public void Clone(CSharpObjectCollection coll) { coll.AddInterface(Name); }