private static GenericInstanceType ResolveIfNeeded(IGenericInstance genericInstanceMethod, IGenericInstance genericInstanceType, GenericInstanceType genericInstanceType1)
{
if (!ContainsGenericParameters (genericInstanceType1))
return genericInstanceType1;
var newGenericInstance = new GenericInstanceType (genericInstanceType1.ElementType);
foreach (var genericArgument in genericInstanceType1.GenericArguments) {
if (!genericArgument.IsGenericParameter) {
newGenericInstance.GenericArguments.Add (ResolveIfNeeded (genericInstanceMethod, genericInstanceType, genericArgument));
continue;
}
var genParam = (GenericParameter)genericArgument;
switch (genParam.Type) {
case GenericParameterType.Type: {
if (genericInstanceType == null)
throw new NotSupportedException ();
newGenericInstance.GenericArguments.Add (genericInstanceType.GenericArguments[genParam.Position]);
}
break;
case GenericParameterType.Method: {
if (genericInstanceMethod == null)
newGenericInstance.GenericArguments.Add (genParam);
else
newGenericInstance.GenericArguments.Add (genericInstanceMethod.GenericArguments[genParam.Position]);
}
break;
}
}
return newGenericInstance;
}