Code Review: GenericMethodsAndOverloads

tfpt review “/shelveset:GenericMethodsAndOverloads;REDMOND\tomat”

Implements generic methods parameters binding and explicit overload 

selection. Adds methods Method/UnboundMethod#of and
Method/UnboundMethod#overloads. Method#of takes a list of Ruby classes
or CLR types and returns a Method instance that has bound generic
parameters to these classes/types. Method#overloads takes a list of Ruby
classes or CLR types and returns a Method instance that includes only
those CLR methods grouped in the Method object whose parameters are of
the given types.

Tomas

Changes look good overall.

In RubyMethodGroupInfo.TryBindGenericParameters, an empty set of types
will return all methods in MethodBases whether or not they’re generic.
What’s the reason for this behavior?

There’s a chunk of code that was added to Utils.cs that’s indented too
far.

TryBindGenericParameters should look like:

        foreach (var method in MethodBases) {
            if (method.IsGenericMethodDefinition) {
                if (typeArguments.Length == 

method.GetGenericArguments().Length) {
Debug.Assert(!(method is ConstructorInfo));
boundMethods.Add(((MethodInfo)method).MakeGenericMethod(typeArguments));
}
} else if (typeArguments.Length == 0) {
boundMethods.Add(method);
}
}

Will include this fix in Indexers2 shelveset.

Tomas