@@ -77,19 +77,26 @@ void CheckPrePostfixes(MemberInfo member)
7777 _nameToMember . TryAdd ( memberName , member ) ;
7878 }
7979 }
80- IEnumerable < MemberInfo > GetNoArgExtensionMethods ( IEnumerable < MethodInfo > sourceExtensionMethodSearch ) =>
81- (
82- from method in sourceExtensionMethodSearch
83- where ! method . ContainsGenericParameters && method . FirstParameterType ( ) . IsAssignableFrom ( Type )
84- select ( MemberInfo ) method
85- ) . Concat (
86- from method in sourceExtensionMethodSearch
87- let firstParameterType = method . FirstParameterType ( )
88- where firstParameterType . IsInterface && firstParameterType . ContainsGenericParameters
89- let genericInterface = Type . GetGenericInterface ( firstParameterType . GetGenericTypeDefinition ( ) )
90- where genericInterface != null
91- select new GenericMethod ( method , genericInterface )
92- ) ;
80+ IEnumerable < MemberInfo > GetNoArgExtensionMethods ( IEnumerable < MethodInfo > sourceExtensionMethodSearch )
81+ {
82+ var extensionMethods =
83+ from method in sourceExtensionMethodSearch
84+ where ! method . ContainsGenericParameters && method . FirstParameterType ( ) . IsAssignableFrom ( Type )
85+ select ( MemberInfo ) method ;
86+ var genericInterfaces = Type . GetInterfaces ( ) . Where ( t => t . IsGenericType ) ;
87+ if ( Type . IsInterface && Type . IsGenericType )
88+ {
89+ genericInterfaces = genericInterfaces . Prepend ( Type ) ;
90+ }
91+ var definitions = genericInterfaces . GroupBy ( t => t . GetGenericTypeDefinition ( ) ) . ToDictionary ( g => g . Key , g => g . First ( ) ) ;
92+ return extensionMethods . Concat (
93+ from method in sourceExtensionMethodSearch
94+ let firstParameterType = method . FirstParameterType ( )
95+ where firstParameterType . IsInterface && firstParameterType . ContainsGenericParameters
96+ let genericInterface = definitions . GetValueOrDefault ( firstParameterType . GetGenericTypeDefinition ( ) )
97+ where genericInterface != null
98+ select new GenericMethod ( method , genericInterface ) ) ;
99+ }
93100 }
94101 class GenericMethod : MemberInfo
95102 {
0 commit comments