//----------------------------------------------------------------------- // // Copyright (c) 2018 Sirenix IVS // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // //----------------------------------------------------------------------- namespace VRC.Udon.Serialization.OdinSerializer.Utilities { using System; using System.Reflection; /// /// FieldInfo method extensions. /// public static class FieldInfoExtensions { /// /// Determines whether the specified field is an alias. /// /// The field to check. /// /// true if the specified field is an alias; otherwise, false. /// public static bool IsAliasField(this FieldInfo fieldInfo) { return fieldInfo is MemberAliasFieldInfo; } /// /// Returns the original, backing field of an alias field if the field is an alias. /// /// The field to check. /// /// if set to true an exception will be thrown if the field is not aliased. /// /// The field was not aliased; this only occurs if throwOnNotAliased is true. public static FieldInfo DeAliasField(this FieldInfo fieldInfo, bool throwOnNotAliased = false) { MemberAliasFieldInfo aliasFieldInfo = fieldInfo as MemberAliasFieldInfo; if (aliasFieldInfo != null) { while (aliasFieldInfo.AliasedField is MemberAliasFieldInfo) { aliasFieldInfo = aliasFieldInfo.AliasedField as MemberAliasFieldInfo; } return aliasFieldInfo.AliasedField; } if (throwOnNotAliased) { throw new ArgumentException("The field " + fieldInfo.GetNiceName() + " was not aliased."); } return fieldInfo; } } }