Beispiel #1
0
        private void ExportMethodNode(MethodTreeNode rootNode)
        {
            if (rootNode == null)
            {
                CommonMethod.ErrorMsgBox("没有选择需要输出的模型节点");
                return;
            }

            Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
            dlg.Filter = filter;
            if (dlg.ShowDialog() == true)
            {
                //在temp目录中创建rfdi目录
                string rfdiDir = Path.Combine(Path.GetTempPath(), "rfdi_nodeExport");
                if (!Directory.Exists(rfdiDir))
                {
                    Directory.CreateDirectory(rfdiDir);
                }

                CreateZipFileTree(rootNode, rfdiDir);

                if (File.Exists(dlg.FileName))      //如果压缩文件存在,删除该文件
                {
                    File.Delete(dlg.FileName);
                }

                using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile(dlg.FileName, Encoding.GetEncoding(SettingData.UTF8)))
                {
                    zip.AddDirectory(rfdiDir);
                    zip.Save();
                }

                Directory.Delete(rfdiDir, true);
            }
        }
Beispiel #2
0
        //根据内容来选择, 药品名 - 厂家 - 包装
        public bool SelectNode(DrugInfo infoToFind)
        {
            MethodTreeNode chemicalInfo = rootItem.Children.Find(item => item.Name == infoToFind.chemicalName);

            if (chemicalInfo == null)
            {
                return(false);
            }

            MethodTreeNode productInfo = chemicalInfo.Children.Find(item => item.Name == infoToFind.productUnit);

            if (productInfo == null)
            {
                return(false);
            }

            MethodTreeNode packInfo = productInfo.Children.Find(item => item.Name == infoToFind.package);

            if (packInfo == null)
            {
                return(false);
            }

            if (packInfo.Method != infoToFind.ramanMethod)
            {
                return(false);
            }

            packInfo.IsExpanded = true;
            packInfo.IsSelected = true;

            return(true);
        }
Beispiel #3
0
        public MethodInfo Method(MethodDefinition methodDefinition)
        {
            if (_methodCorrespondence.ContainsKey(methodDefinition))
            {
                return(_methodCorrespondence[methodDefinition]);
            }

            var methodInfo = new MethodInfo
            {
                Text                   = MethodTreeNode.GetText(methodDefinition, MainWindow.Instance.CurrentLanguage) as string,
                Name                   = methodDefinition.Name,
                FullName               = methodDefinition.FullName,
                Icon                   = MethodTreeNode.GetIcon(methodDefinition),
                IsInternal             = methodDefinition.IsAssembly,
                IsPrivate              = methodDefinition.IsPrivate,
                IsPublic               = methodDefinition.IsPublic,
                IsProtected            = methodDefinition.IsFamily,
                IsProtectedAndInternal = methodDefinition.IsFamilyAndAssembly,
                IsProtectedOrInternal  = methodDefinition.IsFamilyOrAssembly,
                IsVirtual              = methodDefinition.IsVirtual,
                IsSpecialName          = methodDefinition.IsSpecialName,
                IsOverride             = IsOverride(methodDefinition),
                IsStatic               = methodDefinition.IsStatic,
                IsFinal                = methodDefinition.IsFinal,
                MemberReference        = methodDefinition
            };

            _methodCorrespondence.Add(methodDefinition, methodInfo);

            return(methodInfo);
        }
Beispiel #4
0
        /// <summary>
        /// 样品检测时搜索当前药品模型信息
        /// </summary>
        /// <param name="chemicalName">药品名称</param>
        /// <param name="packageName">包装名称</param>
        /// <returns></returns>
        public MethodTreeNode SearchFromNewSample(string chemicalName, string packageName)
        {
            MethodTreeNode chemidcalNode = SearchCurNode(rootItem, chemicalName, false);

            if (chemidcalNode == null)
            {
                return(null);
            }

            MethodTreeNode packageNode = SearchCurNode(chemidcalNode, packageName, false);

            if (packageNode == null)
            {
                return(chemidcalNode);
            }

            if (packageNode.Children != null && packageNode.Children.Count > 0)
            {
                ExpandTreeNode(packageNode, true);
                MethodTreeNode firstNode = packageNode.Children[0];
                firstNode.IsSelected = true;

                return(firstNode);
            }
            else
            {
                return(null);
            }
        }
