@@ -84,8 +84,7 @@ public static List<HandlerInfo> GetHandlers(GeneratorSyntaxContext context)
8484
8585 bool treatAsHandlerClass = nameMatches || implementsMarker || hasClassHandlerAttribute ;
8686
87- var handlerMethods = classSymbol . GetMembers ( )
88- . OfType < IMethodSymbol > ( )
87+ var handlerMethods = GetMethods ( classSymbol )
8988 . Where ( m => IsHandlerMethod ( m , context . SemanticModel . Compilation , treatAsHandlerClass ) )
9089 . ToList ( ) ;
9190
@@ -174,6 +173,32 @@ private static bool IsHandlerMethod(IMethodSymbol method, Compilation compilatio
174173 return true ;
175174 }
176175
176+ private static IEnumerable < IMethodSymbol > GetMethods ( INamedTypeSymbol targetSymbol , bool includeBaseMethods = true )
177+ {
178+ var methods = new Dictionary < string , IMethodSymbol > ( ) ;
179+
180+ var currentSymbol = targetSymbol ;
181+
182+ while ( currentSymbol != null )
183+ {
184+ var methodSymbols = currentSymbol
185+ . GetMembers ( )
186+ . Where ( m => m . Kind == SymbolKind . Method )
187+ . OfType < IMethodSymbol > ( )
188+ . Where ( p => ! methods . ContainsKey ( p . Name ) ) ;
189+
190+ foreach ( var methodSymbol in methodSymbols )
191+ methods . Add ( methodSymbol . Name , methodSymbol ) ;
192+
193+ if ( ! includeBaseMethods )
194+ break ;
195+
196+ currentSymbol = currentSymbol . BaseType ;
197+ }
198+
199+ return methods . Values ;
200+ }
201+
177202 private static readonly string [ ] ValidHandlerMethodNames = [
178203 "Handle" , "HandleAsync" ,
179204 "Handles" , "HandlesAsync" ,
0 commit comments