@@ -43,17 +43,19 @@ public IEnumerable<MethodDeclarationSyntax> Create(TypeDeclarationSyntax targetD
4343 }
4444
4545 var name = _nameService . ConvertToName ( currentParameter . Identifier . Text ) ;
46- yield return _syntaxNodeFactory . CreateExtensionMethod ( targetType , $ "With{ name } ")
46+ yield return _syntaxNodeFactory . CreateExtensionMethod ( targetType , $ "With{ name } " + targetDeclaration . TypeParameterList )
4747 . AddParameterListParameters ( thisParameter , newArgumentParameter )
48+ . WithConstraintClauses ( targetDeclaration . ConstraintClauses )
4849 . AddBodyStatements ( _syntaxNodeFactory . CreateGuards ( thisParameter ) . ToArray ( ) )
4950 . AddBodyStatements ( _syntaxNodeFactory . CreateGuards ( newArgumentParameter ) . ToArray ( ) )
5051 . AddBodyStatements ( _syntaxNodeFactory . CreateReturnStatement ( targetType , arguments ) ) ;
5152
5253 if ( argumentParameter != newArgumentParameter && argumentParameter . Type is not ArrayTypeSyntax )
5354 {
5455 var args = curParameters . Select ( parameter => parameter == currentParameter ? SyntaxFactory . Argument ( SyntaxFactory . IdentifierName ( currentParameter . Identifier ) ) : _syntaxNodeFactory . CreateTransientArgument ( targetDeclaration , thisParameter , parameter ) ) ;
55- yield return _syntaxNodeFactory . CreateExtensionMethod ( targetType , $ "With{ name } ")
56+ yield return _syntaxNodeFactory . CreateExtensionMethod ( targetType , $ "With{ name } " + targetDeclaration . TypeParameterList )
5657 . AddParameterListParameters ( thisParameter , argumentParameter )
58+ . WithConstraintClauses ( targetDeclaration . ConstraintClauses )
5759 . AddBodyStatements ( _syntaxNodeFactory . CreateGuards ( thisParameter ) . ToArray ( ) )
5860 . AddBodyStatements ( _syntaxNodeFactory . CreateGuards ( argumentParameter ) . ToArray ( ) )
5961 . AddBodyStatements ( _syntaxNodeFactory . CreateReturnStatement ( targetType , args ) ) ;
@@ -62,8 +64,9 @@ public IEnumerable<MethodDeclarationSyntax> Create(TypeDeclarationSyntax targetD
6264 if ( currentParameter . Default != default && argumentParameter == newArgumentParameter )
6365 {
6466 var args = curParameters . Select ( parameter => parameter == currentParameter ? SyntaxFactory . Argument ( currentParameter . Default . Value ) : _syntaxNodeFactory . CreateTransientArgument ( targetDeclaration , thisParameter , parameter ) ) ;
65- yield return _syntaxNodeFactory . CreateExtensionMethod ( targetType , $ "WithDefault{ name } ")
67+ yield return _syntaxNodeFactory . CreateExtensionMethod ( targetType , $ "WithDefault{ name } " + targetDeclaration . TypeParameterList )
6668 . AddParameterListParameters ( thisParameter )
69+ . WithConstraintClauses ( targetDeclaration . ConstraintClauses )
6770 . AddBodyStatements ( _syntaxNodeFactory . CreateGuards ( thisParameter ) . ToArray ( ) )
6871 . AddBodyStatements ( _syntaxNodeFactory . CreateReturnStatement ( targetType , args ) ) ;
6972 }
0 commit comments