Skip to content

Commit

Permalink
get value of field or property throws NotSupportedException
Browse files Browse the repository at this point in the history
  • Loading branch information
dudikeleti committed May 29, 2024
1 parent db0345c commit 0c40698
Showing 1 changed file with 40 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -410,12 +410,12 @@ internal static bool TryGetValue(MemberInfo fieldOrProp, object source, out obje
{
if (field.FieldType.ContainsGenericParameters ||
field.DeclaringType?.ContainsGenericParameters == true ||
field.ReflectedType?.ContainsGenericParameters == true)
field.ReflectedType?.ContainsGenericParameters == true ||
field is System.Reflection.Emit.FieldBuilder)
{
return false;
}

type = field.FieldType;
if (source != null || field.IsStatic)
{
value = field.GetValue(source);
Expand All @@ -427,10 +427,22 @@ internal static bool TryGetValue(MemberInfo fieldOrProp, object source, out obje

case PropertyInfo property:
{
type = property.PropertyType;
if (property.PropertyType.ContainsGenericParameters ||
property.DeclaringType?.ContainsGenericParameters == true ||
property.ReflectedType?.ContainsGenericParameters == true)
{
return false;
}

if (source != null || property.GetMethod?.IsStatic == true)
{
value = property.GetMethod.Invoke(source, Array.Empty<object>());
var getMethod = property.GetGetMethod(true);
if (getMethod == null || getMethod is System.Reflection.Emit.MethodBuilder)
{
return false;
}

value = property.GetMethod?.Invoke(source, Array.Empty<object>());
return true;
}

Expand All @@ -439,17 +451,39 @@ internal static bool TryGetValue(MemberInfo fieldOrProp, object source, out obje

default:
{
Log.Error(nameof(DebuggerSnapshotSerializer) + "." + nameof(TryGetValue) + ": Can't get value of {Name}. Unsupported member info {Type}", fieldOrProp.Name, fieldOrProp.GetType());
Log.Error(nameof(DebuggerSnapshotSerializer) + "." + nameof(TryGetValue) + ": Can't get value of {Member} from {Source}. Unsupported member info.", GetMemberInfo(fieldOrProp), source?.GetType().FullName);
break;
}
}
}
catch (Exception e)
{
Log.Error(e, nameof(DebuggerSnapshotSerializer) + "." + nameof(TryGetValue));
Log.Error(e, nameof(DebuggerSnapshotSerializer) + "." + nameof(TryGetValue) + "Can't get value of {Member} from {Source}", GetMemberInfo(fieldOrProp), source?.GetType().FullName);
}

return false;

string GetMemberInfo(MemberInfo memberInfo)
{
try
{
if (memberInfo is FieldInfo field)
{
return $"Type: {field.FieldType.FullName}, Name: {field.Name}, Attributes: {field.Attributes.ToString()}";
}

if (memberInfo is PropertyInfo property)
{
return $"Type: {property.PropertyType.FullName}, Name: {property.Name}, Attributes: {property.Attributes.ToString()}";
}

return $"Type: {memberInfo.MemberType}, Name: {memberInfo.Name}";
}
catch
{
return "Unknown";
}
}
}

private static CancellationTokenSource CreateCancellationTimeout()
Expand Down

0 comments on commit 0c40698

Please sign in to comment.