public override MethodInfo[] __GetMethodImpls() { MethodInfo[] methods = method.__GetMethodImpls(); for (int i = 0; i < methods.Length; i++) { methods[i] = (MethodInfo)methods[i].BindTypeParameters(declaringType); } return(methods); }
public override MethodInfo[] __GetMethodImpls() { return(method.__GetMethodImpls()); }
IUnresolvedMethod ReadMethod(MethodInfo method, IUnresolvedTypeDefinition parentType, EntityType methodType, IUnresolvedMember accessorOwner) { if (method == null) return null; var m = new DefaultUnresolvedMethod(parentType, method.Name); m.EntityType = methodType; m.AccessorOwner = accessorOwner; m.HasBody = method.GetMethodBody () != null; var genericArguments = method.GetGenericArguments (); if (genericArguments != null) { for (int i = 0; i < genericArguments.Length; i++) { if (genericArguments[i].GenericParameterPosition != i) throw new InvalidOperationException("g.Position != i"); m.TypeParameters.Add(new DefaultUnresolvedTypeParameter( EntityType.Method, i, genericArguments[i].Name)); } for (int i = 0; i < genericArguments.Length; i++) { var tp = (DefaultUnresolvedTypeParameter)m.TypeParameters[i]; AddConstraints(tp, genericArguments[i]); tp.ApplyInterningProvider(interningProvider); } } m.ReturnType = ReadTypeReference(method.ReturnType, typeAttributes: method.ReturnParameter.CustomAttributes); if (HasAnyAttributes(method)) AddAttributes(method, m.Attributes, m.ReturnTypeAttributes); TranslateModifiers(method, m); foreach (var p in method.GetParameters ()) { m.Parameters.Add(ReadParameter(p)); } // mark as extension method if the attribute is set if (method.IsStatic && HasExtensionAttribute(method)) { m.IsExtensionMethod = true; } int lastDot = method.Name.LastIndexOf('.'); if (lastDot >= 0 /*&& method.HasOverrides*/) { // To be consistent with the parser-initialized type system, shorten the method name: m.Name = method.Name.Substring(lastDot + 1); m.IsExplicitInterfaceImplementation = true; foreach (var or in method.__GetMethodImpls ()) { m.ExplicitInterfaceImplementations.Add(new DefaultMemberReference( accessorOwner != null ? EntityType.Accessor : EntityType.Method, ReadTypeReference(or.DeclaringType), or.Name, or.GetGenericArguments ().Length, m.Parameters.Select(p => p.Type).ToList())); } } FinishReadMember(m, method); return m; }