Beispiel #5
0
        private void treeDatabase_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs <object> e)
        {
            if (e != null && e.NewValue != null)
            {
                SelectedNode = e.NewValue as MethodTreeNode;
            }
            else
            {
                SelectedNode = null;
            }

            if (SelectedNode == null || SelectedNode.Method == null)
            {
                txtMethodName.Text = null;
                panelScanParameter.SetScanParameter(null);
            }
            else
            {
                txtMethodName.Text = SelectedNode.Method.methodFile;
                panelScanParameter.SetScanParameter(SelectedNode.Method.scanPara);
            }
            RoutedEventArgs args = new RoutedEventArgs();

            args.RoutedEvent = MethodSelectEvent;
            args.Source      = this;
            RaiseEvent(args);
        }
 public override TreeViewNodeFilterResult GetFilterResult(MethodDef method)
 {
     if (showPublicApi() && !MethodTreeNode.IsPublicAPIInternal(method))
     {
         return(new TreeViewNodeFilterResult(FilterResult.Hidden, false));
     }
     return(base.GetFilterResult(method));
 }
Beispiel #7
0
        //导出模型树
        private bool CreateZipFileTree(MethodTreeNode currentNode, string parentDirectory)
        {
            if (currentNode == null)
            {
                return(true);
            }

            //创建当前节点的目录, 从1开始顺序增加
            string nodename = (currentNode.Name == null) ? "TREEVIEW_ROOT" : currentNode.Name;
            int    index    = 1;

            //去除文件名中非法字符,防止错误
            char[] badchar = new char[] { '〃', '/', ':', '?', '〈', '〉', '*', '\\' };
            foreach (char st in badchar)
            {
                nodename = nodename.Replace(st, '-');
            }

            string nodedir = Path.Combine(parentDirectory, nodename);

            while (Directory.Exists(nodedir))   //为了防止目录名称重复,在重复的目录后面增加序号
            {
                nodedir = Path.Combine(parentDirectory, nodename + index);
                index++;
            }
            Directory.CreateDirectory(nodedir);

            //在当前节点目录下用methodnode.name记录本节点的名称
            string       namefile = Path.Combine(nodedir, "methodnode.name");
            StreamWriter writer   = new StreamWriter(namefile, false, Encoding.GetEncoding(SettingData.UTF8));

            writer.WriteLine(nodename);
            writer.Close();

            //是模型信息, 需要拷贝相应的模型文件和引用光谱文件,并做相应处理
            if (currentNode.Method != null)
            {
                if (CopyMethodFiles(currentNode.Method, nodedir) == false)
                {
                    return(false);
                }
            }

            //是模型节点,继续处理下一级节点
            if (currentNode.Children != null)
            {
                foreach (MethodTreeNode node in currentNode.Children)
                {
                    if (CreateZipFileTree(node, nodedir) == false)
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
Beispiel #8
0
        void Search(DnSpyFile ownerModule, TypeDef type, MethodDef method)
        {
            var res = filter.GetFilterResult(method);

            if (res.FilterResult == FilterResult.Hidden)
            {
                return;
            }

            ImplMap im;

            if (res.IsMatch && (IsMatch(method.Name, method) || ((im = method.ImplMap) != null && (IsMatch(im.Name, im) || IsMatch(im.Module == null ? null : im.Module.Name, null)))))
            {
                onMatch(new SearchResult {
                    Language          = language,
                    Object            = method,
                    NameObject        = method,
                    TypeImageInfo     = MethodTreeNode.GetImageInfo(method, BackgroundType.Search),
                    LocationObject    = type,
                    LocationImageInfo = TypeTreeNode.GetImageInfo(type, BackgroundType.Search),
                    DnSpyFile         = ownerModule,
                });
                return;
            }

            res = filter.GetFilterResultParamDefs(method);
            if (res.FilterResult != FilterResult.Hidden)
            {
                foreach (var pd in method.ParamDefs)
                {
                    res = filter.GetFilterResult(method, pd);
                    if (res.FilterResult == FilterResult.Hidden)
                    {
                        continue;
                    }
                    if (res.IsMatch && IsMatch(pd.Name, pd))
                    {
                        onMatch(new SearchResult {
                            Language          = language,
                            Object            = method,
                            NameObject        = method,
                            TypeImageInfo     = MethodTreeNode.GetImageInfo(method, BackgroundType.Search),
                            LocationObject    = type,
                            LocationImageInfo = TypeTreeNode.GetImageInfo(type, BackgroundType.Search),
                            DnSpyFile         = ownerModule,
                        });
                        return;
                    }
                }
            }

            SearchBody(ownerModule, type, method);
        }
 protected override void Write(ITextOutput output, Language language)
 {
     if (hidesParent)
     {
         output.Write('(', TextTokenType.Operator);
         output.Write("hides", TextTokenType.Text);
         output.Write(')', TextTokenType.Operator);
         output.WriteSpace();
     }
     Language.TypeToString(output, analyzedMethod.DeclaringType, true);
     output.Write('.', TextTokenType.Operator);
     MethodTreeNode.Write(output, analyzedMethod, Language);
 }
Beispiel #10
0
        //展开或者收缩一个Node
        private void ExpandTreeNode(MethodTreeNode parentData, bool expand)
        {
            if (parentData == null)
            {
                return;
            }

            foreach (MethodTreeNode item in parentData.Children)
            {
                item.IsExpanded = expand;
                ExpandTreeNode(item, expand);
            }
        }
Beispiel #11
0
        void Search(LoadedAssembly ownerModule, TypeDef type, MethodDef method)
        {
            var res = filter.GetFilterResult(method);

            if (res.FilterResult == FilterResult.Hidden)
            {
                return;
            }

            if (res.IsMatch && IsMatch(method.Name, method))
            {
                onMatch(new SearchResult {
                    Language          = language,
                    Object            = method,
                    NameObject        = method,
                    TypeImageInfo     = MethodTreeNode.GetImageInfo(method, BackgroundType.Search),
                    LocationObject    = type,
                    LocationImageInfo = TypeTreeNode.GetImageInfo(type, BackgroundType.Search),
                    LoadedAssembly    = ownerModule,
                });
                return;
            }

            res = filter.GetFilterResultParamDefs(method);
            if (res.FilterResult != FilterResult.Hidden)
            {
                foreach (var pd in method.ParamDefs)
                {
                    res = filter.GetFilterResult(method, pd);
                    if (res.FilterResult == FilterResult.Hidden)
                    {
                        continue;
                    }
                    if (res.IsMatch && IsMatch(pd.Name, pd))
                    {
                        onMatch(new SearchResult {
                            Language          = language,
                            Object            = method,
                            NameObject        = method,
                            TypeImageInfo     = MethodTreeNode.GetImageInfo(method, BackgroundType.Search),
                            LocationObject    = type,
                            LocationImageInfo = TypeTreeNode.GetImageInfo(type, BackgroundType.Search),
                            LoadedAssembly    = ownerModule,
                        });
                        return;
                    }
                }
            }

            SearchBody(ownerModule, type, method);
        }
Beispiel #12
0
        private void btnImport_Click(object sender, RoutedEventArgs e)
        {
            if (treeMethod.SelectedNode == null || treeMethod.SelectedNode.Method != null)
            {
                CommonMethod.ErrorMsgBox("请选择类型节点后再导入模型");
                return;
            }
            MethodTreeNode importNode = ImportMethodPackageFile();

            if (importNode == null)
            {
                return;
            }

            treeMethod.AddNodeFromPackage(treeMethod.SelectedNode, importNode);
        }
Beispiel #13
0
        //删除节点
        public void DeleteNode(MethodTreeNode delNode)
        {
            if (delNode == null || delNode.Parent == null || delNode == rootItem)
            {
                return;
            }

            //从数据库中删除
            using (DBConnection db = new DBConnection())
            {
                db.DeleteTreeNode(delNode);
            }

            delNode.Parent.Children.Remove(delNode);
            treeDatabase.Items.Refresh();
        }
Beispiel #14
0
        MethodDefSettingsCommand(MethodTreeNode methodNode, MethodDefOptions options)
        {
            this.methodNode  = methodNode;
            this.newOptions  = options;
            this.origOptions = new MethodDefOptions(methodNode.MethodDefinition);

            this.origParentNode       = (ILSpyTreeNode)methodNode.Parent;
            this.origParentChildIndex = this.origParentNode.Children.IndexOf(methodNode);
            Debug.Assert(this.origParentChildIndex >= 0);
            if (this.origParentChildIndex < 0)
            {
                throw new InvalidOperationException();
            }

            this.nameChanged = origOptions.Name != newOptions.Name;
        }
Beispiel #15
0
        public MethodTreeNode FindNodeWithMethodInfo(MethodTreeNode parent, MethodInfo info)
        {
            if (info == null || parent == null)
            {
                return(null);
            }

            if (parent.Method != null)
            {
                //比较Raman方法
                if (String.Compare(parent.Method.methodFile, info.methodFile, true) == 0)
                {
                    //比较组分
                    if (parent.Method.components.Count == info.components.Count)
                    {
                        bool found = false;
                        for (int i = 0; i < parent.Method.components.Count; i++)     //查看是否有不相同的组分
                        {
                            if (!parent.Method.components[i].IsSameComponent(info.components[i]))
                            {
                                found = true;
                                break;
                            }
                        }
                        if (!found)  //没找到不同,表示已经找到该方法
                        {
                            return(parent);
                        }
                    }
                }
            }

            if (parent.Children != null)
            {
                foreach (MethodTreeNode childnode in parent.Children)
                {
                    MethodTreeNode foundnode = FindNodeWithMethodInfo(childnode, info);
                    if (foundnode != null)
                    {
                        return(foundnode);
                    }
                }
            }
            return(null);
        }
Beispiel #16
0
        //编辑时的确认按钮
        private void gridOkCancel_OKClicked(object sender, RoutedEventArgs e)
        {
            MethodTreeNode newNode = null;

            switch (newNodeType)
            {
            case 0:         //新增同级目录
            case 1:         //新增子目录
                if (txtItemName.Text == null || txtItemName.Text.Trim() == "")
                {
                    CommonMethod.ErrorMsgBox("请输入类型节点的名称");
                    return;
                }

                newNode      = new MethodTreeNode();
                newNode.Name = txtItemName.Text;
                treeMethod.AddNode(newNode, false);         //永远是增加下一层节点
                break;

            case 2:       //新增模型信息
                if (!methodPanel.UpdateData())
                {
                    return;
                }

                newNode        = new MethodTreeNode();
                newNode.Method = newMethodInfo;
                treeMethod.AddNode(newNode, false);        //永远是增加下一层节点
                break;

            case 3:         //修改当前目录
                SelectedNode.Name = txtItemName.Text;
                treeMethod.ModifyNode(SelectedNode);
                break;

            case 4:         //修改当前模型信息
                methodPanel.UpdateData();
                SelectedNode.Method = newMethodInfo;
                treeMethod.ModifyNode(SelectedNode);
                break;
            }
            NodeSelectChanged();
        }
Beispiel #17
0
        //搜索父目录中排列在当前目录后面的目录(index+1)
        private MethodTreeNode SearchParent(MethodTreeNode curNode, string searchStr)
        {
            if (curNode.Parent == null)
            {
                return(null);
            }

            int index = curNode.Parent.Children.IndexOf(curNode);               //当前目录的序号

            for (int i = index + 1; i < curNode.Parent.Children.Count; i++)     //从下一个开始搜索
            {
                MethodTreeNode foundNode = SearchCurNode(curNode.Parent.Children[i], searchStr, true);
                if (foundNode != null)
                {
                    return(foundNode);
                }
            }
            return(SearchParent(curNode.Parent, searchStr));
        }
Beispiel #18
0
        //增加节点或者模型
        public void AddNode(MethodTreeNode newNode, bool sameLevel)
        {
            if (SelectedNode == null)
            {
                newNode.Parent   = rootItem;
                newNode.parentID = 0;
                rootItem.Children.Add(newNode);
            }
            else
            {
                if (sameLevel)
                {
                    newNode.Parent   = SelectedNode.Parent;
                    newNode.parentID = SelectedNode.parentID;
                    SelectedNode.Parent.Children.Add(newNode);
                }
                else
                {
                    newNode.Parent   = SelectedNode;
                    newNode.parentID = SelectedNode.ID;
                    SelectedNode.Children.Add(newNode);
                }
            }

            newNode.IsExpanded = true;
            newNode.IsSelected = true;

            treeDatabase.Items.Refresh();

            //插入到数据库中
            using (DBConnection db = new DBConnection())
            {
                if (newNode.Method == null)         //插入树节点
                {
                    db.InsertTreeNode(newNode);
                }
                else        //插入模型信息
                {
                    newNode.Method.nodeID = newNode.parentID;
                    db.InsertMethodInfo(newNode.Method);
                }
            }
        }
Beispiel #19
0
        //修改节点
        public void ModifyNode(MethodTreeNode modifyNode)
        {
            if (modifyNode == rootItem)
            {
                return;
            }

            //从数据库中删除
            using (DBConnection db = new DBConnection())
            {
                if (modifyNode.Method == null)
                {
                    db.UpdateTreeNode(modifyNode);
                }
                else
                {
                    db.UpdateMethodInfo(modifyNode.Method);
                }
            }
        }
Beispiel #20
0
        MethodDefSettingsCommand(MethodTreeNode methodNode, MethodDefOptions options)
        {
            this.methodNode  = methodNode;
            this.newOptions  = options;
            this.origOptions = new MethodDefOptions(methodNode.MethodDef);

            this.origParentNode       = (ILSpyTreeNode)methodNode.Parent;
            this.origParentChildIndex = this.origParentNode.Children.IndexOf(methodNode);
            Debug.Assert(this.origParentChildIndex >= 0);
            if (this.origParentChildIndex < 0)
            {
                throw new InvalidOperationException();
            }

            this.nameChanged = origOptions.Name != newOptions.Name;
            if (this.nameChanged)
            {
                this.memberRefInfos = RefFinder.FindMemberRefsToThisModule(ILSpyTreeNode.GetModule(methodNode)).Where(a => RefFinder.MethodEqualityComparerInstance.Equals(a, methodNode.MethodDef)).Select(a => new Field.MemberRefInfo(a)).ToArray();
            }
        }
Beispiel #21
0
        /// <summary>
        /// 将nodeToAdd下面的节点加载到parentNode下
        /// </summary>
        /// <param name="parentNode">父节点</param>
        /// <param name="packageNode">打包的节点</param>
        public void AddNodeFromPackage(MethodTreeNode parentNode, MethodTreeNode packageNode)
        {
            //将packageNode下面的节点添加到数据库中,不包含packageNode本身,以防止从ROOT导出的节点不能添加到ROOT下面
            foreach (MethodTreeNode subnode in packageNode.Children)
            {
                InsertNodeToDatabase(parentNode, subnode);
            }

            if (packageNode.Method != null)      //只是模型节点
            {
                parentNode.Children.Add(packageNode);
            }
            else    //是类型节点,放到当前类型节点下面
            {
                parentNode.Children.AddRange(packageNode.Children);
            }

            treeDatabase.Items.Refresh();
            parentNode.IsExpanded = true;
        }
Beispiel #22
0
        private MethodTreeNode SearchNodeFromInfo(MethodTreeNode parentItem, DrugInfo infoToFind)
        {
            if (parentItem == null || infoToFind == null)
            {
                return(null);
            }
            if (parentItem.Method == infoToFind.ramanMethod)
            {
                return(parentItem);
            }

            foreach (MethodTreeNode subItem in parentItem.Children)
            {
                MethodTreeNode subNode = SearchNodeFromInfo(subItem, infoToFind);
                if (subNode != null)
                {
                    return(subNode);
                }
            }
            return(null);
        }
Beispiel #23
0
        public DatabaseTree()
        {
            InitializeComponent();

            if ((bool)DesignerProperties.IsInDesignModeProperty.GetMetadata(typeof(DependencyObject)).DefaultValue == false)    //设计模式不可用
            {
                rootItem = SettingData.rootMethodTreeNode;
            }
            else
            {
                rootItem = new MethodTreeNode();
            }
            rootItem.parentID = 0;

            //新建临时根节点tempRootItem,让rootItem成为tempRootItem的唯一子节点,在树图中显示rootItem,这样方便操作
            MethodTreeNode tempRootItem = new MethodTreeNode();

            rootItem.Name = "ROOT";
            tempRootItem.Children.Add(rootItem);
            treeDatabase.ItemsSource = tempRootItem.Children;
        }
Beispiel #24
0
        //在当前目录及其子目录下搜索内容, useIndexOf:True=包含字符串,False=等于字符串
        private MethodTreeNode SearchCurNode(MethodTreeNode curNode, string searchStr, bool useIndexOf)
        {
            if (useIndexOf)
            {
                if (curNode.Name.IndexOf(searchStr, 0, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    return(curNode);
                }
            }
            else
            {
                //模型名称前面有可能会包含001-这样的字符
                string realName;
                int    i = curNode.Name.IndexOf('-');
                if (i < 6 && i < curNode.Name.Length - 1)
                {
                    realName = curNode.Name.Substring(i + 1);
                }
                else
                {
                    realName = curNode.Name;
                }

                if (realName.Equals(searchStr, StringComparison.OrdinalIgnoreCase) == true)
                {
                    return(curNode);
                }
            }
            foreach (MethodTreeNode node in curNode.Children)
            {
                MethodTreeNode foundNode = SearchCurNode(node, searchStr, useIndexOf);
                if (foundNode != null)
                {
                    return(foundNode);
                }
            }

            return(null);
        }
Beispiel #25
0
        /// <summary>
        /// 将节点数添加到数据库中,同时更新ID和parentID
        /// </summary>
        /// <param name="parentNode">父节点</param>
        /// <param name="nodeToInsert">当前需要添加的节点</param>
        private void InsertNodeToDatabase(MethodTreeNode parentNode, MethodTreeNode nodeToInsert)
        {
            nodeToInsert.parentID = parentNode.ID;
            nodeToInsert.Parent   = parentNode;
            using (DBConnection db = new DBConnection())
            {
                if (nodeToInsert.Method != null)                //如果包含模型信息,需要插入模型信息表
                {
                    nodeToInsert.Method.nodeID = parentNode.ID; //指明这是属于nodetToInsert的方法信息
                    db.InsertMethodInfo(nodeToInsert.Method);
                }
                else
                {
                    db.InsertTreeNode(nodeToInsert);        //插入节点信息表
                }
            }

            foreach (MethodTreeNode subnode in nodeToInsert.Children)
            {
                InsertNodeToDatabase(nodeToInsert, subnode);
            }
        }
Beispiel #26
0
        IBitmap GetIcon(IEntity member)
        {
            switch (member)
            {
            case ITypeDefinition t:
                return(TypeTreeNode.GetIcon(t));

            case IField f:
                return(FieldTreeNode.GetIcon(f));

            case IProperty p:
                return(PropertyTreeNode.GetIcon(p));

            case IMethod m:
                return(MethodTreeNode.GetIcon(m));

            case IEvent e:
                return(EventTreeNode.GetIcon(e));

            default:
                throw new NotSupportedException(member?.GetType() + " not supported!");
            }
        }
Beispiel #27
0
            void PerformSearch(TypeDefinition type)
            {
                if (searchMode == SearchMode_Type && IsMatch(type.Name))
                {
                    AddResult(new SearchResult {
                        Member        = type,
                        Image         = TypeTreeNode.GetIcon(type),
                        Name          = language.TypeToString(type, includeNamespace: false),
                        LocationImage = type.DeclaringType != null ? TypeTreeNode.GetIcon(type.DeclaringType) : Images.Namespace,
                        Location      = type.DeclaringType != null ? language.TypeToString(type.DeclaringType, includeNamespace: true) : type.Namespace
                    });
                }

                foreach (TypeDefinition nestedType in type.NestedTypes)
                {
                    PerformSearch(nestedType);
                }

                if (searchMode == SearchMode_Type)
                {
                    return;
                }

                foreach (FieldDefinition field in type.Fields)
                {
                    if (IsMatch(field))
                    {
                        AddResult(new SearchResult {
                            Member        = field,
                            Image         = FieldTreeNode.GetIcon(field),
                            Name          = field.Name,
                            LocationImage = TypeTreeNode.GetIcon(type),
                            Location      = language.TypeToString(type, includeNamespace: true)
                        });
                    }
                }
                foreach (PropertyDefinition property in type.Properties)
                {
                    if (IsMatch(property))
                    {
                        AddResult(new SearchResult {
                            Member        = property,
                            Image         = PropertyTreeNode.GetIcon(property),
                            Name          = property.Name,
                            LocationImage = TypeTreeNode.GetIcon(type),
                            Location      = language.TypeToString(type, includeNamespace: true)
                        });
                    }
                }
                foreach (EventDefinition ev in type.Events)
                {
                    if (IsMatch(ev))
                    {
                        AddResult(new SearchResult {
                            Member        = ev,
                            Image         = EventTreeNode.GetIcon(ev),
                            Name          = ev.Name,
                            LocationImage = TypeTreeNode.GetIcon(type),
                            Location      = language.TypeToString(type, includeNamespace: true)
                        });
                    }
                }
                foreach (MethodDefinition method in type.Methods)
                {
                    switch (method.SemanticsAttributes)
                    {
                    case MethodSemanticsAttributes.Setter:
                    case MethodSemanticsAttributes.Getter:
                    case MethodSemanticsAttributes.AddOn:
                    case MethodSemanticsAttributes.RemoveOn:
                    case MethodSemanticsAttributes.Fire:
                        continue;
                    }
                    if (IsMatch(method))
                    {
                        AddResult(new SearchResult {
                            Member        = method,
                            Image         = MethodTreeNode.GetIcon(method),
                            Name          = method.Name,
                            LocationImage = TypeTreeNode.GetIcon(type),
                            Location      = language.TypeToString(type, includeNamespace: true)
                        });
                    }
                }
            }
 public StatementCompiler(MethodTreeNode node)
 {
     this.node = node;
 }
Beispiel #29
0
        void SearchBody(DnSpyFile ownerModule, TypeDef type, MethodDef method, out bool loadedBody)
        {
            loadedBody = false;
            CilBody body;

            var res = filter.GetFilterResultLocals(method);

            if (res.FilterResult != FilterResult.Hidden)
            {
                body = method.Body;
                if (body == null)
                {
                    return;                     // Return immediately. All code here depends on a non-null body
                }
                loadedBody = true;

                foreach (var local in body.Variables)
                {
                    res = filter.GetFilterResult(method, local);
                    if (res.FilterResult == FilterResult.Hidden)
                    {
                        continue;
                    }
                    if (res.IsMatch && IsMatch(local.Name, local))
                    {
                        onMatch(new SearchResult {
                            Language          = language,
                            Object            = method,
                            NameObject        = method,
                            TypeImageInfo     = MethodTreeNode.GetImageInfo(method, BackgroundType.Search),
                            LocationObject    = type,
                            LocationImageInfo = TypeTreeNode.GetImageInfo(type, BackgroundType.Search),
                            DnSpyFile         = ownerModule,
                        });
                        return;
                    }
                }
            }

            res = filter.GetFilterResultBody(method);
            if (res.FilterResult == FilterResult.Hidden)
            {
                return;
            }
            if (!res.IsMatch)
            {
                return;
            }

            body = method.Body;
            if (body == null)
            {
                return;                 // Return immediately. All code here depends on a non-null body
            }
            loadedBody = true;
            foreach (var instr in body.Instructions)
            {
                object operand;
                // Only check numbers and strings. Don't pass in any type of operand to IsMatch()
                switch (instr.OpCode.Code)
                {
                case Code.Ldc_I4_M1: operand = -1; break;

                case Code.Ldc_I4_0: operand = 0; break;

                case Code.Ldc_I4_1: operand = 1; break;

                case Code.Ldc_I4_2: operand = 2; break;

                case Code.Ldc_I4_3: operand = 3; break;

                case Code.Ldc_I4_4: operand = 4; break;

                case Code.Ldc_I4_5: operand = 5; break;

                case Code.Ldc_I4_6: operand = 6; break;

                case Code.Ldc_I4_7: operand = 7; break;

                case Code.Ldc_I4_8: operand = 8; break;

                case Code.Ldc_I4:
                case Code.Ldc_I4_S:
                case Code.Ldc_R4:
                case Code.Ldc_R8:
                case Code.Ldstr: operand = instr.Operand; break;

                default: operand = null; break;
                }
                if (operand != null && IsMatch(null, operand))
                {
                    onMatch(new SearchResult {
                        Language          = language,
                        Object            = method,
                        NameObject        = method,
                        TypeImageInfo     = MethodTreeNode.GetImageInfo(method, BackgroundType.Search),
                        LocationObject    = type,
                        LocationImageInfo = TypeTreeNode.GetImageInfo(type, BackgroundType.Search),
                        DnSpyFile         = ownerModule,
                    });
                    break;
                }
            }
        }
 protected override int CompareMethods(PropertyTreeNode x, MethodTreeNode y)
 {
     return(CompareByName(x, y));
 }
        void onReportOpened(object sender, EventArgs e)
        {
            BeginUpdate();

            ICoverageReport report = serviceContainer.GetService<ICoverageReportService>().Report;

            foreach (IAssembly assembly in report.GetAssemblies())
            {
                AssemblyTreeNode asmNode = new AssemblyTreeNode(assembly);
                Nodes.Add(asmNode);

                foreach (IClass dType in assembly.GetTypes())
                {
                    TreeNode namespaceNode = GetNamespaceNode(asmNode, dType);
                    ClassTreeNode classNode = new ClassTreeNode(dType);
                    namespaceNode.Nodes.Add(classNode);

                    Dictionary<string, PropertyTreeNode> props = new Dictionary<string, PropertyTreeNode>();
                    foreach (IMethod md in dType.GetMethods())
                    {
                        if (!Methods.isSpecial(md.Flags))
                        {
                            AddMethodTreeNode(classNode, md);
                            continue;
                        }

                        //has special meaning
                        MdSpecial mdSpecial = Methods.getMdSpecial(md.Name);
                        if (mdSpecial == MdSpecial.Unknown)
                        {
                            AddMethodTreeNode(classNode, md);
                            continue;
                        }

                        string propName = Methods.getMdSpecialName(md.Name);

                        PropertyTreeNode propertyNode;
                        if (!props.TryGetValue(propName, out propertyNode))
                        {
                            propertyNode = new PropertyTreeNode(propName);
                            props[propName] = propertyNode;
                            classNode.Nodes.Add(propertyNode);
                        }

                        MethodTreeNode mdNode = new MethodTreeNode(md);
                        mdNode.MethodName = mdSpecial.ToString().ToLowerInvariant();

                        switch (mdSpecial)
                        {
                            case MdSpecial.Get:
                                mdNode.ImageIndex = ImageSelector.forPropertyGet(md);
                                mdNode.SelectedImageIndex = ImageSelector.forPropertyGet(md);
                                propertyNode.Getter = mdNode;
                                break;
                            case MdSpecial.Remove:
                                mdNode.ImageIndex = ImageSelector.forEventRemove(md);
                                mdNode.SelectedImageIndex = ImageSelector.forEventRemove(md);
                                propertyNode.Getter = mdNode;
                                break;
                            case MdSpecial.Set:
                                mdNode.ImageIndex = ImageSelector.forPropertySet(md);
                                mdNode.SelectedImageIndex = ImageSelector.forPropertySet(md);
                                propertyNode.Setter = mdNode;
                                break;
                            case MdSpecial.Add:
                                mdNode.ImageIndex = ImageSelector.forEventAdd(md);
                                mdNode.SelectedImageIndex = ImageSelector.forEventAdd(md);
                                propertyNode.Setter = mdNode;
                                break;
                        }
                    }

                    foreach (KeyValuePair<string, PropertyTreeNode> kv in props)
                    {
                        if (kv.Value.Getter != null) kv.Value.Nodes.Add(kv.Value.Getter);
                        if (kv.Value.Setter != null) kv.Value.Nodes.Add(kv.Value.Setter);
                    }
                }

                asmNode.UpdateCoverageInfo();
            }

            EndUpdate();
        }
        private static void AddMethodTreeNode(TreeNode classNode, IMethod md)
        {
            MethodTreeNode mNode = new MethodTreeNode(md);
            classNode.Nodes.Add(mNode);

            if (md.CoveredVariants.Length > 1)
            {
                foreach (ICoveredVariant bData in md.CoveredVariants)
                    mNode.Nodes.Add(new BlockVariantTreeNode(bData));
            }
        }
Beispiel #33
0
 MethodBodySettingsCommand(MethodTreeNode methodNode, MethodBodyOptions options)
 {
     this.methodNode     = methodNode;
     this.newOptions     = options;
     this.origMethodBody = methodNode.MethodDefinition.MethodBody;
 }
Beispiel #34
0
        void OnReportOpened(object sender, EventArgs e)
        {
            BeginUpdate();

            var report = serviceContainer.getService<IReportService>().Report;

            foreach (var assembly in report.Assemblies)
            {
                var asmNode = new AssemblyTreeNode(assembly);
                Nodes.Add(asmNode);

                foreach (var dType in assembly.Types)
                {
                    var namespaceNode = GetNamespaceNode(asmNode, dType);
                    var classNode = new ClassTreeNode(dType);
                    namespaceNode.Nodes.Add(classNode);

                    var props = new Dictionary<string, PropertyTreeNode>();
                    foreach (var md in dType.Methods)
                    {
                        if (!Methods.IsSpecial(md.Flags))
                        {
                            AddMethodTreeNode(classNode, md);
                            continue;
                        }

                        //has special meaning
                        var mdSpecial = Methods.GetMdSpecial(md.Name);
                        if (mdSpecial == MdSpecial.Unknown)
                        {
                            AddMethodTreeNode(classNode, md);
                            continue;
                        }

                        var propName = Methods.GetMdSpecialName(md.Name);

                        PropertyTreeNode propertyNode;
                        if (!props.TryGetValue(propName, out propertyNode))
                        {
                            propertyNode = new PropertyTreeNode(propName);
                            props[propName] = propertyNode;
                            classNode.Nodes.Add(propertyNode);
                        }

                        var mdNode = new MethodTreeNode(md)
                        {
                            //MethodName = mdSpecial.ToString().ToLowerInvariant()
                        };

                        switch (mdSpecial)
                        {
                        case MdSpecial.Get:
                            mdNode.ImageIndex = ImageSelector.ForPropertyGet(md);
                            mdNode.SelectedImageIndex = ImageSelector.ForPropertyGet(md);
                            propertyNode.Getter = mdNode;
                            break;
                        case MdSpecial.Remove:
                            mdNode.ImageIndex = ImageSelector.ForEventRemove(md);
                            mdNode.SelectedImageIndex = ImageSelector.ForEventRemove(md);
                            propertyNode.Getter = mdNode;
                            break;
                        case MdSpecial.Set:
                            mdNode.ImageIndex = ImageSelector.ForPropertySet(md);
                            mdNode.SelectedImageIndex = ImageSelector.ForPropertySet(md);
                            propertyNode.Setter = mdNode;
                            break;
                        case MdSpecial.Add:
                            mdNode.ImageIndex = ImageSelector.ForEventAdd(md);
                            mdNode.SelectedImageIndex = ImageSelector.ForEventAdd(md);
                            propertyNode.Setter = mdNode;
                            break;
                        }
                    }

                    foreach (var kv in props)
                    {
                        if (kv.Value.Getter != null) kv.Value.Nodes.Add(kv.Value.Getter);
                        if (kv.Value.Setter != null) kv.Value.Nodes.Add(kv.Value.Setter);
                    }
                }

                asmNode.UpdateCoverageInfo();
            }

            EndUpdate();
        }