@@ -75,20 +75,18 @@ private TypeDocumentation ParseTypeNode(XmlNode node, string name)
7575
7676 private PropertyDocumentation ParsePropertyNode ( XmlNode node , string name )
7777 => ParseMemberNode ( name ,
78- ( type , memberName ) => type . GetProperty ( memberName ) ,
78+ ( type , memberName , paramaters ) => type . GetProperty ( memberName ) ,
7979 member => new PropertyDocumentation ( _source , member , node ) ) ;
8080
8181 private FieldDocumentation ParseFieldNode ( XmlNode node , string name )
8282 => ParseMemberNode ( name ,
83- ( type , memberName ) => type . GetField ( memberName ) ,
83+ ( type , memberName , parameters ) => type . GetField ( memberName ) ,
8484 member => new FieldDocumentation ( _source , member , node ) ) ;
8585
8686 private MethodDocumentation ? ParseMethodNode ( XmlNode node , string name )
8787 => ParseMemberNode ( name ,
88- ( type , memberName ) =>
88+ ( type , memberName , parameters ) =>
8989 {
90- var parameters = GetMethodParameters ( memberName ) ;
91-
9290 return type . GetMethods ( )
9391 . Where ( method => method . Name == memberName )
9492 . Where ( method =>
@@ -114,13 +112,14 @@ private FieldDocumentation ParseFieldNode(XmlNode node, string name)
114112 } ,
115113 member => new MethodDocumentation ( _source , member , node ) ) ;
116114
117- private TDocumentation ParseMemberNode < TMember , TDocumentation > ( string name , Func < Type , string , TMember ? > getMember , Func < TMember , TDocumentation > getDocumentation )
115+ private TDocumentation ParseMemberNode < TMember , TDocumentation > ( string name , Func < Type , string , IReadOnlyCollection < string > , TMember ? > getMember , Func < TMember , TDocumentation > getDocumentation )
118116 where TMember : MemberInfo
119117 where TDocumentation : MemberDocumentation < TMember >
120118 {
121119 var ( type , memberName ) = ResolveTypeAndMemberName ( name ) ;
120+ var parameters = ResolveMethodParameters ( name ) ;
122121
123- var memberInfo = getMember . Invoke ( type , memberName )
122+ var memberInfo = getMember . Invoke ( type , memberName , parameters )
124123 ?? throw new InvalidOperationException (
125124 $ "Member '{ memberName } ' not found in type '{ type . Name } '.") ;
126125
@@ -133,6 +132,39 @@ private TDocumentation ParseMemberNode<TMember, TDocumentation>(string name, Fun
133132 return memberDocumentation ;
134133 }
135134
135+ private static IReadOnlyCollection < string > ResolveMethodParameters ( string name )
136+ {
137+ var startIndex = name . IndexOf ( '(' ) ;
138+
139+ if ( startIndex == - 1 )
140+ {
141+ return Array . Empty < string > ( ) ;
142+ }
143+
144+ var endIndex = name . LastIndexOf ( ')' ) ;
145+
146+ if ( endIndex <= startIndex )
147+ {
148+ return Array . Empty < string > ( ) ;
149+ }
150+
151+ var parametersString = name . Substring ( startIndex + 1 , endIndex - startIndex - 1 ) ;
152+
153+ if ( string . IsNullOrWhiteSpace ( parametersString ) )
154+ {
155+ return Array . Empty < string > ( ) ;
156+ }
157+
158+ var result = parametersString
159+ . Split ( ',' , StringSplitOptions . RemoveEmptyEntries )
160+ . Select ( p => p . Trim ( ) )
161+ . Select ( p => p . Replace ( "`0" , "" ) )
162+ . Select ( p => p . Replace ( "`" , "" ) )
163+ . ToList ( ) ;
164+
165+ return result ;
166+ }
167+
136168 /// <summary>
137169 /// Get the friendly name of a type
138170 /// </summary>
@@ -166,35 +198,6 @@ private static string GetTypeFriendlyName(Type type)
166198 return friendlyName ;
167199 }
168200
169- // Fetches the parameter type names of a method from the XML documentation.
170- private static List < string > GetMethodParameters ( string xmlMember )
171- {
172- var start = xmlMember . IndexOf ( '(' ) ;
173- var end = xmlMember . LastIndexOf ( ')' ) ;
174-
175- if ( start == - 1 || end == - 1 || end <= start )
176- {
177- return [ ] ;
178- }
179-
180- // Extract the substring that contains the parameters.
181- var paramList = xmlMember . Substring ( start + 1 , end - start - 1 ) ;
182-
183- if ( string . IsNullOrWhiteSpace ( paramList ) )
184- {
185- return [ ] ;
186- }
187-
188- // Split the parameter list by commas and trim each parameter.
189- var methodParameters = paramList . Split ( [ ',' ] , StringSplitOptions . RemoveEmptyEntries )
190- . Select ( p => p . Trim ( ) )
191- . Select ( p => p . Replace ( "`0" , "" ) )
192- . Select ( p => p . Replace ( "`" , "" ) )
193- . ToList ( ) ;
194-
195- return methodParameters ;
196- }
197-
198201 private ( Type type , string memberName ) ResolveTypeAndMemberName ( string name )
199202 {
200203 if ( name . Contains ( '`' ) )
0 commit comments