@@ -51,7 +51,28 @@ public abstract class {className} : {@interface.Name}
5151 var typeParametersStrings = method . TypeParameters . Select ( t => t . ToDisplayString ( ) ) ;
5252 var parametersStrings = method . Parameters . Select ( p => $@ "{ p . Type } { p . Name } ") ;
5353 var formattedAccessibility = ( method . ReturnType . DeclaredAccessibility != Accessibility . NotApplicable ? method . ReturnType . DeclaredAccessibility : Accessibility . Public ) . ToString ( ) . ToLower ( ) ;
54- var signature = $@ "{ formattedAccessibility } virtual { method . ReturnType } { method . Name } { ( method . IsGenericMethod ? $@ "<{ string . Join ( ", " , typeParametersStrings ) } >" : string . Empty ) } ({ string . Join ( ", " , parametersStrings ) } )";
54+ var formattedGenericTypeParameters = method . IsGenericMethod ? $@ "<{ string . Join ( ", " , typeParametersStrings ) } >" : string . Empty ;
55+ var formattedConstraintsStrings = method . TypeParameters . Select ( t => {
56+ var constraintsStrings = new List < string > ( ) ;
57+
58+ if ( t . HasReferenceTypeConstraint ) {
59+ constraintsStrings . Add ( "class" ) ;
60+ }
61+
62+ if ( t . HasNotNullConstraint ) {
63+ constraintsStrings . Add ( "notnull" ) ;
64+ }
65+ constraintsStrings = constraintsStrings . Concat ( t . ConstraintTypes . ToList ( ) . Select ( ct => ct . ToDisplayString ( ) ) ) . ToList ( ) ;
66+
67+ if ( t . HasConstructorConstraint ) {
68+ constraintsStrings . Add ( "new()" ) ;
69+ }
70+
71+ return constraintsStrings . Any ( ) ? $@ "where { t . ToDisplayString ( ) } : { string . Join ( ", " , constraintsStrings ) } " : string . Empty ;
72+ } )
73+ . Where ( cs => cs != string . Empty ) ;
74+ var formattedConstraints = string . Join ( " " , formattedConstraintsStrings ) ;
75+ var signature = $@ "{ formattedAccessibility } virtual { method . ReturnType } { method . Name } { formattedGenericTypeParameters } ({ string . Join ( ", " , parametersStrings ) } ){ ( formattedConstraints != string . Empty ? $@ " { formattedConstraints } " : string . Empty ) } ";
5576 var callParameters = $@ "{ string . Join ( ", " , method . Parameters . Select ( p => p . Name ) ) } ";
5677
5778 var call = $@ "{ targetFieldName } .{ method . Name } { ( method . IsGenericMethod ? $@ "<{ string . Join ( ", " , typeParametersStrings ) } >" : string . Empty ) } ({ callParameters } )";
0 commit comments