using System;
using System.Reflection;
using UnityEngine;
using UnityEngine.Scripting.APIUpdating;
namespace Unity.VisualScripting
{
static class MovedFromAttributeExtensions
{
static Type s_DataType;
static FieldInfo s_DataFieldInfo;
static FieldInfo s_AutoUpdateAPIFieldInfo;
static FieldInfo s_NamespaceFieldInfo;
static FieldInfo s_AssemblyFieldInfo;
static FieldInfo s_ClassNameFieldInfo;
public static void GetData(
this MovedFromAttribute @this,
out bool autoUpdateAPI,
out string sourceNamespace,
out string sourceAssembly,
out string sourceClassName)
{
Initialize();
autoUpdateAPI = false;
sourceNamespace = string.Empty;
sourceAssembly = string.Empty;
sourceClassName = string.Empty;
if (s_DataFieldInfo != null &&
s_AutoUpdateAPIFieldInfo != null &&
s_NamespaceFieldInfo != null &&
s_AssemblyFieldInfo != null &&
s_ClassNameFieldInfo != null)
{
var data = s_DataFieldInfo.GetValue(@this);
autoUpdateAPI = (bool)s_AutoUpdateAPIFieldInfo.GetValue(data);
sourceNamespace = (string)s_NamespaceFieldInfo.GetValue(data);
sourceAssembly = (string)s_AssemblyFieldInfo.GetValue(data);
sourceClassName = (string)s_ClassNameFieldInfo.GetValue(data);
}
}
static void Initialize()
{
if (s_DataType == null)
{
s_DataType = typeof(MovedFromAttribute).Assembly.GetType("UnityEngine.Scripting.APIUpdating.MovedFromAttributeData");
s_DataFieldInfo = typeof(MovedFromAttribute).GetField("data", BindingFlags.Instance | BindingFlags.NonPublic);
if (s_DataType != null)
{
s_AutoUpdateAPIFieldInfo = s_DataType.GetField("autoUdpateAPI");
s_NamespaceFieldInfo = s_DataType.GetField("nameSpace");
s_AssemblyFieldInfo = s_DataType.GetField("assembly");
s_ClassNameFieldInfo = s_DataType.GetField("className");
}
}
}
}
}