mirror of https://github.com/icsharpcode/ILSpy.git
12 changed files with 256 additions and 258 deletions
@ -1,24 +1,37 @@ |
|||||||
using System.Globalization; |
using System; |
||||||
using SRM = System.Reflection.Metadata; |
using System.Globalization; |
||||||
|
using System.Reflection.Metadata; |
||||||
|
using System.Reflection.Metadata.Ecma335; |
||||||
|
using ICSharpCode.Decompiler.Metadata; |
||||||
using ICSharpCode.Decompiler.TypeSystem; |
using ICSharpCode.Decompiler.TypeSystem; |
||||||
|
|
||||||
namespace ICSharpCode.ILSpy |
namespace ICSharpCode.ILSpy.Search |
||||||
{ |
{ |
||||||
class MetadataTokenSearchStrategy : TypeAndMemberSearchStrategy |
class MetadataTokenSearchStrategy : AbstractSearchStrategy |
||||||
{ |
{ |
||||||
readonly int searchTermToken; |
readonly EntityHandle searchTermToken; |
||||||
|
|
||||||
public MetadataTokenSearchStrategy(params string[] terms) |
public MetadataTokenSearchStrategy(Language language, Action<SearchResult> addResult, params string[] terms) |
||||||
: base(terms) |
: base(language, addResult, terms) |
||||||
{ |
{ |
||||||
if (searchTerm.Length == 1) { |
if (terms.Length == 1) { |
||||||
int.TryParse(searchTerm[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out searchTermToken); |
int.TryParse(terms[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out var token); |
||||||
|
searchTermToken = MetadataTokenHelpers.EntityHandleOrNil(token); |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
protected override bool MatchName(IEntity m, Language language) |
public override void Search(PEFile module) |
||||||
{ |
{ |
||||||
return SRM.Ecma335.MetadataTokens.GetToken(m.MetadataToken) == searchTermToken; |
if (searchTermToken.IsNil) return; |
||||||
|
var typeSystem = module.GetTypeSystemOrNull(); |
||||||
|
if (typeSystem == null) return; |
||||||
|
|
||||||
|
switch (searchTermToken.Kind) { |
||||||
|
case HandleKind.TypeDefinition: |
||||||
|
var type = ((MetadataModule)typeSystem.MainModule).GetDefinition((TypeDefinitionHandle)searchTermToken); |
||||||
|
addResult(ResultFromEntity(type)); |
||||||
|
break; |
||||||
|
} |
||||||
} |
} |
||||||
} |
} |
||||||
} |
} |
||||||
|
@ -1,53 +0,0 @@ |
|||||||
using System; |
|
||||||
using ICSharpCode.ILSpy.TreeNodes; |
|
||||||
using ICSharpCode.Decompiler.TypeSystem; |
|
||||||
|
|
||||||
namespace ICSharpCode.ILSpy |
|
||||||
{ |
|
||||||
class TypeAndMemberSearchStrategy : AbstractSearchStrategy |
|
||||||
{ |
|
||||||
public TypeAndMemberSearchStrategy(params string[] terms) |
|
||||||
: base(terms) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public override void Search(ITypeDefinition type, Language language, Action<SearchResult> addResult) |
|
||||||
{ |
|
||||||
if (MatchName(type, language)) |
|
||||||
{ |
|
||||||
string name = language.TypeToString(type, includeNamespace: false); |
|
||||||
var declaringType = type.DeclaringTypeDefinition; |
|
||||||
addResult(new SearchResult { |
|
||||||
Member = type, |
|
||||||
Image = TypeTreeNode.GetIcon(type), |
|
||||||
Fitness = CalculateFitness(type), |
|
||||||
Name = name, |
|
||||||
LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace, |
|
||||||
Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : type.Namespace |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
base.Search(type, language, addResult); |
|
||||||
} |
|
||||||
|
|
||||||
protected override bool IsMatch(IField field, Language language) |
|
||||||
{ |
|
||||||
return MatchName(field, language); |
|
||||||
} |
|
||||||
|
|
||||||
protected override bool IsMatch(IProperty property, Language language) |
|
||||||
{ |
|
||||||
return MatchName(property, language); |
|
||||||
} |
|
||||||
|
|
||||||
protected override bool IsMatch(IEvent ev, Language language) |
|
||||||
{ |
|
||||||
return MatchName(ev, language); |
|
||||||
} |
|
||||||
|
|
||||||
protected override bool IsMatch(IMethod m, Language language) |
|
||||||
{ |
|
||||||
return MatchName(m, language); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -1,34 +0,0 @@ |
|||||||
using System; |
|
||||||
using ICSharpCode.ILSpy.TreeNodes; |
|
||||||
using ICSharpCode.Decompiler.TypeSystem; |
|
||||||
|
|
||||||
namespace ICSharpCode.ILSpy |
|
||||||
{ |
|
||||||
class TypeSearchStrategy : AbstractSearchStrategy |
|
||||||
{ |
|
||||||
public TypeSearchStrategy(params string[] terms) |
|
||||||
: base(terms) |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public override void Search(ITypeDefinition type, Language language, Action<SearchResult> addResult) |
|
||||||
{ |
|
||||||
if (MatchName(type, language)) { |
|
||||||
string name = language.TypeToString(type, includeNamespace: false); |
|
||||||
var declaringType = type.DeclaringTypeDefinition; |
|
||||||
addResult(new SearchResult { |
|
||||||
Member = type, |
|
||||||
Fitness = CalculateFitness(type), |
|
||||||
Image = TypeTreeNode.GetIcon(type), |
|
||||||
Name = name, |
|
||||||
LocationImage = declaringType != null ? TypeTreeNode.GetIcon(declaringType) : Images.Namespace, |
|
||||||
Location = declaringType != null ? language.TypeToString(declaringType, includeNamespace: true) : type.Namespace |
|
||||||
}); |
|
||||||
} |
|
||||||
|
|
||||||
foreach (var nestedType in type.NestedTypes) { |
|
||||||
Search(nestedType, language, addResult); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
Loading…
Reference in new issue