/// <summary> /// Parameterize the specified method (reuse if generic /// parameterization isn't necessary). /// </summary> internal Method parameterize(Method m) { // if not generic, short circuit and reuse original if (!m.isGenericMethod()) { return(m); } // new signature Func func = m.m_func; Type ret; List pars = new List(Sys.ParamType, m.m_params.sz()); // parameterize return type if (func.returns().isGenericParameter()) { ret = parameterize(func.returns()); } else { ret = func.returns(); } // narrow pars (or just reuse if not parameterized) for (int i = 0; i < m.m_params.sz(); i++) { Param p = (Param)m.m_params.get(i); if (p.m_type.isGenericParameter()) { pars.add(new Param(p.m_name, parameterize(p.m_type), p.m_mask)); } else { pars.add(p); } } Method pm = new Method(this, m.m_name, m.m_flags, m.m_facets, m.m_lineNum, ret, m.m_inheritedReturns, pars, m); pm.m_reflect = m.m_reflect; return(pm); }
/// <summary> /// Parameterize the specified method (reuse if generic /// parameterization isn't necessary). /// </summary> internal Method parameterize(Method m) { // if not generic, short circuit and reuse original if (!m.isGenericMethod()) return m; // new signature Func func = m.m_func; Type ret; List pars = new List(Sys.ParamType, m.m_params.sz()); // parameterize return type if (func.returns().isGenericParameter()) ret = parameterize(func.returns()); else ret = func.returns(); // narrow pars (or just reuse if not parameterized) for (int i=0; i<m.m_params.sz(); i++) { Param p = (Param)m.m_params.get(i); if (p.m_type.isGenericParameter()) { pars.add(new Param(p.m_name, parameterize(p.m_type), p.m_mask)); } else { pars.add(p); } } Method pm = new Method(this, m.m_name, m.m_flags, m.m_facets, m.m_lineNum, ret, m.m_inheritedReturns, pars, m); pm.m_reflect = m.m_reflect; return pm; }