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"); } } } } }