public static TypeNode NewEqualTypeParameter(Duplicator dup, ITypeParameter itp, TypeNode declaringType, int index) { ClassParameter cp = itp as ClassParameter; if (cp != null) { ClassParameter mcp = new ClassParameter(); mcp.Interfaces = dup.VisitInterfaceReferenceList(cp.Interfaces); mcp.BaseClass = cp.BaseClass; mcp.TypeParameterFlags = cp.TypeParameterFlags & ~TypeParameterFlags.VarianceMask; mcp.DeclaringType = declaringType; mcp.DeclaringModule = declaringType.DeclaringModule; mcp.Name = cp.Name; mcp.ParameterListIndex = index; mcp.DeclaringMember = declaringType; return mcp; } TypeParameter tp = itp as TypeParameter; if (tp != null) { TypeParameter mp = new TypeParameter(); mp.Interfaces = dup.VisitInterfaceReferenceList(tp.Interfaces); mp.TypeParameterFlags = tp.TypeParameterFlags & ~TypeParameterFlags.VarianceMask; mp.DeclaringType = declaringType; mp.DeclaringModule = declaringType.DeclaringModule; mp.Name = tp.Name; mp.ParameterListIndex = index; mp.DeclaringMember = declaringType; return mp; } throw new NotImplementedException("unexpected type parameter kind"); }