protected ParameterDeclaration MapParamType(ParameterDeclaration parameter) { if (parameter.Type.NodeType == NodeType.GenericTypeReference) { var gen = (GenericTypeReference)parameter.Type; var genEntityType = gen.Entity as IConstructedTypeInfo; if (genEntityType == null) { return(parameter); } var trc = new TypeReferenceCollection(); foreach (var genArg in gen.GenericArguments) { var replacement = genArg; foreach (var genParam in _genericParams) { if (genParam.Name.Equals(genArg.Entity.Name)) { replacement = new SimpleTypeReference(genParam.Name) { Entity = genParam.Entity }; break; } } trc.Add(replacement); } parameter = parameter.CloneNode(); gen = (GenericTypeReference)parameter.Type; gen.GenericArguments = trc; gen.Entity = new GenericConstructedType(genEntityType.GenericDefinition, trc.Select(a => a.Entity).Cast <IType>().ToArray()); } return(parameter); }