Browse Source

Clean up commented code a bit

pull/1198/head
Siegfried Pammer 7 years ago
parent
commit
a5f1dda9e9
  1. 16
      ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs
  2. 4
      ICSharpCode.Decompiler/Disassembler/DomExtensions.cs
  3. 52
      ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs
  4. 117
      ICSharpCode.Decompiler/Metadata/Dom.cs
  5. 25
      ICSharpCode.Decompiler/SRMHacks.cs
  6. 4
      ILSpy/Languages/Language.cs
  7. 47
      ILSpy/MainWindow.xaml.cs
  8. 6
      ILSpy/TreeNodes/AssemblyListTreeNode.cs
  9. 16
      ILSpy/TreeNodes/CopyFullyQualifiedNameContextMenuEntry.cs
  10. 10
      ILSpy/TreeNodes/MethodTreeNode.cs

16
ICSharpCode.Decompiler/Disassembler/DisassemblerHelpers.cs

@ -158,22 +158,6 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -158,22 +158,6 @@ namespace ICSharpCode.Decompiler.Disassembler
if (operand == null)
throw new ArgumentNullException(nameof(operand));
/*VariableReference variableRef = operand as VariableReference;
if (variableRef != null) {
writer.WriteReference(variableRef.Index.ToString(), variableRef);
return;
}
ParameterReference paramRef = operand as ParameterReference;
if (paramRef != null) {
if (string.IsNullOrEmpty(paramRef.Name)) {
var paramDef = paramRef.Resolve();
writer.WriteReference((paramDef == null ? paramRef.Index : paramDef.Sequence).ToString(), paramRef);
} else
writer.WriteReference(Escape(paramRef.Name), paramRef);
return;
}*/
string s = operand as string;
if (s != null) {
WriteOperand(writer, s);

4
ICSharpCode.Decompiler/Disassembler/DomExtensions.cs

@ -71,9 +71,9 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -71,9 +71,9 @@ namespace ICSharpCode.Decompiler.Disassembler
}
bool isCompilerControlled = (methodDefinition.Attributes & MethodAttributes.MemberAccessMask) == MethodAttributes.PrivateScope;
if (isCompilerControlled) {
output.Write(DisassemblerHelpers.Escape(method.Name + "$PST" + MetadataTokens.GetToken(method.Handle).ToString("X8")));
output.Write(DisassemblerHelpers.Escape(metadata.GetString(methodDefinition.Name) + "$PST" + MetadataTokens.GetToken(method.Handle).ToString("X8")));
} else {
output.Write(DisassemblerHelpers.Escape(method.Name));
output.Write(DisassemblerHelpers.Escape(metadata.GetString(methodDefinition.Name)));
}
var genericParameters = methodDefinition.GetGenericParameters();
if (genericParameters.Count > 0) {

52
ICSharpCode.Decompiler/Disassembler/ReflectionDisassembler.cs

@ -150,7 +150,7 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -150,7 +150,7 @@ namespace ICSharpCode.Decompiler.Disassembler
var moduleRef = metadata.GetModuleReference(info.Module);
output.Write("(\"" + DisassemblerHelpers.EscapeString(metadata.GetString(moduleRef.Name)) + "\"");
if (!info.Name.IsNil && metadata.GetString(info.Name) != method.Name)
if (!info.Name.IsNil && metadata.GetString(info.Name) != metadata.GetString(methodDefinition.Name))
output.Write(" as \"" + DisassemblerHelpers.EscapeString(metadata.GetString(info.Name)) + "\"");
if ((info.Attributes & MethodImportAttributes.ExactSpelling) == MethodImportAttributes.ExactSpelling)
@ -221,9 +221,9 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -221,9 +221,9 @@ namespace ICSharpCode.Decompiler.Disassembler
}
if (isCompilerControlled) {
output.Write(DisassemblerHelpers.Escape(method.Name + "$PST" + MetadataTokens.GetToken(method.Handle).ToString("X8")));
output.Write(DisassemblerHelpers.Escape(metadata.GetString(methodDefinition.Name) + "$PST" + MetadataTokens.GetToken(method.Handle).ToString("X8")));
} else {
output.Write(DisassemblerHelpers.Escape(method.Name));
output.Write(DisassemblerHelpers.Escape(metadata.GetString(methodDefinition.Name)));
}
WriteTypeParameters(output, method.Module, new GenericContext(method), methodDefinition.GetGenericParameters());
@ -1227,26 +1227,56 @@ namespace ICSharpCode.Decompiler.Disassembler @@ -1227,26 +1227,56 @@ namespace ICSharpCode.Decompiler.Disassembler
public void WriteModuleHeader(PEFile module)
{
var metadata = module.GetMetadataReader();
void WriteExportedType(ExportedType exportedType)
{
if (!exportedType.Namespace.IsNil) {
output.Write(DisassemblerHelpers.Escape(metadata.GetString(exportedType.Namespace)));
output.Write('.');
}
output.Write(DisassemblerHelpers.Escape(metadata.GetString(exportedType.Name)));
}
foreach (var et in metadata.ExportedTypes) {
var exportedType = metadata.GetExportedType(et);
output.Write(".class extern ");
if (exportedType.IsForwarder)
output.Write("forwarder ");
/*exportedType.Implementation.WriteTo(metadata, output);
output.Write(metadata.GetFullName(exportedType. != null ? exportedType.Name : exportedType.FullName);
WriteExportedType(exportedType);
OpenBlock(false);
if (exportedType.DeclaringType != null)
output.WriteLine(".class extern {0}", DisassemblerHelpers.Escape(exportedType.DeclaringType.FullName));
else
output.WriteLine(".assembly extern {0}", DisassemblerHelpers.Escape(exportedType.Scope.Name));
CloseBlock();*/
switch (exportedType.Implementation.Kind) {
case HandleKind.AssemblyFile:
throw new NotImplementedException();
case HandleKind.ExportedType:
output.Write(".class extern ");
var declaringType = metadata.GetExportedType((ExportedTypeHandle)exportedType.Implementation);
while (true) {
WriteExportedType(declaringType);
if (declaringType.Implementation.Kind == HandleKind.ExportedType) {
declaringType = metadata.GetExportedType((ExportedTypeHandle)declaringType.Implementation);
} else {
break;
}
}
output.WriteLine();
break;
case HandleKind.AssemblyReference:
output.Write(".assembly extern ");
var reference = metadata.GetAssemblyReference((AssemblyReferenceHandle)exportedType.Implementation);
output.Write(DisassemblerHelpers.Escape(metadata.GetString(reference.Name)));
output.WriteLine();
break;
default:
throw new NotSupportedException();
}
CloseBlock();
}
var moduleDefinition = metadata.GetModuleDefinition();
output.WriteLine(".module {0}", metadata.GetString(moduleDefinition.Name));
output.WriteLine("// MVID: {0}", metadata.GetGuid(moduleDefinition.Mvid).ToString("B").ToUpperInvariant());
// TODO: imagebase, file alignment, stackreserve, subsystem
//output.WriteLine(".corflags 0x{0:x} // {1}", module., module.Attributes.ToString());
output.WriteLine(".corflags 0x{0:x} // {1}", module.Reader.PEHeaders.CorHeader.Flags, module.Reader.PEHeaders.CorHeader.Flags.ToString());
WriteAttributes(module, metadata.GetCustomAttributes(EntityHandle.ModuleDefinition));
}

