Example #1
0
        static int partition(SharpTreeNodeCollection array, int top, int bottom, Comparison <SharpTreeNode> comparison)
        {
            SharpTreeNode x = array[top];
            int           i = top - 1;
            int           j = bottom + 1;

            do
            {
                do
                {
                    j--;
                } while (comparison(x, array[j]) > 0);

                do
                {
                    i++;
                } while (comparison(x, array[i]) < 0);

                if (i < j)
                {
                    if (comparison(array[j], array[i]) != 0)
                    {
                        Swap(array, i, j);
                    }
                }
            } while (i < j);
            return(j);
        }
Example #2
0
		internal static void AddBaseTypes(SharpTreeNodeCollection children, TypeDefinition type)
		{
			if (type.BaseType != null)
				children.Add(new BaseTypesEntryNode(type.BaseType, false));
			foreach (TypeReference i in type.Interfaces) {
				children.Add(new BaseTypesEntryNode(i, true));
			}
		}
Example #3
0
		internal static void AddBaseTypes(SharpTreeNodeCollection children, TypeDef type) {
			if (type.BaseType != null)
				children.Add(new BaseTypesEntryNode(type.BaseType, false));
			foreach (var i in type.Interfaces) {
				if (i.Interface != null)
					children.Add(new BaseTypesEntryNode(i.Interface, true));
			}
		}
Example #4
0
		internal static void AddBaseTypes(SharpTreeNodeCollection children, TypeReference type)
		{
			var def = type.Resolve();
			if (def.BaseType != null)
				children.Add(new BaseTypesEntryNode(ResolveWithTypes(def.BaseType, type), false));
			foreach (TypeReference i in def.Interfaces)
				children.Add(new BaseTypesEntryNode(ResolveWithTypes(i, type), true));
		}
Example #5
0
 /// <summary>
 /// Makes sure that every child in this collection is ready
 /// </summary>
 /// <param name="coll"></param>
 /// <returns></returns>
 public static IEnumerable <SharpTreeNode> EnsureLazyChildren(this SharpTreeNodeCollection coll)
 {
     foreach (var x in coll)
     {
         x.EnsureLazyChildren();
         yield return(x);
     }
 }
Example #6
0
        static void quicksort(SharpTreeNodeCollection num, int top, int bottom, Comparison <SharpTreeNode> comparison)
        {
            int middle;

            if (top < bottom)
            {
                middle = partition(num, top, bottom, comparison);
                quicksort(num, top, middle, comparison);
                quicksort(num, middle + 1, bottom, comparison);
            }
        }
Example #7
0
 internal static void AddBaseTypes(SharpTreeNodeCollection children, TypeDefinition type)
 {
     if (type.BaseType != null)
     {
         children.Add(new BaseTypesEntryNode(type.BaseType, false));
     }
     foreach (var i in type.Interfaces)
     {
         children.Add(new BaseTypesEntryNode(i.InterfaceType, true));
     }
 }
Example #8
0
        static void Swap(SharpTreeNodeCollection array, int i, int j)
        {
            SwapCount++;

            Debug.Assert(i < j);
            SharpTreeNode temp = array[i];
            SharpTreeNode tmp  = array[j];

            array.RemoveAt(j);
            array[i] = tmp;
            array.Insert(j, temp);

            //array.Swap(i, j);
        }
        internal static TestMethodWrapperContainer GetContainer(this SharpTreeNodeCollection treeNodeCollection, TestType testType)
        {
            TestMethodWrapperContainer container = null;

            foreach (var node in treeNodeCollection)
            {
                var testContainer = node as TestMethodWrapperContainer;
                if (null != testContainer && testContainer.TestType == testType)
                {
                    container = testContainer;
                }
            }

            return(container);
        }
Example #10
0
        internal static void AddBaseTypes(SharpTreeNodeCollection children, PEFile module, ITypeDefinition typeDefinition)
        {
            TypeDefinitionHandle handle     = (TypeDefinitionHandle)typeDefinition.MetadataToken;
            DecompilerTypeSystem typeSystem = new DecompilerTypeSystem(module, module.GetAssemblyResolver(),
                                                                       TypeSystemOptions.Default | TypeSystemOptions.Uncached);
            var t = typeSystem.MainModule.ResolveEntity(handle) as ITypeDefinition;

            foreach (var td in t.GetAllBaseTypeDefinitions().Reverse().Skip(1))
            {
                if (t.Kind != TypeKind.Interface || t.Kind == td.Kind)
                {
                    children.Add(new BaseTypesEntryNode(td));
                }
            }
        }
