string[] CreateTypeParameters (TypeParameters parentAllTypeParameters) { string[] names; int parent_offset = 0; if (parentAllTypeParameters != null) { if (CurrentTypeParameters == null) { all_type_parameters = parentAllTypeParameters; return parentAllTypeParameters.GetAllNames (); } names = new string[parentAllTypeParameters.Count + CurrentTypeParameters.Count]; all_type_parameters = new TypeParameters (names.Length); all_type_parameters.Add (parentAllTypeParameters); parent_offset = all_type_parameters.Count; for (int i = 0; i < parent_offset; ++i) names[i] = all_type_parameters[i].MemberName.Name; } else { names = new string[CurrentTypeParameters.Count]; } for (int i = 0; i < CurrentTypeParameters.Count; ++i) { if (all_type_parameters != null) all_type_parameters.Add (MemberName.TypeParameters[i]); var name = CurrentTypeParameters[i].MemberName.Name; names[parent_offset + i] = name; for (int ii = 0; ii < parent_offset + i; ++ii) { if (names[ii] != name) continue; var tp = CurrentTypeParameters[i]; var conflict = all_type_parameters[ii]; tp.WarningParentNameConflict (conflict); } } if (all_type_parameters == null) all_type_parameters = CurrentTypeParameters; return names; }