public static MethodDefinition FindMethodDefinitionInGroup(IEmitter emitter, IEnumerable <ParameterDeclaration> parameters, IEnumerable <TypeParameterDeclaration> typeParameters, IEnumerable <MethodDefinition> group, AstType returnType, TypeDefinition typeDef) { var args = new List <ParameterDeclaration>(parameters); var typeParametersCount = typeParameters != null?typeParameters.Count() : 0; foreach (var method in group) { if (args.Count == method.Parameters.Count && method.GenericParameters.Count == typeParametersCount) { bool match = true; if (typeDef != null && method.DeclaringType != typeDef) { match = false; continue; } if (returnType != null) { if (!(returnType.IsNull && method.ReturnType.MetadataType == MetadataType.Void)) { var resolveResult = emitter.Resolver.ResolveNode(returnType, emitter); if (!Helpers.TypeIsMatch(emitter, resolveResult, returnType, method.ReturnType)) { match = false; continue; } } } for (int i = 0; i < method.Parameters.Count; i++) { var type = args[i].Type; var resolveResult = emitter.Resolver.ResolveNode(type, emitter); var typeRef = method.Parameters[i].ParameterType; if (!Helpers.TypeIsMatch(emitter, resolveResult, type, typeRef)) { match = false; break; } } if (match) { return(method); } } } return(null); }
public static MethodDefinition FindMethodDefinitionInGroup(IEmitter emitter, IList <IParameter> parameters, IList <IType> typeParameters, List <MethodDefinition> group, IType returnType, TypeDefinition typeDef, IMember member) { var typeParametersCount = typeParameters != null?typeParameters.Count() : 0; foreach (var method in group) { if (parameters.Count == method.Parameters.Count && method.GenericParameters.Count == typeParametersCount) { bool match = method.Parameters.Count == 0; if (typeDef != null && method.DeclaringType != typeDef) { match = false; continue; } if (returnType != null) { if (!Helpers.TypeIsMatch(emitter, returnType, method.ReturnType, member, -1)) { match = false; continue; } } for (int i = 0; i < method.Parameters.Count; i++) { var type = parameters[i].Type; var typeRef = method.Parameters[i].ParameterType; if (Helpers.TypeIsMatch(emitter, type, typeRef, member, i)) { match = true; break; } } if (match) { return(method); } } } return(null); }