@@ -61,21 +61,21 @@ public static SyntaxSymbol GetResponseType(TypeDeclarationSyntax syntax, INamedT
61
61
{ Identifier : { Text : "IRequest" } , Arity : 1 } => gns . TypeArgumentList . Arguments [ 0 ] ,
62
62
_ => null
63
63
} ,
64
- SimpleNameSyntax and { Identifier : { Text : "IRequest" } } => ParseName ( "MediatR.Unit" ) ,
64
+ SimpleNameSyntax and { Identifier : { Text : "IRequest" } } => ParseName ( "MediatR.Unit" ) ,
65
65
SimpleNameSyntax and { Identifier : { Text : "IJsonRpcRequest" } } => ParseName ( "MediatR.Unit" ) ,
66
66
_ => null
67
67
} ;
68
68
if ( type != null ) break ;
69
69
}
70
70
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 ) ) ;
72
72
73
73
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 ] ) ;
76
76
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 ] ) ;
79
79
throw new ArgumentException ( $ "Response Type { symbol . ToDisplayString ( ) } is not a name symbol", nameof ( symbol ) ) ;
80
80
}
81
81
@@ -103,11 +103,12 @@ public static SyntaxSymbol GetResponseType(TypeDeclarationSyntax syntax, INamedT
103
103
{ Identifier : { Text : "IJsonRpcRequestHandler" } } => gns . TypeArgumentList . Arguments [ 0 ] ,
104
104
{ Identifier : { Text : "IJsonRpcNotificationHandler" } } => gns . TypeArgumentList . Arguments [ 0 ] ,
105
105
{ 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 ,
111
112
} ,
112
113
_ => null ,
113
114
} ;
@@ -116,6 +117,13 @@ public static SyntaxSymbol GetResponseType(TypeDeclarationSyntax syntax, INamedT
116
117
}
117
118
118
119
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
+ }
119
127
120
128
var handlerInterface = symbol . AllInterfaces
121
129
. FirstOrDefault ( z => z . Name == "IRequestHandler" && z . TypeArguments . Length == 2 ) ;
0 commit comments