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());
        }