private string HandleNestedGenericTypes(TypeReference parameterType) { V_0 = new StringBuilder(); stackVariable2 = parameterType.get_DeclaringType(); V_1 = parameterType as GenericInstanceType; V_2 = new GenericInstanceType(stackVariable2); V_3 = new Collection <TypeReference>(V_1.get_GenericArguments()); V_4 = new Collection <TypeReference>(V_2.get_GenericArguments()); V_5 = stackVariable2.get_GenericParameters().get_Count(); V_6 = 0; while (V_6 < V_5) { V_2.AddGenericArgument(V_1.get_GenericArguments().get_Item(V_6)); V_2.get_GenericArguments().Add(V_1.get_GenericArguments().get_Item(V_6)); V_6 = V_6 + 1; } dummyVar0 = V_0.Append(this.GetParameterTypeRepresentation(V_2)); dummyVar1 = V_0.Append('.'); if (V_1.get_GenericArguments().get_Count() - V_5 <= 0) { V_7 = GenericHelper.GetNonGenericName(parameterType.get_Name()); dummyVar3 = V_0.Append(V_7); } else { dummyVar2 = V_0.Append(this.AppendGenericArguments(V_1, V_5)); } V_1.get_GenericArguments().Clear(); V_1.get_GenericArguments().AddRange(V_3); V_2.get_GenericArguments().Clear(); V_2.get_GenericArguments().AddRange(V_4); return(V_0.ToString()); }
private string HandleNestedGenericTypes(TypeReference parameterType) { /// Transfer the parameters from reference up to the declaring type. /// Bare in mind, that the declaring type might have less generic parameters. /// Transfer just the first X that match. /// This is needed, because VB and C# don't allow other language syntax StringBuilder result = new StringBuilder(); TypeReference declaringType = parameterType.DeclaringType; GenericInstanceType referenceGeneric = parameterType as GenericInstanceType; GenericInstanceType declaringTypeInstance = new GenericInstanceType(declaringType); Collection <TypeReference> nestedTypeBackup = new Collection <TypeReference>(referenceGeneric.GenericArguments); Collection <TypeReference> declaringBackup = new Collection <TypeReference>(declaringTypeInstance.GenericArguments); int parametersToMoveUp = declaringType.GenericParameters.Count; for (int i = 0; i < parametersToMoveUp; i++) { declaringTypeInstance.AddGenericArgument(referenceGeneric.GenericArguments[i]); declaringTypeInstance.GenericArguments.Add(referenceGeneric.GenericArguments[i]); } result.Append(GetParameterTypeRepresentation(declaringTypeInstance)); result.Append('.'); if (referenceGeneric.GenericArguments.Count - parametersToMoveUp > 0) { result.Append(AppendGenericArguments(referenceGeneric, parametersToMoveUp)); } else { string ptName = GenericHelper.GetNonGenericName(parameterType.Name); result.Append(ptName); } referenceGeneric.GenericArguments.Clear(); referenceGeneric.GenericArguments.AddRange(nestedTypeBackup); declaringTypeInstance.GenericArguments.Clear(); declaringTypeInstance.GenericArguments.AddRange(declaringBackup); return(result.ToString()); }