public DeletedMethodUpdater(ModuleDocumentNode modNode, MethodDef originalMethod) { ownerNode = modNode.Context.DocumentTreeView.FindNode(originalMethod); if (ownerNode == null) throw new InvalidOperationException(); parentNode = ownerNode.TreeNode.Parent.Data; ownerType = originalMethod.DeclaringType; method = originalMethod; }
public EditedMethodUpdater(Lazy<IMethodAnnotations> methodAnnotations, ModuleDocumentNode modNode, MethodDef originalMethod, Emit.MethodBody newBody, MethodDefOptions methodDefOptions) { this.methodAnnotations = methodAnnotations; ownerNode = modNode.Context.DocumentTreeView.FindNode(originalMethod); if (ownerNode == null) throw new InvalidOperationException(); method = originalMethod; originalMethodState = new MethodState(originalMethod, methodAnnotations.Value.IsBodyModified(method)); newMethodState = new MethodState(newBody, methodDefOptions, true); }
EditMethodBodyILCommand(IMethodAnnotations methodAnnotations, MethodNode methodNode, MethodBodyOptions options) { this.methodAnnotations = methodAnnotations; this.methodNode = methodNode; newOptions = options; origMethodBody = methodNode.MethodDef.MethodBody; }
MethodDefSettingsCommand(MethodNode methodNode, MethodDefOptions options) { this.methodNode = methodNode; newOptions = options; origOptions = new MethodDefOptions(methodNode.MethodDef); origParentNode = (DocumentTreeNodeData)methodNode.TreeNode.Parent.Data; origParentChildIndex = origParentNode.TreeNode.Children.IndexOf(methodNode.TreeNode); Debug.Assert(origParentChildIndex >= 0); if (origParentChildIndex < 0) throw new InvalidOperationException(); nameChanged = origOptions.Name != newOptions.Name; if (nameChanged) memberRefInfos = RefFinder.FindMemberRefsToThisModule(methodNode.GetModule()).Where(a => RefFinder.MethodEqualityComparerInstance.Equals(a, methodNode.MethodDef)).Select(a => new Field.MemberRefInfo(a)).ToArray(); }
CreateMethodDefCommand(TypeNode ownerNode, MethodDefOptions options) { this.ownerNode = ownerNode; methodNode = ownerNode.Create(options.CreateMethodDef(ownerNode.TypeDef.Module)); }
DeleteMethodDefCommand(MethodNode[] methodNodes) { nodes = new DeletableNodes<MethodNode>(methodNodes); }
public void Restore(MethodNode[] nodes) { Debug.Assert(infos != null); if (infos == null) throw new InvalidOperationException(); Debug.Assert(infos.Length == nodes.Length); if (infos.Length != nodes.Length) throw new InvalidOperationException(); for (int i = infos.Length - 1; i >= 0; i--) { var node = nodes[i]; var info = infos[i]; info.OwnerType.Methods.Insert(info.MethodIndex, node.MethodDef); for (int j = info.PropEventInfos.Count - 1; j >= 0; j--) { var pinfo = info.PropEventInfos[i]; EventDef evt; switch (pinfo.PropEventType) { case ModelInfo.PropEventType.PropertyGetter: ((PropertyDef)pinfo.PropOrEvent).GetMethods.Insert(pinfo.Index, node.MethodDef); break; case ModelInfo.PropEventType.PropertySetter: ((PropertyDef)pinfo.PropOrEvent).SetMethods.Insert(pinfo.Index, node.MethodDef); break; case ModelInfo.PropEventType.PropertyOther: ((PropertyDef)pinfo.PropOrEvent).OtherMethods.Insert(pinfo.Index, node.MethodDef); break; case ModelInfo.PropEventType.EventAdd: evt = (EventDef)pinfo.PropOrEvent; Debug.Assert(evt.AddMethod == null); if (evt.AddMethod != null) throw new InvalidOperationException(); evt.AddMethod = node.MethodDef; break; case ModelInfo.PropEventType.EventInvoke: evt = (EventDef)pinfo.PropOrEvent; Debug.Assert(evt.InvokeMethod == null); if (evt.InvokeMethod != null) throw new InvalidOperationException(); evt.InvokeMethod = node.MethodDef; break; case ModelInfo.PropEventType.EventRemove: evt = (EventDef)pinfo.PropOrEvent; Debug.Assert(evt.RemoveMethod == null); if (evt.RemoveMethod != null) throw new InvalidOperationException(); evt.RemoveMethod = node.MethodDef; break; case ModelInfo.PropEventType.EventOther: ((EventDef)pinfo.PropOrEvent).OtherMethods.Insert(pinfo.Index, node.MethodDef); break; default: throw new InvalidOperationException(); } } } infos = null; }
public void Delete(MethodNode[] nodes) { Debug.Assert(infos == null); if (infos != null) throw new InvalidOperationException(); infos = new ModelInfo[nodes.Length]; for (int i = 0; i < infos.Length; i++) { var node = nodes[i]; var info = new ModelInfo(node.MethodDef); infos[i] = info; foreach (var prop in info.OwnerType.Properties) { info.AddMethods(prop, ModelInfo.PropEventType.PropertyGetter, prop.GetMethods, node.MethodDef); info.AddMethods(prop, ModelInfo.PropEventType.PropertySetter, prop.SetMethods, node.MethodDef); info.AddMethods(prop, ModelInfo.PropEventType.PropertyOther, prop.OtherMethods, node.MethodDef); } foreach (var evt in info.OwnerType.Events) { if (evt.AddMethod == node.MethodDef) { evt.AddMethod = null; info.PropEventInfos.Add(new ModelInfo.PropEventInfo(evt, ModelInfo.PropEventType.EventAdd, -1)); } if (evt.InvokeMethod == node.MethodDef) { evt.InvokeMethod = null; info.PropEventInfos.Add(new ModelInfo.PropEventInfo(evt, ModelInfo.PropEventType.EventInvoke, -1)); } if (evt.RemoveMethod == node.MethodDef) { evt.RemoveMethod = null; info.PropEventInfos.Add(new ModelInfo.PropEventInfo(evt, ModelInfo.PropEventType.EventRemove, -1)); } info.AddMethods(evt, ModelInfo.PropEventType.EventOther, evt.OtherMethods, node.MethodDef); } info.OwnerType.Methods.RemoveAt(info.MethodIndex); } }
public MethodNodeCreator(ModuleDocumentNode modNode, TypeNode ownerNode, MethodDef method) { this.ownerNode = ownerNode; methodNode = modNode.Context.DocumentTreeView.Create(method); }