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);
                }
            }
        }
示例#3
0
 public void Clone(CSharpObjectCollection coll)
 {
     coll.AddInterface(Name);
 }