void InsertSortedAddin(HashSet<string> inserted, Dictionary<string,List<AddinDescription>> lists, AddinDescription desc)
{
string sid = desc.AddinId + " " + desc.Domain;
if (!inserted.Add (sid))
return;
foreach (ModuleDescription mod in desc.AllModules) {
foreach (Dependency dep in mod.Dependencies) {
AddinDependency adep = dep as AddinDependency;
if (adep == null)
continue;
var descs = FindDescriptions (desc.Domain, adep.FullAddinId);
if (descs.Count > 0) {
foreach (AddinDescription sd in descs)
InsertSortedAddin (inserted, lists, sd);
}
}
}
List<AddinDescription> list;
if (!lists.TryGetValue (desc.Domain, out list))
lists [desc.Domain] = list = new List<AddinDescription> ();
list.Add (desc);
}