diff options
author | Marius Ungureanu <marius.ungureanu@xamarin.com> | 2015-11-23 16:45:18 +0300 |
---|---|---|
committer | Marius Ungureanu <marius.ungureanu@xamarin.com> | 2015-11-23 16:45:18 +0300 |
commit | a94ef4314d4bbbc96c0c80f15762335bf86df663 (patch) | |
tree | fcf7244620c9a1b9b735476ec2d9ae3f7d7f3407 /main/src/addins/MonoDevelop.AssemblyBrowser | |
parent | 26e5c5b5cf30799e0b263fd3a26de017a72b1f49 (diff) | |
parent | a05bc0f6d0591f71c5e4e5786108118f51c68fe1 (diff) |
Merge remote-tracking branch 'origin/roslyn' into roslyn-nogtkshell
Diffstat (limited to 'main/src/addins/MonoDevelop.AssemblyBrowser')
2 files changed, 153 insertions, 212 deletions
diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs index e1bb1926fa..16a664662e 100644 --- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs +++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/AssemblyBrowserWidget.cs @@ -53,6 +53,7 @@ using System.Threading; using MonoDevelop.Ide.Editor; using MonoDevelop.Ide.Navigation; using MonoDevelop.Ide.Gui.Content; +using System.IO; namespace MonoDevelop.AssemblyBrowser { @@ -392,8 +393,8 @@ namespace MonoDevelop.AssemblyBrowser { TreeIter selectedIter; if (searchTreeview.Selection.GetSelected (out selectedIter)) { - var member = (IUnresolvedEntity)(searchMode != SearchMode.Type ? memberListStore.GetValue (selectedIter, 4) : typeListStore.GetValue (selectedIter, 4)); - + var member = (IUnresolvedEntity)(searchMode == SearchMode.Member ? memberListStore.GetValue (selectedIter, 4) : typeListStore.GetValue (selectedIter, 4)); + var nav = SearchMember (member); if (nav != null) { notebook1.Page = 0; @@ -712,11 +713,14 @@ namespace MonoDevelop.AssemblyBrowser col.PackStart (crt, true); col.AddAttribute (crp, "image", 0); col.AddAttribute (crt, "text", 1); + col.SortColumnId = 1; searchTreeview.AppendColumn (col); col.Resizable = true; col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Declaring Type"), new Gtk.CellRendererText (), "text", 2); + col.SortColumnId = 2; col.Resizable = true; col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Assembly"), new Gtk.CellRendererText (), "text", 3); + col.SortColumnId = 3; col.Resizable = true; searchTreeview.Model = memberListStore; break; @@ -729,11 +733,17 @@ namespace MonoDevelop.AssemblyBrowser col.PackStart (crt, true); col.AddAttribute (crp, "image", 0); col.AddAttribute (crt, "text", 1); + col.SortColumnId = 1; + searchTreeview.AppendColumn (col); col.Resizable = true; col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Parent"), new Gtk.CellRendererText (), "text", 2); + col.SortColumnId = 2; + col.Resizable = true; col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Assembly"), new Gtk.CellRendererText (), "text", 3); + col.SortColumnId = 3; + col.Resizable = true; searchTreeview.Model = typeListStore; break; @@ -746,11 +756,16 @@ namespace MonoDevelop.AssemblyBrowser col.PackStart (crt, true); col.AddAttribute (crp, "image", 0); col.AddAttribute (crt, "text", 1); + col.SortColumnId = 1; searchTreeview.AppendColumn (col); col.Resizable = true; + col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Namespace"), new Gtk.CellRendererText (), "text", 2); + col.SortColumnId = 2; col.Resizable = true; + col = searchTreeview.AppendColumn (GettextCatalog.GetString ("Assembly"), new Gtk.CellRendererText (), "text", 3); + col.SortColumnId = 3; col.Resizable = true; searchTreeview.Model = typeListStore; break; @@ -925,7 +940,7 @@ namespace MonoDevelop.AssemblyBrowser return; if (!type.IsPublic && publicOnly) continue; - if (type.FullName.ToUpper ().IndexOf (pattern) >= 0) + if (type.FullName.ToUpper ().IndexOf (pattern, StringComparison.Ordinal) >= 0) typeList.Add (type); } typeDict [unit] = typeList; @@ -946,23 +961,25 @@ namespace MonoDevelop.AssemblyBrowser break; case SearchMode.TypeAndMembers: - var typeDict2 = new Dictionary<AssemblyLoader, List<IUnresolvedEntity>> (); + var typeDict2 = new Dictionary<AssemblyLoader, List<Tuple<IUnresolvedEntity, string>>> (); foreach (var unit in this.definitions) { - var typeList = new List<IUnresolvedEntity> (); + var typeList = new List<Tuple<IUnresolvedEntity, string>> (); foreach (var type in unit.UnresolvedAssembly.TopLevelTypeDefinitions) { if (worker.CancellationPending) return; if (!type.IsPublic && publicOnly) continue; - if (type.FullName.ToUpper ().IndexOf (pattern) >= 0) - typeList.Add (type); + var parent = type.FullName; + if (parent.ToUpper ().IndexOf (pattern, StringComparison.Ordinal) >= 0) + typeList.Add (Tuple.Create ((IUnresolvedEntity)type, type.Namespace)); + foreach (var member in type.Members) { if (worker.CancellationPending) return; if (!member.IsPublic && publicOnly) continue; if (member.Name.ToUpper ().Contains (pattern)) { - typeList.Add (member); + typeList.Add (Tuple.Create ((IUnresolvedEntity)member, parent)); } } @@ -972,13 +989,14 @@ namespace MonoDevelop.AssemblyBrowser Gtk.Application.Invoke (delegate { foreach (var kv in typeDict2) { - foreach (var type in kv.Value) { + foreach (var tuple in kv.Value) { if (worker.CancellationPending) return; + var type = tuple.Item1; typeListStore.AppendValues (ImageService.GetIcon (type.GetStockIcon (), Gtk.IconSize.Menu), type.Name, - type.Namespace, - kv.Key.Assembly.FullName, + tuple.Item2, + kv.Key.Assembly.FullName, type); } } @@ -1603,6 +1621,8 @@ namespace MonoDevelop.AssemblyBrowser return result; } + if (!File.Exists (fileName)) + return null; result = new AssemblyLoader (this, fileName); definitions.Add (result); diff --git a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/NRefactoryStock.cs b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/NRefactoryStock.cs index 9d4624c339..f06aab28df 100644 --- a/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/NRefactoryStock.cs +++ b/main/src/addins/MonoDevelop.AssemblyBrowser/MonoDevelop.AssemblyBrowser/NRefactoryStock.cs @@ -31,96 +31,9 @@ namespace MonoDevelop.AssemblyBrowser { static class NRefactoryStock { - static readonly IconId Class = "md-class"; - static readonly IconId Enum = "md-enum"; - static readonly IconId Event = "md-event"; static readonly IconId Field = "md-field"; - static readonly IconId Interface = "md-interface"; - static readonly IconId Method = "md-method"; - static readonly IconId ExtensionMethod = "md-extensionmethod"; - static readonly IconId Property = "md-property"; - static readonly IconId Struct = "md-struct"; - static readonly IconId Delegate = "md-delegate"; public static readonly IconId Namespace = "md-name-space"; - static readonly IconId InternalClass = "md-internal-class"; - static readonly IconId InternalDelegate = "md-internal-delegate"; - static readonly IconId InternalEnum = "md-internal-enum"; - static readonly IconId InternalEvent = "md-internal-event"; - static readonly IconId InternalField = "md-internal-field"; - static readonly IconId InternalInterface = "md-internal-interface"; - static readonly IconId InternalMethod = "md-internal-method"; - static readonly IconId InternalExtensionMethod = "md-internal-extensionmethod"; - static readonly IconId InternalProperty = "md-internal-property"; - static readonly IconId InternalStruct = "md-internal-struct"; - - static readonly IconId InternalAndProtectedClass = "md-InternalAndProtected-class"; - static readonly IconId InternalAndProtectedDelegate = "md-InternalAndProtected-delegate"; - static readonly IconId InternalAndProtectedEnum = "md-InternalAndProtected-enum"; - static readonly IconId InternalAndProtectedEvent = "md-InternalAndProtected-event"; - static readonly IconId InternalAndProtectedField = "md-InternalAndProtected-field"; - static readonly IconId InternalAndProtectedInterface = "md-InternalAndProtected-interface"; - static readonly IconId InternalAndProtectedMethod = "md-InternalAndProtected-method"; - static readonly IconId InternalAndProtectedExtensionMethod = "md-InternalAndProtected-extensionmethod"; - static readonly IconId InternalAndProtectedProperty = "md-InternalAndProtected-property"; - static readonly IconId InternalAndProtectedStruct = "md-InternalAndProtected-struct"; - - static readonly IconId PrivateClass = "md-private-class"; - static readonly IconId PrivateDelegate = "md-private-delegate"; - static readonly IconId PrivateEnum = "md-private-enum"; - static readonly IconId PrivateEvent = "md-private-event"; - static readonly IconId PrivateField = "md-private-field"; - static readonly IconId PrivateInterface = "md-private-interface"; - static readonly IconId PrivateMethod = "md-private-method"; - static readonly IconId PrivateExtensionMethod = "md-private-extensionmethod"; - static readonly IconId PrivateProperty = "md-private-property"; - static readonly IconId PrivateStruct = "md-private-struct"; - - static readonly IconId ProtectedClass = "md-protected-class"; - static readonly IconId ProtectedDelegate = "md-protected-delegate"; - static readonly IconId ProtectedEnum = "md-protected-enum"; - static readonly IconId ProtectedEvent = "md-protected-event"; - static readonly IconId ProtectedField = "md-protected-field"; - static readonly IconId ProtectedInterface = "md-protected-interface"; - static readonly IconId ProtectedMethod = "md-protected-method"; - static readonly IconId ProtectedExtensionMethod = "md-protected-extensionmethod"; - static readonly IconId ProtectedProperty = "md-protected-property"; - static readonly IconId ProtectedStruct = "md-protected-struct"; - - static readonly IconId ProtectedOrInternalClass = "md-ProtectedOrInternal-class"; - static readonly IconId ProtectedOrInternalDelegate = "md-ProtectedOrInternal-delegate"; - static readonly IconId ProtectedOrInternalEnum = "md-ProtectedOrInternal-enum"; - static readonly IconId ProtectedOrInternalEvent = "md-ProtectedOrInternal-event"; - static readonly IconId ProtectedOrInternalField = "md-ProtectedOrInternal-field"; - static readonly IconId ProtectedOrInternalInterface = "md-ProtectedOrInternal-interface"; - static readonly IconId ProtectedOrInternalMethod = "md-ProtectedOrInternal-method"; - static readonly IconId ProtectedOrInternalExtensionMethod = "md-ProtectedOrInternal-extensionmethod"; - static readonly IconId ProtectedOrInternalProperty = "md-ProtectedOrInternal-property"; - static readonly IconId ProtectedOrInternalStruct = "md-ProtectedOrInternal-struct"; - - static IconId[,] typeIconTable = new IconId[,] { - {Class, PrivateClass, Class, ProtectedClass, InternalClass, ProtectedOrInternalClass, InternalAndProtectedClass}, // class - {Enum, PrivateEnum, Enum, ProtectedEnum, InternalEnum, ProtectedOrInternalEnum, InternalAndProtectedEnum}, // enum - {Interface, PrivateInterface, Interface, ProtectedInterface, InternalInterface, ProtectedOrInternalInterface, InternalAndProtectedInterface}, // interface - {Struct, PrivateStruct, Struct, ProtectedStruct, InternalStruct, ProtectedOrInternalStruct, InternalAndProtectedStruct}, // struct - {Delegate, PrivateDelegate, Delegate, ProtectedDelegate, InternalDelegate, ProtectedOrInternalDelegate, InternalAndProtectedDelegate} // delegate - }; - static readonly IconId[] fieldIconTable = { - NRefactoryStock.Field, NRefactoryStock.PrivateField, NRefactoryStock.Field, NRefactoryStock.ProtectedField, NRefactoryStock.InternalField, NRefactoryStock.ProtectedOrInternalField, NRefactoryStock.InternalAndProtectedField - }; - static readonly IconId[] methodIconTable = { - NRefactoryStock.Method, NRefactoryStock.PrivateMethod, NRefactoryStock.Method, NRefactoryStock.ProtectedMethod, NRefactoryStock.InternalMethod, NRefactoryStock.ProtectedOrInternalMethod, NRefactoryStock.InternalAndProtectedMethod - }; - static readonly IconId[] extensionMethodIconTable = { - NRefactoryStock.ExtensionMethod, NRefactoryStock.PrivateExtensionMethod, NRefactoryStock.ExtensionMethod, NRefactoryStock.ProtectedExtensionMethod, NRefactoryStock.InternalExtensionMethod, NRefactoryStock.ProtectedOrInternalExtensionMethod, NRefactoryStock.InternalAndProtectedExtensionMethod - }; - static readonly IconId[] propertyIconTable = { - NRefactoryStock.Property, NRefactoryStock.PrivateProperty, NRefactoryStock.Property, NRefactoryStock.ProtectedProperty, NRefactoryStock.InternalProperty, NRefactoryStock.ProtectedOrInternalProperty, NRefactoryStock.InternalAndProtectedProperty - }; - static readonly IconId[] eventIconTable = { - NRefactoryStock.Event, NRefactoryStock.PrivateEvent, NRefactoryStock.Event, NRefactoryStock.ProtectedEvent, NRefactoryStock.InternalEvent, NRefactoryStock.ProtectedOrInternalEvent, NRefactoryStock.InternalAndProtectedEvent - }; - public static IconId GetStockIcon (this INamedElement element) { if (element is IType) @@ -137,77 +50,6 @@ namespace MonoDevelop.AssemblyBrowser return GetStockIcon ((IType)entity); } - public static IconId GetStockIcon (this IType entity) - { - var def = entity.GetDefinition (); - if (def == null) - return Class; - switch (def.Kind) { - case TypeKind.Class: - return typeIconTable [0, (int)def.Accessibility]; - case TypeKind.Enum: - return typeIconTable [1, (int)def.Accessibility]; - case TypeKind.Interface: - return typeIconTable [2, (int)def.Accessibility]; - case TypeKind.Struct: - return typeIconTable [3, (int)def.Accessibility]; - case TypeKind.Delegate: - return typeIconTable [4, (int)def.Accessibility]; - default: - return typeIconTable [0, (int)def.Accessibility]; - } - } - public static IconId GetStockIcon (this IUnresolvedTypeDefinition def) - { - switch (def.Kind) { - case TypeKind.Class: - return typeIconTable [0, (int)def.Accessibility]; - case TypeKind.Enum: - return typeIconTable [1, (int)def.Accessibility]; - case TypeKind.Interface: - return typeIconTable [2, (int)def.Accessibility]; - case TypeKind.Struct: - return typeIconTable [3, (int)def.Accessibility]; - case TypeKind.Delegate: - return typeIconTable [4, (int)def.Accessibility]; - default: - return typeIconTable [0, (int)def.Accessibility]; - } - } - - static int GetTypeIndex (Microsoft.CodeAnalysis.TypeKind typeKind) - { - switch (typeKind) { - case Microsoft.CodeAnalysis.TypeKind.Unknown: - case Microsoft.CodeAnalysis.TypeKind.Array: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Class: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Delegate: - return 4; - case Microsoft.CodeAnalysis.TypeKind.Dynamic: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Enum: - return 1; - case Microsoft.CodeAnalysis.TypeKind.Error: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Interface: - return 2; - case Microsoft.CodeAnalysis.TypeKind.Module: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Pointer: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Struct: - return 3; - case Microsoft.CodeAnalysis.TypeKind.TypeParameter: - return 0; - case Microsoft.CodeAnalysis.TypeKind.Submission: - return 0; - default: - throw new ArgumentOutOfRangeException (); - } - } - public static IconId GetStockIcon (this IField field) { return GetStockIcon ((IEntity)field); @@ -230,73 +72,152 @@ namespace MonoDevelop.AssemblyBrowser public static IconId GetStockIcon (this IEntity entity, bool showAccessibility = true) { + return "md-" + GetAccess (entity) + GetGlobal (entity) + GetSource (entity); + } + + static string GetAccess (IEntity entity) + { + switch (entity.Accessibility) { + case Accessibility.None: + return ""; + case Accessibility.Private: + return "private-"; + case Accessibility.Public: + return ""; + case Accessibility.Protected: + return "protected-"; + case Accessibility.Internal: + return "internal-"; + case Accessibility.ProtectedOrInternal: + case Accessibility.ProtectedAndInternal: + return "ProtectedOrInternal-"; + default: + throw new ArgumentOutOfRangeException (); + } + } + + static string GetGlobal (IEntity entity) + { + switch (entity.SymbolKind) { + case SymbolKind.Field: + case SymbolKind.Method: + case SymbolKind.Constructor: + case SymbolKind.Destructor: + case SymbolKind.Operator: + case SymbolKind.Property: + case SymbolKind.Indexer: + return entity.IsStatic ? "static-" : ""; + } + return ""; + + } + + static string GetSource (IEntity entity) + { switch (entity.SymbolKind) { case SymbolKind.TypeDefinition: - return GetStockIcon ((IType)entity); + var type = (IType)entity; + switch (type.Kind) { + case TypeKind.Class: + return "class"; + case TypeKind.Interface: + return "interface"; + case TypeKind.Struct: + return "struct"; + case TypeKind.Delegate: + return "delegate"; + case TypeKind.Enum: + return "enum"; + } + return "class"; case SymbolKind.Field: - if (showAccessibility) - return fieldIconTable [(int)entity.Accessibility]; - else - return fieldIconTable [0]; + case SymbolKind.Event: + return "field"; case SymbolKind.Method: case SymbolKind.Constructor: case SymbolKind.Destructor: case SymbolKind.Operator: - if (showAccessibility) { - if (((IMethod)entity).IsExtensionMethod) - return extensionMethodIconTable [(int)entity.Accessibility]; - return methodIconTable [(int)entity.Accessibility]; - } else { - if (((IMethod)entity).IsExtensionMethod) - return extensionMethodIconTable [0]; - return methodIconTable [0]; - } + return "method"; case SymbolKind.Property: case SymbolKind.Indexer: - if (showAccessibility) - return propertyIconTable [(int)entity.Accessibility]; - else - return propertyIconTable [0]; - case SymbolKind.Event: - if (showAccessibility) - return eventIconTable [(int)entity.Accessibility]; - else - return eventIconTable [0]; + return "property"; } return ""; } + public static IconId GetStockIcon (this IUnresolvedEntity entity, bool showAccessibility = true) { + return "md-" + GetAccess (entity) + GetGlobal (entity) + GetSource (entity); + } + + static string GetAccess (IUnresolvedEntity entity) + { + switch (entity.Accessibility) { + case Accessibility.None: + return ""; + case Accessibility.Private: + return "private-"; + case Accessibility.Public: + return ""; + case Accessibility.Protected: + return "protected-"; + case Accessibility.Internal: + return "internal-"; + case Accessibility.ProtectedOrInternal: + case Accessibility.ProtectedAndInternal: + return "ProtectedOrInternal-"; + default: + throw new ArgumentOutOfRangeException (); + } + } + + static string GetGlobal (IUnresolvedEntity entity) + { + switch (entity.SymbolKind) { + case SymbolKind.Field: + case SymbolKind.Method: + case SymbolKind.Constructor: + case SymbolKind.Destructor: + case SymbolKind.Operator: + case SymbolKind.Property: + case SymbolKind.Indexer: + return entity.IsStatic ? "static-" : ""; + } + return ""; + } + + static string GetSource (IUnresolvedEntity entity) + { switch (entity.SymbolKind) { case SymbolKind.TypeDefinition: - return GetStockIcon ((IUnresolvedTypeDefinition)entity); + var type = (IUnresolvedTypeDefinition)entity; + switch (type.Kind) { + case TypeKind.Class: + return "class"; + case TypeKind.Interface: + return "interface"; + case TypeKind.Struct: + return "struct"; + case TypeKind.Delegate: + return "delegate"; + case TypeKind.Enum: + return "enum"; + } + return "class"; case SymbolKind.Field: - if (showAccessibility) - return fieldIconTable [(int)entity.Accessibility]; - else - return fieldIconTable [0]; + return "field"; + case SymbolKind.Event: + return "event"; case SymbolKind.Method: case SymbolKind.Constructor: case SymbolKind.Destructor: case SymbolKind.Operator: - if (showAccessibility) - return methodIconTable [(int)entity.Accessibility]; - else - return methodIconTable [0]; + return "method"; case SymbolKind.Property: case SymbolKind.Indexer: - if (showAccessibility) - return propertyIconTable [(int)entity.Accessibility]; - else - return propertyIconTable [0]; - case SymbolKind.Event: - if (showAccessibility) - return eventIconTable [(int)entity.Accessibility]; - else - return eventIconTable [0]; + return "property"; } return ""; } } -} - +}
\ No newline at end of file |