Example #11
0
        static void ExchangeSort(SharpTreeNodeCollection num, Comparison <SharpTreeNode> comparison)
        {
            int i, j;
            int numLength = num.Count;

            for (i = 0; i < (numLength - 1); i++)
            {
                for (j = (i + 1); j < numLength; j++)
                {
                    if (comparison(num[i], num[j]) < 0)
                    {
                        Swap(num, i, j);
                    }
                }
            }
        }
Example #12
0
        static public void Sort(SharpTreeNodeCollection Children, string sortMember, ListSortDirection direction)
        {
            Comparison <SharpTreeNode> comparison = (This, That) =>
            {
                var L = (typeof(TreeItem).GetProperty(sortMember).GetValue(This, null) as IComparable);
                var R = (typeof(TreeItem).GetProperty(sortMember).GetValue(That, null) as IComparable);

                int ret;
                if (L == null && R == null)
                {
                    ret = 0;
                }
                else if (L == null)
                {
                    ret = 1;
                }
                else if (R == null)
                {
                    ret = -1;
                }
                else
                {
                    ret = L.CompareTo(R);
                }

                if (direction == ListSortDirection.Ascending)
                {
                    return(-ret);
                }
                return(ret);
            };

            SwapCount = 0;
            var watch = System.Diagnostics.Stopwatch.StartNew();

            Sort(Children, sortMember, direction, comparison);

            watch.Stop();
            var elapsedMs = watch.ElapsedMilliseconds;

#if DEBUG
            if (elapsedMs > 100)
            {
                AppLog.Debug("TreeView Sorting took very log: {0} ms and required {1} swaps", elapsedMs, SwapCount);
            }
#endif
        }
Example #13
0
        static void BubbleSort(SharpTreeNodeCollection num, Comparison <SharpTreeNode> comparison)
        {
            int  i, j;
            bool flag      = true;
            int  numLength = num.Count;

            for (i = 1; (i <= numLength) && flag; i++)
            {
                flag = false;
                for (j = 0; j < (numLength - 1); j++)
                {
                    if (comparison(num[j + 1], num[j]) > 0)
                    {
                        Swap(num, j, j + 1);
                        flag = true;
                    }
                }
            }
        }
Example #14
0
        static void Sort(SharpTreeNodeCollection Children, string sortMember, ListSortDirection direction, Comparison <SharpTreeNode> comparison)
        {
            if (Children.Count == 0)
            {
                return;
            }

            QuickSort(Children, comparison);
            //SelectionSort(Children, comparison);
            //BubbleSort(Children, comparison);
            //ShellSort(Children, comparison);
            //ExchangeSort(Children, comparison);
            //InsertionSort(Children, comparison);

            foreach (var child in Children.OfType <TreeItem>())
            {
                Sort(child.Children, sortMember, direction, comparison);
            }
        }
Example #15
0
        /*static void InsertionSort(SharpTreeNodeCollection num, Comparison<SharpTreeNode> comparison)
         * {
         *  int i, j, key, numLength = num.Count;
         *  for (j = 1; j < numLength; j++)    // Start with 1 (not 0)
         *  {
         *      key = num[j];
         *      for (i = j - 1; (i >= 0) && (num[i] < key); i--)   // Smaller values move up
         *      {
         *          num[i + 1] = num[i];
         *      }
         *      num[i + 1] = key;    //Put key into its proper location
         *  }
         * }*/

        static void ShellSort(SharpTreeNodeCollection num, Comparison <SharpTreeNode> comparison)
        {
            int  i, numLength = num.Count;
            bool flag = true;
            int  d    = numLength;

            while (flag || (d > 1))
            {
                flag = false;
                d    = (d + 1) / 2;
                for (i = 0; i < (numLength - d); i++)
                {
                    if (comparison(num[i + d], num[i]) > 0)
                    {
                        Swap(num, i, i + d);
                        flag = true;
                    }
                }
            }
        }
