Browse Source

Improved referencing support.

pull/1/head
Daniel Grunwald 14 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 @@ -49,7 +49,7 @@ namespace ICSharpCode.ILSpy
TypeTreeNode decl = FindTypeNode(def.DeclaringType);
if (decl != null) {
decl.EnsureLazyChildren();
return decl.Children.OfType<TypeTreeNode>().FirstOrDefault(t => t.TypeDefinition == def);
return decl.VisibleChildren.OfType<TypeTreeNode>().FirstOrDefault(t => t.TypeDefinition == def);
}
} else {
TypeTreeNode node;
@ -70,7 +70,18 @@ namespace ICSharpCode.ILSpy @@ -70,7 +70,18 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
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)
@ -79,7 +90,7 @@ namespace ICSharpCode.ILSpy @@ -79,7 +90,7 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
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)
@ -88,7 +99,7 @@ namespace ICSharpCode.ILSpy @@ -88,7 +99,7 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
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)
@ -97,7 +108,7 @@ namespace ICSharpCode.ILSpy @@ -97,7 +108,7 @@ namespace ICSharpCode.ILSpy
return null;
TypeTreeNode typeNode = FindTypeNode(def.DeclaringType);
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)

15
ILSpy/Disassembler/DisassemblerHelpers.cs

@ -99,6 +99,15 @@ namespace ICSharpCode.ILSpy.Disassembler @@ -99,6 +99,15 @@ namespace ICSharpCode.ILSpy.Disassembler
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)
{
string name = ShortTypeName(type);
@ -143,6 +152,12 @@ namespace ICSharpCode.ILSpy.Disassembler @@ -143,6 +152,12 @@ namespace ICSharpCode.ILSpy.Disassembler
return;
}
FieldReference fieldRef = operand as FieldReference;
if (fieldRef != null) {
fieldRef.WriteTo(writer);
return;
}
string s = operand as string;
if (s != null) {
writer.Write("\"" + s.Replace("\\", "\\\\").Replace("\"", "\\\"") + "\"");

2
ILSpy/EventTreeNode.cs

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

2
ILSpy/PropertyTreeNode.cs

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

Loading…
Cancel
Save