117
ICSharpCode.Decompiler/Metadata/Dom.cs

@ -137,7 +137,7 @@ namespace ICSharpCode.Decompiler.Metadata @@ -137,7 +137,7 @@ namespace ICSharpCode.Decompiler.Metadata
AssemblyLinked,
}
public struct Resource
public struct Resource : IEquatable<Resource>
{
public PEFile Module { get; }
public ManifestResourceHandle Handle { get; }
@ -151,6 +151,26 @@ namespace ICSharpCode.Decompiler.Metadata @@ -151,6 +151,26 @@ namespace ICSharpCode.Decompiler.Metadata
ManifestResource This() => Module.GetMetadataReader().GetManifestResource(Handle);
public bool Equals(Resource other)
{
return Module == other.Module && Handle == other.Handle;
}
public override bool Equals(object obj)
{
if (obj is Resource res)
return Equals(res);
return false;
}
public override int GetHashCode()
{
return unchecked(982451629 * Module.GetHashCode() + 982451653 * MetadataTokens.GetToken(Handle));
}
public static bool operator ==(Resource lhs, Resource rhs) => lhs.Equals(rhs);
public static bool operator !=(Resource lhs, Resource rhs) => !lhs.Equals(rhs);
public string Name => Module.GetMetadataReader().GetString(This().Name);
public ManifestResourceAttributes Attributes => This().Attributes;
@ -449,24 +469,6 @@ namespace ICSharpCode.Decompiler.Metadata @@ -449,24 +469,6 @@ namespace ICSharpCode.Decompiler.Metadata
public static bool operator ==(MethodDefinition lhs, MethodDefinition rhs) => lhs.Equals(rhs);
public static bool operator !=(MethodDefinition lhs, MethodDefinition rhs) => !lhs.Equals(rhs);
public string Name {
get {
var reader = Module.GetMetadataReader();
return reader.GetString(reader.GetMethodDefinition(Handle).Name);
}
}
/*
public TypeDefinition DeclaringType => new TypeDefinition(Module, This().GetDeclaringType());
public MethodAttributes Attributes => This().Attributes;
public MethodImplAttributes ImplAttributes => This().ImplAttributes;
public CustomAttributeHandleCollection CustomAttributes => This().GetCustomAttributes();
public DeclarativeSecurityAttributeHandleCollection DeclarativeSecurityAttributes => This().GetDeclarativeSecurityAttributes();
public bool HasFlag(MethodAttributes attribute) => (This().Attributes & attribute) == attribute;
public bool HasPInvokeInfo => !This().GetImport().Module.IsNil || HasFlag(MethodAttributes.PinvokeImpl);
public bool IsConstructor => This().IsConstructor(Module.GetMetadataReader());
public bool HasParameters => This().GetParameters().Count > 0;*/
public IList<SequencePoint> GetSequencePoints()
{
return Module.DebugInfo?.GetSequencePoints(this);
@ -512,60 +514,6 @@ namespace ICSharpCode.Decompiler.Metadata @@ -512,60 +514,6 @@ namespace ICSharpCode.Decompiler.Metadata
public static bool operator ==(PropertyDefinition lhs, PropertyDefinition rhs) => lhs.Equals(rhs);
public static bool operator !=(PropertyDefinition lhs, PropertyDefinition rhs) => !lhs.Equals(rhs);
/*
public string Name {
get {
var reader = Module.GetMetadataReader();
return reader.GetString(reader.GetPropertyDefinition(Handle).Name);
}
}
public TypeDefinition DeclaringType => GetAccessors().First().Method.DeclaringType;
public MethodDefinition GetMethod => GetAccessors().FirstOrDefault(m => m.Kind == MethodSemanticsAttributes.Getter).Method;
public MethodDefinition SetMethod => GetAccessors().FirstOrDefault(m => m.Kind == MethodSemanticsAttributes.Setter).Method;
public ImmutableArray<MethodDefinition> OtherMethods => GetAccessors().Where(a => a.Kind == MethodSemanticsAttributes.Other).Select(a => a.Method).ToImmutableArray();
public PropertyAttributes Attributes => This().Attributes;
public bool HasFlag(PropertyAttributes attribute) => (This().Attributes & attribute) == attribute;
public bool HasParameters => Handle.HasParameters(Module.GetMetadataReader());
public CustomAttributeHandleCollection CustomAttributes => This().GetCustomAttributes();
public bool IsIndexer => HasMatchingDefaultMemberAttribute(out var attr);
public unsafe ImmutableArray<(MethodSemanticsAttributes Kind, MethodDefinition Method)> GetAccessors()
{
return GetAccessors(Module, (uint)(MetadataTokens.GetRowNumber(Handle) << 1) | 1);
}
internal static unsafe ImmutableArray<(MethodSemanticsAttributes Kind, MethodDefinition Method)> GetAccessors(PEFile module, uint encodedTag)
{
var reader = module.GetMetadataReader();
byte* startPointer = reader.MetadataPointer;
int offset = reader.GetTableMetadataOffset(TableIndex.MethodSemantics);
var methodDefRefSize = reader.GetReferenceSize(TableIndex.MethodDef);
(int startRow, int endRow) = reader.BinarySearchRange(TableIndex.MethodSemantics, 2 + methodDefRefSize, encodedTag, reader.IsSmallReference(TableIndex.MethodSemantics));
if (startRow == -1)
return ImmutableArray<(MethodSemanticsAttributes Kind, MethodDefinition Method)>.Empty;
var methods = new(MethodSemanticsAttributes Kind, MethodDefinition Method)[endRow - startRow + 1];
int rowSize = reader.GetTableRowSize(TableIndex.MethodSemantics);
for (int row = startRow; row <= endRow; row++) {
int rowOffset = row * rowSize;
byte* ptr = startPointer + offset + rowOffset;
var kind = (MethodSemanticsAttributes)(*(ushort*)ptr);
uint rowNo = methodDefRefSize == 2 ? *(ushort*)(ptr + 2) : *(uint*)(ptr + 2);
var handle = MetadataTokens.MethodDefinitionHandle((int)rowNo);
methods[row - startRow] = (kind, new MethodDefinition(module, handle));
}
return methods.ToImmutableArray();
}
public MethodSignature<TType> DecodeSignature<TType, TGenericContext>(ISignatureTypeProvider<TType, TGenericContext> provider, TGenericContext genericContext)
{
return This().DecodeSignature(provider, genericContext);
}
*/
}
public struct FieldDefinition : IEquatable<FieldDefinition>, IMetadataEntity
@ -677,29 +625,6 @@ namespace ICSharpCode.Decompiler.Metadata @@ -677,29 +625,6 @@ namespace ICSharpCode.Decompiler.Metadata
public static bool operator ==(EventDefinition lhs, EventDefinition rhs) => lhs.Equals(rhs);
public static bool operator !=(EventDefinition lhs, EventDefinition rhs) => !lhs.Equals(rhs);
/*
public string Name {
get {
var reader = Module.GetMetadataReader();
return reader.GetString(reader.GetEventDefinition(Handle).Name);
}
}
public TypeDefinition DeclaringType => GetAccessors().First().Method.DeclaringType;
public EventAttributes Attributes => This().Attributes;
public bool HasFlag(EventAttributes attribute) => (This().Attributes & attribute) == attribute;
public CustomAttributeHandleCollection CustomAttributes => This().GetCustomAttributes();
public MethodDefinition AddMethod => GetAccessors().FirstOrDefault(m => m.Kind == MethodSemanticsAttributes.Adder).Method;
public MethodDefinition RemoveMethod => GetAccessors().FirstOrDefault(m => m.Kind == MethodSemanticsAttributes.Remover).Method;
public MethodDefinition InvokeMethod => GetAccessors().FirstOrDefault(m => m.Kind == MethodSemanticsAttributes.Raiser).Method;
public ImmutableArray<MethodDefinition> OtherMethods => GetAccessors().Where(a => a.Kind == MethodSemanticsAttributes.Other).Select(a => a.Method).ToImmutableArray();
public unsafe ImmutableArray<(MethodSemanticsAttributes Kind, MethodDefinition Method)> GetAccessors()
{
return PropertyDefinition.GetAccessors(Module, (uint)(MetadataTokens.GetRowNumber(Handle) << 1) | 0);
}*/
}
public struct TypeDefinition : IEquatable<TypeDefinition>, IMetadataEntity

