// It's pretty common for a component to have members that are the same type as other components, so collapse duplicate fieldinfo
        // so we refer to only a single name and field type that needs to be emitted
        void ReduceFieldInfos()
        {
            var fieldTypes = m_FieldTypes.ToList();
            var fieldNames = m_FieldNames.ToList();
            var trComparer = new TypeReferenceEqualityComparer();

            for (int i = 0; i < m_FieldGenInfos.Count; ++i)
            {
                var fieldInfo = m_FieldGenInfos[i];

                fieldInfo.FieldNameIndex = fieldNames.IndexOf(fieldInfo.FieldName);
                fieldInfo.FieldTypeIndex = fieldTypes.FindIndex(ft => trComparer.Equals(ft, fieldInfo.FieldType));

                m_FieldGenInfos[i] = fieldInfo;
            }
        }