Example #16
0
        internal static void AddBaseTypes(SharpTreeNodeCollection children, PEFile module, ITypeDefinition typeDefinition)
        {
            var typeDef   = module.Metadata.GetTypeDefinition((TypeDefinitionHandle)typeDefinition.MetadataToken);
            var baseTypes = typeDefinition.DirectBaseTypes.ToArray();
            int i         = 0;

            if (typeDefinition.Kind == TypeKind.Interface)
            {
                i++;
            }
            else if (!typeDef.BaseType.IsNil)
            {
                children.Add(new BaseTypesEntryNode(module, typeDef.BaseType, baseTypes[i], false));
                i++;
            }
            foreach (var h in typeDef.GetInterfaceImplementations())
            {
                var impl = module.Metadata.GetInterfaceImplementation(h);
                children.Add(new BaseTypesEntryNode(module, impl.Interface, baseTypes[i], true));
                i++;
            }
        }
Example #17
0
        static void SelectionSort(SharpTreeNodeCollection num, Comparison <SharpTreeNode> comparison)
        {
            int i, j, first;
            int numLength = num.Count;

            for (i = numLength - 1; i > 0; i--)
            {
                first = 0;
                for (j = 1; j <= i; j++)
                {
                    if (comparison(num[j], num[first]) < 0)
                    {
                        first = j;
                    }
                }
                if (first != i)
                {
                    Swap(num, first, i);
                }
            }
            return;
        }
Example #18
0
 static void QuickSort(SharpTreeNodeCollection num, Comparison <SharpTreeNode> comparison)
 {
     quicksort(num, 0, num.Count - 1, comparison);
 }
