private bool HasCycle(Composite originalSubtype, Interface currentSupertype, HashSet<Interface> supertypes, Dictionary<Composite, List<Inheritance>> inheritancesBySubtype) { if (originalSubtype is Interface && supertypes.Contains((Interface)originalSubtype)) { return true; } if (!supertypes.Contains(currentSupertype)) { supertypes.Add(currentSupertype); List<Inheritance> currentSuperInheritances; if (inheritancesBySubtype.TryGetValue(currentSupertype, out currentSuperInheritances)) { foreach (var inheritance in currentSuperInheritances) { var newSupertype = inheritance.Supertype; if (newSupertype != null) { if (this.HasCycle(originalSubtype, newSupertype, supertypes, inheritancesBySubtype)) { return true; } } } } } return false; }
internal void OnInterfaceCreated(Interface @interface) { this.interfaces.Add(@interface); this.metaObjectById.Add(@interface.Id, @interface); this.Stale(); }