Browse Source

fix #700 - Feature request - option to filter by properties

pull/703/head
Siegfried Pammer 11 years ago
parent
commit
c77bf5386e
  1. 37
      ILSpy/SearchPane.cs
  2. 29
      ILSpy/SearchStrategies.cs

37
ILSpy/SearchPane.cs

@ -60,6 +60,10 @@ namespace ICSharpCode.ILSpy
InitializeComponent(); InitializeComponent();
searchModeComboBox.Items.Add(new { Image = Images.Class, Name = "Type" }); searchModeComboBox.Items.Add(new { Image = Images.Class, Name = "Type" });
searchModeComboBox.Items.Add(new { Image = Images.Property, Name = "Member" }); searchModeComboBox.Items.Add(new { Image = Images.Property, Name = "Member" });
searchModeComboBox.Items.Add(new { Image = Images.Method, Name = "Method" });
searchModeComboBox.Items.Add(new { Image = Images.Field, Name = "Field" });
searchModeComboBox.Items.Add(new { Image = Images.Property, Name = "Property" });
searchModeComboBox.Items.Add(new { Image = Images.Event, Name = "Event" });
searchModeComboBox.Items.Add(new { Image = Images.Literal, Name = "Constant" }); searchModeComboBox.Items.Add(new { Image = Images.Literal, Name = "Constant" });
searchModeComboBox.SelectedIndex = (int)SearchMode.Type; searchModeComboBox.SelectedIndex = (int)SearchMode.Type;
ContextMenuProvider.Add(listBox); ContextMenuProvider.Add(listBox);
@ -249,23 +253,44 @@ namespace ICSharpCode.ILSpy
AbstractSearchStrategy GetSearchStrategy(SearchMode mode, string[] terms) AbstractSearchStrategy GetSearchStrategy(SearchMode mode, string[] terms)
{ {
if (terms.Length == 1) { if (terms.Length == 1) {
if (terms[0].StartsWith("t:")) if (terms[0].StartsWith("t:", StringComparison.Ordinal))
return new TypeSearchStrategy(terms[0].Substring(2)); return new TypeSearchStrategy(terms[0].Substring(2));
if (terms[0].StartsWith("m:")) if (terms[0].StartsWith("m:", StringComparison.Ordinal))
return new MemberSearchStrategy(terms[0].Substring(2)); return new MemberSearchStrategy(terms[0].Substring(2));
if (terms[0].StartsWith("c:")) if (terms[0].StartsWith("md:", StringComparison.Ordinal))
return new MemberSearchStrategy(terms[0].Substring(3), MemberSearchKind.Method);
if (terms[0].StartsWith("f:", StringComparison.Ordinal))
return new MemberSearchStrategy(terms[0].Substring(2), MemberSearchKind.Field);
if (terms[0].StartsWith("p:", StringComparison.Ordinal))
return new MemberSearchStrategy(terms[0].Substring(2), MemberSearchKind.Property);
if (terms[0].StartsWith("e:", StringComparison.Ordinal))
return new MemberSearchStrategy(terms[0].Substring(2), MemberSearchKind.Event);
if (terms[0].StartsWith("c:", StringComparison.Ordinal))
return new LiteralSearchStrategy(terms[0].Substring(2)); return new LiteralSearchStrategy(terms[0].Substring(2));
} }
switch (mode) { switch (mode)
{
case SearchMode.Type: case SearchMode.Type:
return new TypeSearchStrategy(terms); return new TypeSearchStrategy(terms);
case SearchMode.Member: case SearchMode.Member:
return new MemberSearchStrategy(terms); return new MemberSearchStrategy(terms);
case SearchMode.Literal: case SearchMode.Literal:
return new LiteralSearchStrategy(terms); return new LiteralSearchStrategy(terms);
case SearchMode.Method:
return new MemberSearchStrategy(terms, MemberSearchKind.Method);
case SearchMode.Field:
return new MemberSearchStrategy(terms, MemberSearchKind.Field);
case SearchMode.Property:
return new MemberSearchStrategy(terms, MemberSearchKind.Property);
case SearchMode.Event:
return new MemberSearchStrategy(terms, MemberSearchKind.Event);
} }
return null; return null;
@ -310,6 +335,10 @@ namespace ICSharpCode.ILSpy
{ {
Type, Type,
Member, Member,
Method,
Field,
Property,
Event,
Literal Literal
} }
} }

29
ILSpy/SearchStrategies.cs

@ -21,7 +21,7 @@ namespace ICSharpCode.ILSpy
{ {
if (terms.Length == 1 && terms[0].Length > 2) { if (terms.Length == 1 && terms[0].Length > 2) {
var search = terms[0]; var search = terms[0];
if (search.StartsWith("/") && search.EndsWith("/") && search.Length > 4) if (search.StartsWith("/", StringComparison.Ordinal) && search.EndsWith("/", StringComparison.Ordinal) && search.Length > 4)
regex = SafeNewRegex(search.Substring(1, search.Length - 2)); regex = SafeNewRegex(search.Substring(1, search.Length - 2));
terms[0] = search; terms[0] = search;
@ -303,31 +303,48 @@ namespace ICSharpCode.ILSpy
} }
} }
enum MemberSearchKind
{
All,
Field,
Property,
Event,
Method
}
class MemberSearchStrategy : AbstractSearchStrategy class MemberSearchStrategy : AbstractSearchStrategy
{ {
public MemberSearchStrategy(params string[] terms) MemberSearchKind searchKind;
public MemberSearchStrategy(string term, MemberSearchKind searchKind = MemberSearchKind.All)
: this(new[] { term }, searchKind)
{
}
public MemberSearchStrategy(string[] terms, MemberSearchKind searchKind = MemberSearchKind.All)
: base(terms) : base(terms)
{ {
this.searchKind = searchKind;
} }
protected override bool IsMatch(FieldDefinition field) protected override bool IsMatch(FieldDefinition field)
{ {
return IsMatch(field.Name); return (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Field) && IsMatch(field.Name);
} }
protected override bool IsMatch(PropertyDefinition property) protected override bool IsMatch(PropertyDefinition property)
{ {
return IsMatch(property.Name); return (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Property) && IsMatch(property.Name);
} }
protected override bool IsMatch(EventDefinition ev) protected override bool IsMatch(EventDefinition ev)
{ {
return IsMatch(ev.Name); return (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Event) && IsMatch(ev.Name);
} }
protected override bool IsMatch(MethodDefinition m) protected override bool IsMatch(MethodDefinition m)
{ {
return IsMatch(m.Name); return (searchKind == MemberSearchKind.All || searchKind == MemberSearchKind.Method) && IsMatch(m.Name);
} }
} }

Loading…
Cancel
Save