Code Review: GenericMethodsAndOverloads


#1

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


#2

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.


#3

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