25
ICSharpCode.Decompiler/SRMHacks.cs

@ -58,5 +58,30 @@ namespace ICSharpCode.Decompiler @@ -58,5 +58,30 @@ namespace ICSharpCode.Decompiler
return list.ToImmutableArray();
}
/*
internal static unsafe ImmutableArray<(MethodSemanticsAttributes Kind, MethodDefinition Method)> GetAccessors(PEFile module, uint encodedTag)
{
var reader = module.GetMetadataReader();
byte* startPointer = reader.MetadataPointer;
int offset = reader.GetTableMetadataOffset(TableIndex.MethodSemantics);
var methodDefRefSize = reader.GetReferenceSize(TableIndex.MethodDef);
(int startRow, int endRow) = reader.BinarySearchRange(TableIndex.MethodSemantics, 2 + methodDefRefSize, encodedTag, reader.IsSmallReference(TableIndex.MethodSemantics));
if (startRow == -1)
return ImmutableArray<(MethodSemanticsAttributes Kind, MethodDefinition Method)>.Empty;
var methods = new(MethodSemanticsAttributes Kind, MethodDefinition Method)[endRow - startRow + 1];
int rowSize = reader.GetTableRowSize(TableIndex.MethodSemantics);
for (int row = startRow; row <= endRow; row++) {
int rowOffset = row * rowSize;
byte* ptr = startPointer + offset + rowOffset;
var kind = (MethodSemanticsAttributes)(*(ushort*)ptr);
uint rowNo = methodDefRefSize == 2 ? *(ushort*)(ptr + 2) : *(uint*)(ptr + 2);
var handle = MetadataTokens.MethodDefinitionHandle((int)rowNo);
methods[row - startRow] = (kind, new MethodDefinition(module, handle));
}
return methods.ToImmutableArray();
}
*/
}
}

