|
|
@ -65,16 +65,21 @@ namespace ICSharpCode.ILSpy.Search |
|
|
|
|
|
|
|
|
|
|
|
foreach (var handle in metadata.FieldDefinitions) { |
|
|
|
foreach (var handle in metadata.FieldDefinitions) { |
|
|
|
var fd = metadata.GetFieldDefinition(handle); |
|
|
|
var fd = metadata.GetFieldDefinition(handle); |
|
|
|
if (!fd.HasFlag(System.Reflection.FieldAttributes.HasFieldRVA) || !fd.HasFlag(System.Reflection.FieldAttributes.Literal)) |
|
|
|
if (!fd.HasFlag(System.Reflection.FieldAttributes.Literal)) |
|
|
|
continue; |
|
|
|
continue; |
|
|
|
// TODO
|
|
|
|
var constantHandle = fd.GetDefaultValue(); |
|
|
|
//fd.GetInitialValue(module.Reader, typeSystem);
|
|
|
|
if (constantHandle.IsNil) |
|
|
|
//IField field = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle);
|
|
|
|
continue; |
|
|
|
//addResult(ResultFromEntity(field));
|
|
|
|
var constant = metadata.GetConstant(constantHandle); |
|
|
|
|
|
|
|
var blob = metadata.GetBlobReader(constant.Value); |
|
|
|
|
|
|
|
if (!IsLiteralMatch(metadata, blob.ReadConstant(constant.TypeCode))) |
|
|
|
|
|
|
|
continue; |
|
|
|
|
|
|
|
IField field = ((MetadataModule)typeSystem.MainModule).GetDefinition(handle); |
|
|
|
|
|
|
|
addResult(ResultFromEntity(field)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
bool IsLiteralMatch(PEFile module, object val) |
|
|
|
bool IsLiteralMatch(MetadataReader metadata, object val) |
|
|
|
{ |
|
|
|
{ |
|
|
|
if (val == null) |
|
|
|
if (val == null) |
|
|
|
return false; |
|
|
|
return false; |
|
|
@ -91,7 +96,7 @@ namespace ICSharpCode.ILSpy.Search |
|
|
|
return searchTermLiteralValue.Equals(val); |
|
|
|
return searchTermLiteralValue.Equals(val); |
|
|
|
default: |
|
|
|
default: |
|
|
|
// substring search with searchTerm
|
|
|
|
// substring search with searchTerm
|
|
|
|
return IsMatch(module.Metadata, MetadataTokens.StringHandle(0), val.ToString()); |
|
|
|
return IsMatch(metadata, MetadataTokens.StringHandle(0), val.ToString()); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|