Browse Source

Improved referencing support.

pull/1/head
Daniel Grunwald 15 years ago
parent
commit
bb679706fb
  1. 21
      ILSpy/AssemblyList.cs
  2. 15
      ILSpy/Disassembler/DisassemblerHelpers.cs
  3. 2
      ILSpy/EventTreeNode.cs
  4. 2
      ILSpy/PropertyTreeNode.cs

21
ILSpy/AssemblyList.cs

@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy
TypeTreeNode decl = FindTypeNode(def.DeclaringType); TypeTreeNode decl = FindTypeNode(def.DeclaringType);
if (decl != null) { if (decl != null) {
decl.EnsureLazyChildren(); decl.EnsureLazyChildren();
return decl.Children.OfType<TypeTreeNode>().FirstOrDefault(t => t.TypeDefinition == def); return decl.VisibleChildren.OfType<TypeTreeNode>().FirstOrDefault(t => t.TypeDefinition == def);
} }
} else { } else {
TypeTreeNode node; TypeTreeNode node;
@ -70,7 +70,18 @@ namespace ICSharpCode.ILSpy
return null; return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType); TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren(); typeNode.EnsureLazyChildren();
return typeNode.Children.OfType<MethodTreeNode>().FirstOrDefault(m => m.MethodDefinition == def); MethodTreeNode methodNode = typeNode.VisibleChildren.OfType<MethodTreeNode>().FirstOrDefault(m => m.MethodDefinition == def);
if (methodNode != null)
return methodNode;
foreach (var p in typeNode.VisibleChildren.OfType<ILSpyTreeNode<MethodTreeNode>>()) {
// method might be a child or a property or events
p.EnsureLazyChildren();
methodNode = p.Children.FirstOrDefault(m => m.MethodDefinition == def);
if (methodNode != null)
return methodNode;
}
return null;
} }
public FieldTreeNode FindFieldNode(FieldDefinition def) public FieldTreeNode FindFieldNode(FieldDefinition def)
@ -79,7 +90,7 @@ namespace ICSharpCode.ILSpy
return null; return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType); TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren(); typeNode.EnsureLazyChildren();
return typeNode.Children.OfType<FieldTreeNode>().FirstOrDefault(m => m.FieldDefinition == def); return typeNode.VisibleChildren.OfType<FieldTreeNode>().FirstOrDefault(m => m.FieldDefinition == def);
} }
public PropertyTreeNode FindPropertyNode(PropertyDefinition def) public PropertyTreeNode FindPropertyNode(PropertyDefinition def)
@ -88,7 +99,7 @@ namespace ICSharpCode.ILSpy
return null; return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType); TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren(); typeNode.EnsureLazyChildren();
return typeNode.Children.OfType<PropertyTreeNode>().FirstOrDefault(m => m.PropertyDefinition == def); return typeNode.VisibleChildren.OfType<PropertyTreeNode>().FirstOrDefault(m => m.PropertyDefinition == def);
} }
public EventTreeNode FindEventNode(EventDefinition def) public EventTreeNode FindEventNode(EventDefinition def)
@ -97,7 +108,7 @@ namespace ICSharpCode.ILSpy
return null; return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType); TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
typeNode.EnsureLazyChildren(); typeNode.EnsureLazyChildren();
return typeNode.Children.OfType<EventTreeNode>().FirstOrDefault(m => m.EventDefinition == def); return typeNode.VisibleChildren.OfType<EventTreeNode>().FirstOrDefault(m => m.EventDefinition == def);
} }
public AssemblyTreeNode OpenAssembly(string file) public AssemblyTreeNode OpenAssembly(string file)

15
ILSpy/Disassembler/DisassemblerHelpers.cs

@ -99,6 +99,15 @@ namespace ICSharpCode.ILSpy.Disassembler
writer.Write(")"); writer.Write(")");
} }
static void WriteTo(this FieldReference field, ITextOutput writer)
{
field.FieldType.WriteTo(writer);
writer.Write(' ');
field.DeclaringType.WriteTo(writer);
writer.Write("::");
writer.WriteReference(field.Name, field);
}
static void WriteTo(this TypeReference type, ITextOutput writer) static void WriteTo(this TypeReference type, ITextOutput writer)
{ {
string name = ShortTypeName(type); string name = ShortTypeName(type);
@ -143,6 +152,12 @@ namespace ICSharpCode.ILSpy.Disassembler
return; return;
} }
FieldReference fieldRef = operand as FieldReference;
if (fieldRef != null) {
fieldRef.WriteTo(writer);
return;
}
string s = operand as string; string s = operand as string;
if (s != null) { if (s != null) {
writer.Write("\"" + s.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\""); writer.Write("\"" + s.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"");

2
ILSpy/EventTreeNode.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.ILSpy
/// <summary> /// <summary>
/// Represents an event in the TreeView. /// Represents an event in the TreeView.
/// </summary> /// </summary>
sealed class EventTreeNode : ILSpyTreeNode sealed class EventTreeNode : ILSpyTreeNode<MethodTreeNode>
{ {
readonly EventDefinition ev; readonly EventDefinition ev;

2
ILSpy/PropertyTreeNode.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.ILSpy
/// <summary> /// <summary>
/// Represents a property in the TreeView. /// Represents a property in the TreeView.
/// </summary> /// </summary>
sealed class PropertyTreeNode : ILSpyTreeNode sealed class PropertyTreeNode : ILSpyTreeNode<MethodTreeNode>
{ {
readonly PropertyDefinition property; readonly PropertyDefinition property;
readonly bool isIndexer; readonly bool isIndexer;

Loading…
Cancel
Save