4
ILSpy/Languages/Language.cs

@ -62,7 +62,9 @@ namespace ICSharpCode.ILSpy @@ -62,7 +62,9 @@ namespace ICSharpCode.ILSpy
public virtual void DecompileMethod(MethodDefinition method, ITextOutput output, DecompilationOptions options)
{
WriteCommentLine(output, TypeToString(new Entity(method.Module, method.This().GetDeclaringType()), true) + "." + method.Name);
var metadata = method.Module.GetMetadataReader();
var methodDefinition = metadata.GetMethodDefinition(method.Handle);
WriteCommentLine(output, TypeToString(new Entity(method.Module, methodDefinition.GetDeclaringType()), true) + "." + metadata.GetString(methodDefinition.Name));
}
public virtual void DecompileProperty(PropertyDefinition property, ITextOutput output, DecompilationOptions options)

47
ILSpy/MainWindow.xaml.cs

@ -34,6 +34,7 @@ using System.Windows.Media.Imaging; @@ -34,6 +34,7 @@ using System.Windows.Media.Imaging;
using System.Windows.Threading;
using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.Documentation;
using ICSharpCode.Decompiler.Metadata;
using ICSharpCode.ILSpy.TextView;
using ICSharpCode.ILSpy.TreeNodes;
using ICSharpCode.TreeView;
@ -576,44 +577,16 @@ namespace ICSharpCode.ILSpy @@ -576,44 +577,16 @@ namespace ICSharpCode.ILSpy
public ILSpyTreeNode FindTreeNode(object reference)
{
/*if (reference is TypeReference)
{
return assemblyListTreeNode.FindTypeNode(((TypeReference)reference).Resolve());
}
else if (reference is MethodReference)
{
return assemblyListTreeNode.FindMethodNode(((MethodReference)reference).Resolve());
}
else if (reference is FieldReference)
{
return assemblyListTreeNode.FindFieldNode(((FieldReference)reference).Resolve());
switch (reference) {
case PEFile asm:
return assemblyListTreeNode.FindAssemblyNode(asm);
case Resource res:
return assemblyListTreeNode.FindResourceNode(res);
case IMetadataEntity entity:
throw new NotImplementedException();
default:
return null;
}
else if (reference is PropertyReference)
{
return assemblyListTreeNode.FindPropertyNode(((PropertyReference)reference).Resolve());
}
else if (reference is EventReference)
{
return assemblyListTreeNode.FindEventNode(((EventReference)reference).Resolve());
}
else if (reference is PEFile)
{
return assemblyListTreeNode.FindAssemblyNode((AssemblyDefinition)reference);
}
else if (reference is ModuleDefinition)
{
return assemblyListTreeNode.FindAssemblyNode((ModuleDefinition)reference);
}
else if (reference is Resource)
{
return null;
//return assemblyListTreeNode.FindResourceNode((Resource)reference);
}
else
{
return null;
}*/
return null;
}
public void JumpToReference(object reference)

