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); }
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; }
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); }
protected abstract void Generate(ProcessedAssembly a);