@@ -61,21 +61,21 @@ public static SyntaxSymbol GetResponseType(TypeDeclarationSyntax syntax, INamedT
6161 { Identifier : { Text : "IRequest" } , Arity : 1 } => gns . TypeArgumentList . Arguments [ 0 ] ,
6262 _ => null
6363 } ,
64- SimpleNameSyntax and { Identifier : { Text : "IRequest" } } => ParseName ( "MediatR.Unit" ) ,
64+ SimpleNameSyntax and { Identifier : { Text : "IRequest" } } => ParseName ( "MediatR.Unit" ) ,
6565 SimpleNameSyntax and { Identifier : { Text : "IJsonRpcRequest" } } => ParseName ( "MediatR.Unit" ) ,
6666 _ => null
6767 } ;
6868 if ( type != null ) break ;
6969 }
7070
71- if ( type == null ) throw new ArgumentException ( $ "Response Type { symbol . ToDisplayString ( ) } is not a name symbol ", nameof ( symbol ) ) ;
71+ if ( type == null ) throw new ArgumentException ( $ "Response Syntax { syntax . ToString ( ) } is not a name syntax ", nameof ( syntax ) ) ;
7272
7373 var handlerInterface = symbol . AllInterfaces . FirstOrDefault ( z => z . Name == "IRequestHandler" && z . TypeArguments . Length == 2 ) ;
74- if ( handlerInterface ? . TypeArguments [ 1 ] is INamedTypeSymbol ns )
75- return new SyntaxSymbol ( type , ns ) ;
74+ if ( handlerInterface ? . TypeArguments [ 1 ] is INamedTypeSymbol || handlerInterface ? . TypeArguments [ 1 ] is ITypeParameterSymbol )
75+ return new SyntaxSymbol ( type , handlerInterface . TypeArguments [ 1 ] ) ;
7676 handlerInterface = symbol . AllInterfaces . FirstOrDefault ( z => z . Name == "IRequest" && z . Arity == 1 ) ;
77- if ( handlerInterface ? . TypeArguments [ 0 ] is INamedTypeSymbol ns2 )
78- return new SyntaxSymbol ( type , ns2 ) ;
77+ if ( handlerInterface ? . TypeArguments [ 0 ] is INamedTypeSymbol || handlerInterface ? . TypeArguments [ 0 ] is ITypeParameterSymbol )
78+ return new SyntaxSymbol ( type , handlerInterface . TypeArguments [ 0 ] ) ;
7979 throw new ArgumentException ( $ "Response Type { symbol . ToDisplayString ( ) } is not a name symbol", nameof ( symbol ) ) ;
8080 }
8181
@@ -103,11 +103,12 @@ public static SyntaxSymbol GetResponseType(TypeDeclarationSyntax syntax, INamedT
103103 { Identifier : { Text : "IJsonRpcRequestHandler" } } => gns . TypeArgumentList . Arguments [ 0 ] ,
104104 { Identifier : { Text : "IJsonRpcNotificationHandler" } } => gns . TypeArgumentList . Arguments [ 0 ] ,
105105 { Identifier : { Text : "ICanBeResolvedHandler" } , Arity : 1 } => gns . TypeArgumentList . Arguments [ 0 ] ,
106- { Identifier : { Text : "IRequest" } } => ParseTypeName ( syntax . Identifier . Text ) ,
107- { Identifier : { Text : "IJsonRpcRequest" } } => ParseTypeName ( syntax . Identifier . Text ) ,
108- { Identifier : { Text : "IPartialItemRequest" } , Arity : 2 } => ParseTypeName ( syntax . Identifier . Text ) ,
109- { Identifier : { Text : "IPartialItemsRequest" } , Arity : 2 } => ParseTypeName ( syntax . Identifier . Text ) ,
110- _ => null ,
106+ { Identifier : { Text : "IRequest" } , Arity : 1 } => IdentifierName ( syntax . Identifier . Text ) ,
107+ { Identifier : { Text : "IRequest" } , Arity : 0 } => IdentifierName ( syntax . Identifier . Text ) ,
108+ { Identifier : { Text : "IJsonRpcRequest" } } => IdentifierName ( syntax . Identifier . Text ) ,
109+ { Identifier : { Text : "IPartialItemRequest" } , Arity : 2 } => IdentifierName ( syntax . Identifier . Text ) ,
110+ { Identifier : { Text : "IPartialItemsRequest" } , Arity : 2 } => IdentifierName ( syntax . Identifier . Text ) ,
111+ _ => null ,
111112 } ,
112113 _ => null ,
113114 } ;
@@ -116,6 +117,13 @@ public static SyntaxSymbol GetResponseType(TypeDeclarationSyntax syntax, INamedT
116117 }
117118
118119 if ( type == null ) return null ;
120+ if ( type is IdentifierNameSyntax ins && ins . Identifier . Text == syntax . Identifier . Text && syntax . TypeParameterList is { Parameters : { Count : > 0 } } )
121+ {
122+ type = GenericName ( syntax . Identifier . Text )
123+ . WithTypeArgumentList (
124+ TypeArgumentList ( SeparatedList < TypeSyntax > ( syntax . TypeParameterList ? . Parameters . Select ( z => IdentifierName ( z . Identifier . Text ) ) ) )
125+ ) ;
126+ }
119127
120128 var handlerInterface = symbol . AllInterfaces
121129 . FirstOrDefault ( z => z . Name == "IRequestHandler" && z . TypeArguments . Length == 2 ) ;
0 commit comments