private MethodViewModel CreateMethodSemantic( MethodReference methodRef, ViewModel parent, ModuleViewModel moduleViewModel, Dictionary <IMethodSignature, MethodDeclaration> methods) { if (methodRef == null) { return(null); } MethodDeclaration method; if (!methods.TryGetValue(methodRef, out method)) { return(null); } methods.Remove(methodRef); AD.ProjectMethod projectMethod; if (!moduleViewModel.ProjectModule.Methods.TryGetValue(methodRef, out projectMethod)) { projectMethod = new AD.ProjectMethod(); } return(new MethodViewModel(method, projectMethod, parent)); }
internal MethodViewModel(MethodDeclaration method, AD.ProjectMethod projectMethod, ViewModel parent) : base(parent) { _method = method; _projectMethod = projectMethod; Caption = NodePrinter.Print(method); Image = ProjectUtils.GetMethodImage(method); }
public MethodDetailsViewModel(MethodViewModel parent) : base(parent) { _projectMethod = Parent.ProjectMethod; _method = Parent.Method; _ownerType = _method.GetOwnerType(); _isVisibleOutsideAssembly = _method.IsVisibleOutsideAssembly(); _parentProperties = new NodeProperties(); _parentProperties.LoadParent(Parent); }
protected override void LoadChildren(List <NodeViewModel> children) { var moduleViewModel = FindParent <ModuleViewModel>(true); var projectModule = moduleViewModel.ProjectModule; // Load methods var methods = new Dictionary <IMethodSignature, MethodDeclaration>(SignatureComparer.IgnoreMemberOwner); foreach (var method in _type.Methods) { methods.Add(method, method); } // Load properties List <PropertyViewModel> propertyViewModels = null; if (_type.Properties.Count > 0) { propertyViewModels = new List <PropertyViewModel>(_type.Properties.Count); var projectProperties = projectModule.Properties; foreach (var property in _type.Properties) { AD.ProjectProperty projectProperty; if (!projectProperties.TryGetValue(property, out projectProperty)) { projectProperty = new AD.ProjectProperty(); } var propertyViewModel = new PropertyViewModel(property, projectProperty, this); propertyViewModel.AddMethods( CreateMethodSemantic(property.GetMethod, propertyViewModel, moduleViewModel, methods), CreateMethodSemantic(property.SetMethod, propertyViewModel, moduleViewModel, methods)); propertyViewModels.Add(propertyViewModel); } } // Load events List <EventViewModel> eventViewModels = null; if (_type.Events.Count > 0) { eventViewModels = new List <EventViewModel>(_type.Events.Count); var projectEvents = projectModule.Events; foreach (var e in _type.Events) { AD.ProjectEvent projectEvent; if (!projectEvents.TryGetValue(e, out projectEvent)) { projectEvent = new AD.ProjectEvent(); } var eventViewModel = new EventViewModel(e, projectEvent, this); eventViewModel.AddMethods( CreateMethodSemantic(e.AddMethod, eventViewModel, moduleViewModel, methods), CreateMethodSemantic(e.RemoveMethod, eventViewModel, moduleViewModel, methods), CreateMethodSemantic(e.InvokeMethod, eventViewModel, moduleViewModel, methods)); eventViewModels.Add(eventViewModel); } } // Add nested types if (_type.NestedTypes.Count > 0) { int index = children.Count; var projectTypes = projectModule.Types; foreach (var nestedType in _type.NestedTypes) { AD.ProjectType projectType; if (!projectTypes.TryGetValue(nestedType, out projectType)) { projectType = new AD.ProjectType(); } var typeViewModel = new TypeViewModel(nestedType, projectType, this); children.Add(typeViewModel); } children.Sort(index, children.Count - index, NodeComparer.Default); } // Add fields if (_type.Fields.Count > 0) { int index = children.Count; var projectFields = projectModule.Fields; foreach (var field in _type.Fields) { AD.ProjectField projectField; if (!projectFields.TryGetValue(field, out projectField)) { projectField = new AD.ProjectField(); } var fieldViewModel = new FieldViewModel(field, projectField, this); children.Add(fieldViewModel); } children.Sort(index, children.Count - index, NodeComparer.Default); } // Add methods if (methods.Count > 0) { int index = children.Count; var projectMethods = projectModule.Methods; foreach (var method in methods.Values) { AD.ProjectMethod projectMethod; if (!projectMethods.TryGetValue(method, out projectMethod)) { projectMethod = new AD.ProjectMethod(); } var methodViewModel = new MethodViewModel(method, projectMethod, this); children.Add(methodViewModel); } children.Sort(index, children.Count - index, NodeComparer.Default); } // Add properties if (propertyViewModels != null) { int index = children.Count; foreach (var propertyViewModel in propertyViewModels) { children.Add(propertyViewModel); } children.Sort(index, children.Count - index, NodeComparer.Default); } // Add events if (eventViewModels != null) { int index = children.Count; foreach (var eventViewModel in eventViewModels) { children.Add(eventViewModel); } children.Sort(index, children.Count - index, NodeComparer.Default); } }