55 lines
1.6 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
2021-05-05 21:27:09 +10:00
using UnityExplorer.UI.Inspectors;
2021-05-05 21:27:09 +10:00
namespace UnityExplorer.UI.CacheObject
{
public class CacheField : CacheMember
{
public FieldInfo FieldInfo { get; internal set; }
public override Type DeclaringType => FieldInfo.DeclaringType;
2021-05-05 21:27:09 +10:00
public override bool IsStatic => FieldInfo.IsStatic;
public override bool CanWrite => m_canWrite ?? (bool)(m_canWrite = !(FieldInfo.IsLiteral && !FieldInfo.IsInitOnly));
private bool? m_canWrite;
public override bool ShouldAutoEvaluate => true;
2021-04-30 21:34:50 +10:00
public override void SetInspectorOwner(ReflectionInspector inspector, MemberInfo member)
{
2021-04-30 21:34:50 +10:00
base.SetInspectorOwner(inspector, member);
}
2021-05-04 20:10:46 +10:00
protected override object TryEvaluate()
{
try
{
2021-05-04 20:10:46 +10:00
var ret = FieldInfo.GetValue(this.Owner.Target.TryCast(this.DeclaringType));
HadException = false;
LastException = null;
return ret;
}
catch (Exception ex)
{
HadException = true;
LastException = ex;
2021-05-04 20:10:46 +10:00
return null;
}
}
protected override void TrySetValue(object value)
{
try
{
2021-05-04 20:10:46 +10:00
FieldInfo.SetValue(FieldInfo.IsStatic ? null : Owner.Target.TryCast(this.DeclaringType), value);
}
catch (Exception ex)
{
ExplorerCore.LogWarning(ex);
}
}
}
}