Browse Source

Fix #228 ILSpy /NavigateTo: does not allow you to navigate to a namespace

pull/254/merge
Daniel Grunwald 15 years ago
parent
commit
6746938728
  1. 31
      ILSpy/MainWindow.xaml.cs
  2. 18
      ILSpy/TreeNodes/AssemblyTreeNode.cs

31
ILSpy/MainWindow.xaml.cs

@ -242,14 +242,29 @@ namespace ICSharpCode.ILSpy
{ {
if (args.NavigateTo != null) { if (args.NavigateTo != null) {
bool found = false; bool found = false;
foreach (LoadedAssembly asm in commandLineLoadedAssemblies) { if (args.NavigateTo.StartsWith("N:", StringComparison.Ordinal)) {
AssemblyDefinition def = asm.AssemblyDefinition; string namespaceName = args.NavigateTo.Substring(2);
if (def != null) { foreach (LoadedAssembly asm in commandLineLoadedAssemblies) {
MemberReference mr = XmlDocKeyProvider.FindMemberByKey(def.MainModule, args.NavigateTo); AssemblyTreeNode asmNode = assemblyListTreeNode.FindAssemblyNode(asm);
if (mr != null) { if (asmNode != null) {
found = true; NamespaceTreeNode nsNode = asmNode.FindNamespaceNode(namespaceName);
JumpToReference(mr); if (nsNode != null) {
break; found = true;
SelectNode(nsNode);
break;
}
}
}
} else {
foreach (LoadedAssembly asm in commandLineLoadedAssemblies) {
AssemblyDefinition def = asm.AssemblyDefinition;
if (def != null) {
MemberReference mr = XmlDocKeyProvider.FindMemberByKey(def.MainModule, args.NavigateTo);
if (mr != null) {
found = true;
JumpToReference(mr);
break;
}
} }
} }
} }

18
ILSpy/TreeNodes/AssemblyTreeNode.cs

@ -139,6 +139,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
get { return true; } get { return true; }
} }
/// <summary>
/// Finds the node for a top-level type.
/// </summary>
public TypeTreeNode FindTypeNode(TypeDefinition def) public TypeTreeNode FindTypeNode(TypeDefinition def)
{ {
if (def == null) if (def == null)
@ -151,6 +154,21 @@ namespace ICSharpCode.ILSpy.TreeNodes
return null; return null;
} }
/// <summary>
/// Finds the node for a namespace.
/// </summary>
public NamespaceTreeNode FindNamespaceNode(string namespaceName)
{
if (string.IsNullOrEmpty(namespaceName))
return null;
EnsureLazyChildren();
NamespaceTreeNode node;
if (namespaces.TryGetValue(namespaceName, out node))
return node;
else
return null;
}
public override bool CanDrag(SharpTreeNode[] nodes) public override bool CanDrag(SharpTreeNode[] nodes)
{ {
return nodes.All(n => n is AssemblyTreeNode); return nodes.All(n => n is AssemblyTreeNode);

Loading…
Cancel
Save