public void RemoveMethod(IMethodHolder <TNode> owner, ResolvedMethodId methodId) { var method = owner.FindLocalMethod(methodId); var toRemove = method.Methods.Keys.ToList(); foreach (var localFunction in toRemove) { RemoveMethod(method, localFunction); } var toDelete = method.GetOwnedNodes(); foreach (var node in toDelete) { RemoveVertex(node); myOnNodeRemovedHandler(node); } var exists = owner.RemoveMethod(methodId); Trace.Assert(exists); }
public ResolvedMethod <TNode> GetOrCreateMethod(IMethodHolder <TNode> owner, string name) { var rawMethodId = Methods.FindOrAdd(name); var methodId = new ResolvedMethodId(rawMethodId); var method = owner.FindLocalMethod(methodId); if (method == null) { var start = myNodesProvider(); var end = myNodesProvider(); AddVertex(start); AddVertex(end); method = new ResolvedMethod <TNode>(methodId, start, end); owner.AddMethod(methodId, method); return(method); } return(method); }