|
|
|
@ -17,6 +17,7 @@
@@ -17,6 +17,7 @@
|
|
|
|
|
// DEALINGS IN THE SOFTWARE.
|
|
|
|
|
using System; |
|
|
|
|
using System.Collections.Concurrent; |
|
|
|
|
using System.Diagnostics; |
|
|
|
|
using System.Reflection.Metadata; |
|
|
|
|
using System.Threading; |
|
|
|
|
|
|
|
|
@ -35,8 +36,8 @@ namespace ICSharpCode.ILSpyX.Search
@@ -35,8 +36,8 @@ namespace ICSharpCode.ILSpyX.Search
|
|
|
|
|
{ |
|
|
|
|
public class LiteralSearchStrategy : AbstractEntitySearchStrategy |
|
|
|
|
{ |
|
|
|
|
readonly TypeCode searchTermLiteralType; |
|
|
|
|
readonly object searchTermLiteralValue; |
|
|
|
|
readonly TypeCode searchTermLiteralType = TypeCode.Empty; |
|
|
|
|
readonly object? searchTermLiteralValue; |
|
|
|
|
|
|
|
|
|
public LiteralSearchStrategy(ILanguage language, ApiVisibility apiVisibility, SearchRequest request, |
|
|
|
|
IProducerConsumerCollection<SearchResult> resultQueue) |
|
|
|
@ -131,10 +132,12 @@ namespace ICSharpCode.ILSpyX.Search
@@ -131,10 +132,12 @@ namespace ICSharpCode.ILSpyX.Search
|
|
|
|
|
case TypeCode.Single: |
|
|
|
|
case TypeCode.Double: |
|
|
|
|
case TypeCode.String: |
|
|
|
|
Debug.Assert(searchTermLiteralValue != null); |
|
|
|
|
return searchTermLiteralValue.Equals(val); |
|
|
|
|
default: |
|
|
|
|
// substring search with searchTerm
|
|
|
|
|
return IsMatch(val.ToString()); |
|
|
|
|
string? valAsString = val.ToString(); |
|
|
|
|
return valAsString != null && IsMatch(valAsString); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -143,6 +146,7 @@ namespace ICSharpCode.ILSpyX.Search
@@ -143,6 +146,7 @@ namespace ICSharpCode.ILSpyX.Search
|
|
|
|
|
var blob = module.Reader.GetMethodBody(methodDefinition.RelativeVirtualAddress).GetILReader(); |
|
|
|
|
if (searchTermLiteralType == TypeCode.Int64) |
|
|
|
|
{ |
|
|
|
|
Debug.Assert(searchTermLiteralValue != null); |
|
|
|
|
long val = (long)searchTermLiteralValue; |
|
|
|
|
while (blob.RemainingBytes > 0) |
|
|
|
|
{ |
|
|
|
@ -209,6 +213,7 @@ namespace ICSharpCode.ILSpyX.Search
@@ -209,6 +213,7 @@ namespace ICSharpCode.ILSpyX.Search
|
|
|
|
|
} |
|
|
|
|
else if (searchTermLiteralType != TypeCode.Empty) |
|
|
|
|
{ |
|
|
|
|
Debug.Assert(searchTermLiteralValue != null); |
|
|
|
|
ILOpCode expectedCode; |
|
|
|
|
switch (searchTermLiteralType) |
|
|
|
|
{ |
|
|
|
|