private static void FixupComplexType(HashSet <NdrComplexTypeReference> fixup_set, NdrComplexTypeReference complex_type, UserDefinedTypeInformation udt)
        {
            if (!fixup_set.Add(complex_type))
            {
                return;
            }

            // Fixup the name to remove compiler generated characters.
            complex_type.Name = CodeGenUtils.MakeIdentifier(udt.Name);
            if (udt.Union)
            {
                if (complex_type is NdrUnionTypeReference union)
                {
                    FixupUnionType(fixup_set, union, udt);
                }
            }
            else
            {
                if (complex_type is NdrBaseStructureTypeReference str)
                {
                    FixupStructureType(fixup_set, str, udt);
                }
            }
        }
        private static void FixupUnionType(HashSet <NdrComplexTypeReference> fixup_set, NdrUnionTypeReference union_type, UserDefinedTypeInformation udt)
        {
            var members = union_type.Arms.Arms.ToList();

            if (members.Count != udt.Members.Count)
            {
                return;
            }
            for (int i = 0; i < members.Count; ++i)
            {
                members[i].Name = udt.Members[i].Name;
                var member_udt     = GetUDTType(udt.Members[i].Type);
                var member_complex = GetComplexType(members[i].ArmType);
                if (member_udt != null && member_complex != null)
                {
                    FixupComplexType(fixup_set, member_complex, member_udt);
                }
            }
        }