in debugger/debugger-worker/src/Values/Render/ValuePresenters/SerializedPropertyPresenter.cs [40:141]
public override IValuePresentation? PresentValue(IObjectValueRole<TValue> valueRole,
IMetadataTypeLite instanceType,
IPresentationOptions options,
IUserDataHolder dataHolder,
CancellationToken token)
{
return myLogger.CatchEvaluatorException<TValue, IValuePresentation>(
() =>
{
var showName = (valueRole.ValueReference as CalculatedValueReferenceDecorator<TValue>)
?.AllowNameInValue ?? true;
var showTypeName = (valueRole.ValueReference as CalculatedValueReferenceDecorator<TValue>)
?.AllowDefaultTypePresentation ?? true;
var nameValuePresentation = valueRole.GetInstancePropertyReference("name")?.ToValue(ValueServices)
?.GetValuePresentation(options);
var propertyTypeReference = valueRole.GetInstancePropertyReference("propertyType");
var propertyTypeValuePresentation = propertyTypeReference?.ToValue(ValueServices)
?.GetValuePresentation(options);
var propertyTypeEnumValueObject =
propertyTypeReference?.AsObjectSafe(options)?.GetEnumValue(options);
var propertyType = (SerializedPropertyKind)Enum.ToObject(typeof(SerializedPropertyKind),
propertyTypeEnumValueObject ?? SerializedPropertyKind.Generic);
int? arraySize = null;
string? arrayElementType = null;
string? genericType = null;
if (propertyType == SerializedPropertyKind.Generic)
{
if (Util.TryEvaluatePrimitiveProperty(valueRole, "isArray", options, out bool isArray)
&& isArray)
{
arraySize = valueRole.GetInstancePropertyReference("arraySize")
?.AsPrimitiveSafe(options)
?.GetPrimitive<int>();
arrayElementType = valueRole.GetInstancePropertyReference("arrayElementType")
?.AsStringSafe(options)
?.GetString();
}
else if (Util.TryEvaluatePrimitiveProperty(valueRole, "isFixedBuffer", options,
out bool isFixedBuffer) && isFixedBuffer)
{
arraySize = valueRole.GetInstancePropertyReference("fixedBufferSize")
?.AsPrimitiveSafe(options)
?.GetPrimitive<int>();
arrayElementType = valueRole.GetInstancePropertyReference("arrayElementType")
?.AsStringSafe(options)
?.GetString();
}
else
{
genericType = valueRole.GetInstancePropertyReference("type")?.AsStringSafe(options)
?.GetString();
}
}
var valuePresentation = GetValuePresentation(valueRole, propertyType, options, out var extraDetail);
var parts = PresentationBuilder.New();
parts.OpenBrace();
if (showName && nameValuePresentation != null)
{
parts.Comment("name: ").Add(nameValuePresentation.Value.ToArray())
.Add(ValuePresentationPart.Space);
}
parts.Comment("propertyType: ");
if (propertyType == SerializedPropertyKind.Generic && arraySize != null && arrayElementType != null)
parts.Default($"{arrayElementType}[{arraySize}]");
else if (genericType != null)
parts.Default(genericType);
else if (propertyTypeValuePresentation != null)
parts.Add(propertyTypeValuePresentation.Value.ToArray());
else
parts.Comment("(Unknown)");
if (valuePresentation != null)
{
parts.Add(ValuePresentationPart.Space)
.Comment("value: ").Add(valuePresentation.Value.ToArray());
if (!string.IsNullOrEmpty(extraDetail))
{
parts.Add(ValuePresentationPart.Space).SpecialSymbol("(").Default(extraDetail)
.SpecialSymbol(")");
}
}
parts.ClosedBrace();
// Hide the default type presentation if we've been asked to
var flags = !showTypeName ? ValueFlags.IsDefaultTypePresentation : 0;
return SimplePresentation.Create(parts.Result(), PresentationFlags.Success, ValueFlags.None | flags,
instanceType);
},
exception =>
{
myLogger.LogThrownUnityException(exception, valueRole.ValueReference.OriginatingFrame,
ValueServices, options);
});
}