예제 #1
0
        bool AddIfUnique(ProcessedAssembly assembly)
        {
            if (assembly_name.Contains(assembly.Name))
            {
                return(false);
            }
            if (assembly_safename.Contains(assembly.SafeName))
            {
                return(false);
            }

            Assemblies.Add(assembly);
            assembly_name.Add(assembly.Name);
            assembly_safename.Add(assembly.SafeName);
            return(true);
        }
예제 #2
0
        public virtual void Process(IEnumerable <Assembly> input)
        {
            foreach (var a in input)
            {
                var pa = new ProcessedAssembly(a)
                {
                    UserCode = true,
                };
                // ignoring/warning one is not an option as they could be different (e.g. different builds/versions)
                if (!AddIfUnique(pa))
                {
                    throw ErrorHelper.CreateError(12, $"The assembly name `{pa.Name}` is not unique");
                }
                assemblyQueue.Enqueue(pa);
            }

            while (assemblyQueue.Count > 0)
            {
                Process(assemblyQueue.Dequeue());
            }
            processing_ended = true;
        }
예제 #3
0
        public void Process(ProcessedAssembly a)
        {
            if (!a.UserCode)
            {
                return;
            }

            foreach (var t in GetTypes(a.Assembly))
            {
                var pt = new ProcessedType(t)
                {
                    Assembly = a,
                };
                Types.Add(pt);

                foreach (var nt in t.GetNestedTypes())
                {
                    var pnt = new ProcessedType(nt)
                    {
                        Assembly = a
                    };
                    Types.Add(pnt);
                }
            }

            // we can add new types while processing some (e.g. categories)
            foreach (var type in Types)
            {
                typeQueue.Enqueue(type);
            }
            Types.Clear();              // reuse
            while (typeQueue.Count > 0)
            {
                Process(typeQueue.Dequeue());
            }
        }
 public bool Equals(ProcessedAssembly other)
 {
     return(Assembly == other?.Assembly);
 }
예제 #5
0
 protected abstract void Generate(ProcessedAssembly a);