Example #19
0
 public SharpTreeNode()
 {
     Children = new SharpTreeNodeCollection(this);
 }
        public bool GoToEntity(IEntity entity)
        {
            // Try to find assembly in workspace
            var entityAssembly = entity.ParentAssembly;

            if (entityAssembly != null)
            {
                ITypeDefinition entityType = null;
                if (entity is ITypeDefinition)
                {
                    entityType = (ITypeDefinition)entity;
                }
                else
                {
                    entityType = entity.DeclaringTypeDefinition;
                }

                SharpTreeNodeCollection namespaceChildren = null;
                var root = this.Root as WorkspaceTreeNode;

                // Try to find assembly of passed entity among open projects in solution
                var solutionTreeNode = this.Root.Children.OfType <SolutionTreeNode>().FirstOrDefault();
                if (solutionTreeNode != null)
                {
                    // Ensure that we have children
                    solutionTreeNode.EnsureLazyChildren();

                    var projectTreeNode = solutionTreeNode.Children.FirstOrDefault(
                        node => {
                        if (node is ProjectTreeNode)
                        {
                            var treeNode = (ProjectTreeNode)node;
                            if (node.Model is IProject)
                            {
                                var projectModel = (IProject)node.Model;
                                return(projectModel.AssemblyModel.FullAssemblyName == entityAssembly.FullAssemblyName);
                            }
                        }

                        return(false);
                    });
                    if (projectTreeNode != null)
                    {
                        projectTreeNode.EnsureLazyChildren();
                        namespaceChildren = projectTreeNode.Children;
                    }
                }

                if (namespaceChildren == null)
                {
                    // Try to find assembly of passed entity among additional assemblies
                    var assemblyTreeNode = FindAssemblyTreeNode(entityAssembly.FullAssemblyName);
                    if (assemblyTreeNode != null)
                    {
                        assemblyTreeNode.EnsureLazyChildren();
                        namespaceChildren = assemblyTreeNode.Children;
                    }
                }

                if (namespaceChildren == null)
                {
                    // Add assembly to workspace (unpinned), if not available in ClassBrowser
                    IAssemblyParserService assemblyParser = SD.GetService <IAssemblyParserService>();
                    IClassBrowser          classBrowser   = SD.GetService <IClassBrowser>();
                    if (assemblyParser != null && classBrowser != null)
                    {
                        IAssemblyModel unpinnedAssemblyModel = assemblyParser.GetAssemblyModel(new FileName(entityAssembly.UnresolvedAssembly.Location));
                        if (unpinnedAssemblyModel != null)
                        {
                            classBrowser.UnpinnedAssemblies.Assemblies.Add(unpinnedAssemblyModel);
                            var assemblyTreeNode = FindAssemblyTreeNode(entityAssembly.FullAssemblyName);
                            if (assemblyTreeNode != null)
                            {
                                assemblyTreeNode.EnsureLazyChildren();
                                namespaceChildren = assemblyTreeNode.Children;
                            }
                        }
                    }
                }

                if (namespaceChildren != null)
                {
                    var nsTreeNode = namespaceChildren.FirstOrDefault(
                        node =>
                        (node is NamespaceTreeNode) &&
                        (((NamespaceTreeNode)node).Model is INamespaceModel) &&
                        (((INamespaceModel)((NamespaceTreeNode)node).Model).FullName == entityType.Namespace)
                        ) as ModelCollectionTreeNode;

                    if (nsTreeNode != null)
                    {
                        // Ensure that we have children
                        nsTreeNode.EnsureLazyChildren();

                        SharpTreeNode entityTypeNode = null;

                        // Search in namespace node recursively
                        var foundEntityNode = nsTreeNode.FindChildNodeRecursively(
                            node => {
                            var treeNode = node as SharpTreeNode;
                            if (treeNode != null)
                            {
                                var treeNodeTypeModel = treeNode.Model as ITypeDefinitionModel;
                                if (treeNodeTypeModel != null)
                                {
                                    var modelFullTypeName = treeNodeTypeModel.FullTypeName;
                                    if (modelFullTypeName == entityType.FullTypeName)
                                    {
                                        // This is the TypeDefinitionModel of searched entity (the type itself or its member)
                                        entityTypeNode = treeNode;
                                        if (entity is ITypeDefinition)
                                        {
                                            // We are looking for the type itself
                                            return(true);
                                        }
                                    }
                                }

                                if ((entity is IMember) && (treeNode.Model is IMemberModel))
                                {
                                    // Compare parent types and member names
                                    IMemberModel memberModel   = (IMemberModel)treeNode.Model;
                                    IMember member             = (IMember)entity;
                                    bool isSymbolOfTypeAndName =
                                        (member.DeclaringType.FullName == memberModel.UnresolvedMember.DeclaringTypeDefinition.FullName) &&
                                        (member.Name == memberModel.Name) &&
                                        (member.SymbolKind == memberModel.SymbolKind);

                                    if (isSymbolOfTypeAndName)
                                    {
                                        var parametrizedEntityMember   = member as IParameterizedMember;
                                        var parametrizedTreeNodeMember = memberModel.UnresolvedMember as IUnresolvedParameterizedMember;
                                        if ((parametrizedEntityMember != null) && (parametrizedTreeNodeMember != null))
                                        {
                                            // For methods and constructors additionally check the parameters and their types to handle overloading properly
                                            int treeNodeParamsCount = parametrizedTreeNodeMember.Parameters != null ? parametrizedTreeNodeMember.Parameters.Count : 0;
                                            int entityParamsCount   = parametrizedEntityMember.Parameters != null ? parametrizedEntityMember.Parameters.Count : 0;
                                            if (treeNodeParamsCount == entityParamsCount)
                                            {
                                                for (int i = 0; i < entityParamsCount; i++)
                                                {
                                                    // Compare full type names or at least only type names without namespace
                                                    // This is not precise, but sufficient in most cases.
                                                    var entityParamType   = parametrizedEntityMember.Parameters[i].Type;
                                                    var treeNodeParamType = parametrizedTreeNodeMember.Parameters[i].Type.Resolve(
                                                        new SimpleTypeResolveContext(entityAssembly));
                                                    if ((entityParamType.FullName != treeNodeParamType.FullName) &&
                                                        (entityParamType.Name != treeNodeParamType.Name))
                                                    {
                                                        return(false);
                                                    }
                                                }

                                                // All parameters were equal
                                                return(true);
                                            }
                                        }
                                        else
                                        {
                                            return(true);
                                        }
                                    }
                                }
                            }

                            return(false);
                        });

                        // Special handling for default constructors: If not found, jump to type declaration instead
                        if ((foundEntityNode == null) && (entity.SymbolKind == SymbolKind.Constructor))
                        {
                            foundEntityNode = entityTypeNode;
                        }

                        if (foundEntityNode != null)
                        {
                            this.FocusNode(foundEntityNode);
                            this.SelectedItem = foundEntityNode;
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }