mirror of https://github.com/icsharpcode/ILSpy.git
12 changed files with 256 additions and 258 deletions
@ -1,24 +1,37 @@
@@ -1,24 +1,37 @@
|
||||
using System.Globalization; |
||||
using SRM = System.Reflection.Metadata; |
||||
using System; |
||||
using System.Globalization; |
||||
using System.Reflection.Metadata; |
||||
using System.Reflection.Metadata.Ecma335; |
||||
using ICSharpCode.Decompiler.Metadata; |
||||
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) |
||||
: base(terms) |
||||
public MetadataTokenSearchStrategy(Language language, Action<SearchResult> addResult, params string[] terms) |
||||
: base(language, addResult, terms) |
||||
{ |
||||
if (searchTerm.Length == 1) { |
||||
int.TryParse(searchTerm[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out searchTermToken); |
||||
if (terms.Length == 1) { |
||||
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 @@
@@ -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 @@
@@ -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