6
ILSpy/TreeNodes/AssemblyListTreeNode.cs

@ -45,9 +45,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -45,9 +45,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
public AssemblyListTreeNode(AssemblyList assemblyList)
{
if (assemblyList == null)
throw new ArgumentNullException(nameof(assemblyList));
this.assemblyList = assemblyList;
this.assemblyList = assemblyList ?? throw new ArgumentNullException(nameof(assemblyList));
BindToObservableCollection(assemblyList.assemblies);
}
@ -154,7 +152,6 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -154,7 +152,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
#region Find*Node
/*
public ILSpyTreeNode FindResourceNode(Resource resource)
{
if (resource == null)
@ -178,7 +175,6 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -178,7 +175,6 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
return null;
}
*/
public AssemblyTreeNode FindAssemblyNode(PEFile module)
{

16
ILSpy/TreeNodes/CopyFullyQualifiedNameContextMenuEntry.cs

@ -1,5 +1,6 @@ @@ -1,5 +1,6 @@
using System.Windows;
using Mono.Cecil;
using System;
using System.Windows;
using ICSharpCode.Decompiler.Metadata;
namespace ICSharpCode.ILSpy.TreeNodes
{
@ -15,9 +16,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -15,9 +16,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
public void Execute(TextViewContext context)
{
/*var member = GetMemberNodeFromContext(context)?.Member;
var member = GetMemberNodeFromContext(context)?.Member;
if (member == null) return;
Clipboard.SetText(GetFullyQualifiedName(member));*/
Clipboard.SetText(GetFullyQualifiedName(member));
}
private IMemberTreeNode GetMemberNodeFromContext(TextViewContext context)
@ -28,15 +29,16 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -28,15 +29,16 @@ namespace ICSharpCode.ILSpy.TreeNodes
/// <summary>
/// Resolve full type name using .NET type representation for nested types.
/// </summary>
private string GetFullyQualifiedName(MemberReference member)
private string GetFullyQualifiedName(IMetadataEntity member)
{
if (member.DeclaringType != null) {
/*if (member.DeclaringType != null) {
if (member is TypeReference)
return GetFullyQualifiedName(member.DeclaringType) + "+" + member.Name;
else
return GetFullyQualifiedName(member.DeclaringType) + "." + member.Name;
}
return (member is TypeReference t ? t.Namespace + "." : "") + member.Name;
return (member is TypeReference t ? t.Namespace + "." : "") + member.Name;*/
throw new NotImplementedException();
}
}
}

10
ILSpy/TreeNodes/MethodTreeNode.cs

@ -79,8 +79,8 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -79,8 +79,8 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
var metadata = method.Module.GetMetadataReader();
var methodDefinition = metadata.GetMethodDefinition(method.Handle);
if (methodDefinition.HasFlag(MethodAttributes.SpecialName) && method.Name.StartsWith("op_", StringComparison.Ordinal)) {
var methodName = metadata.GetString(methodDefinition.Name);
if (methodDefinition.HasFlag(MethodAttributes.SpecialName) && methodName.StartsWith("op_", StringComparison.Ordinal)) {
return Images.GetIcon(MemberIcon.Operator, GetOverlayIcon(methodDefinition.Attributes), false);
}
@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -89,7 +89,7 @@ namespace ICSharpCode.ILSpy.TreeNodes
}
if (methodDefinition.HasFlag(MethodAttributes.SpecialName) &&
(method.Name == ".ctor" || method.Name == ".cctor")) {
(methodName == ".ctor" || methodName == ".cctor")) {
return Images.GetIcon(MemberIcon.Constructor, GetOverlayIcon(methodDefinition.Attributes), methodDefinition.HasFlag(MethodAttributes.Static));
}
@ -137,7 +137,9 @@ namespace ICSharpCode.ILSpy.TreeNodes @@ -137,7 +137,9 @@ namespace ICSharpCode.ILSpy.TreeNodes
{
if (!settings.ShowInternalApi && !IsPublicAPI)
return FilterResult.Hidden;
if (settings.SearchTermMatches(MethodDefinition.Name) && settings.Language.ShowMember(MethodDefinition))
var metadata = MethodDefinition.Module.GetMetadataReader();
var methodDefinition = metadata.GetMethodDefinition(MethodDefinition.Handle);
if (settings.SearchTermMatches(metadata.GetString(methodDefinition.Name)) && settings.Language.ShowMember(MethodDefinition))
return FilterResult.Match;
else
return FilterResult.Hidden;

Loading…
Cancel
Save