// ForEachElement calls f for type T and each type reachable from its // type through reflection. It does this by recursively stripping off // type constructors; in addition, for each named type N, the type *N // is added to the result as it may have additional methods. // // The caller must provide an initially empty set used to de-duplicate // identical types, potentially across multiple calls to ForEachElement. // (Its final value holds all the elements seen, matching the arguments // passed to f.) // // TODO(adonovan): share/harmonize with go/callgraph/rta. func ForEachElement(rtypes *typeutil.Map, msets *typeutil.MethodSetCache, T types.Type, f func(types.Type)) { … }