77using System . Collections . Generic ;
88using System . Collections . Generic . Enumerable ;
99using System . Diagnostics . Internal ;
10- using System . IO ;
1110using System . Linq ;
1211using System . Reflection ;
1312using System . Runtime . CompilerServices ;
@@ -25,7 +24,7 @@ private static List<EnhancedStackFrame> GetFrames(Exception exception)
2524 {
2625 if ( exception == null ) return new List < EnhancedStackFrame > ( ) ;
2726
28- var needFileInfo = true ;
27+ const bool needFileInfo = true ;
2928 var stackTrace = new StackTrace ( exception , needFileInfo ) ;
3029
3130 return GetFrames ( stackTrace ) ;
@@ -93,7 +92,7 @@ public static ResolvedMethod GetMethodDisplayString(MethodBase originMethod)
9392 // Method name
9493 methodDisplayInfo . MethodBase = method ;
9594 methodDisplayInfo . Name = methodName ;
96- if ( method . Name . IndexOf ( "<" ) >= 0 )
95+ if ( method . Name . IndexOf ( "<" , StringComparison . Ordinal ) >= 0 )
9796 {
9897 if ( TryResolveGeneratedName ( ref method , out type , out methodName , out subMethodName , out var kind ,
9998 out var ordinal ) )
@@ -126,7 +125,7 @@ public static ResolvedMethod GetMethodDisplayString(MethodBase originMethod)
126125 var value = field . GetValue ( field ) ;
127126 if ( value is Delegate d )
128127 if ( ReferenceEquals ( d . Method , originMethod ) &&
129- d . Target . ToString ( ) == originMethod . DeclaringType . ToString ( ) )
128+ d . Target . ToString ( ) == originMethod . DeclaringType ? . ToString ( ) )
130129 {
131130 methodDisplayInfo . Name = field . Name ;
132131 methodDisplayInfo . IsLambda = false ;
@@ -220,23 +219,26 @@ private static bool TryResolveGeneratedName(ref MethodBase method, out Type type
220219 switch ( kind )
221220 {
222221 case GeneratedNameKind . LocalFunction :
223- {
224- var localNameStart = generatedName . IndexOf ( ( char ) kind , closeBracketOffset + 1 ) ;
225- if ( localNameStart < 0 ) break ;
226- localNameStart += 3 ;
227-
228- if ( localNameStart < generatedName . Length )
229222 {
230- var localNameEnd = generatedName . IndexOf ( "|" , localNameStart ) ;
231- if ( localNameEnd > 0 )
232- subMethodName = generatedName . Substring ( localNameStart , localNameEnd - localNameStart ) ;
233- }
223+ var localNameStart = generatedName . IndexOf ( ( char ) kind , closeBracketOffset + 1 ) ;
224+ if ( localNameStart < 0 ) break ;
225+ localNameStart += 3 ;
234226
235- break ;
236- }
227+ if ( localNameStart < generatedName . Length )
228+ {
229+ var localNameEnd = generatedName . IndexOf ( "|" , localNameStart , StringComparison . Ordinal ) ;
230+ if ( localNameEnd > 0 )
231+ subMethodName = generatedName . Substring ( localNameStart , localNameEnd - localNameStart ) ;
232+ }
233+
234+ break ;
235+ }
237236 case GeneratedNameKind . LambdaMethod :
238237 subMethodName = generatedName ;
239238 break ;
239+
240+ default :
241+ break ;
240242 }
241243
242244 var dt = method . DeclaringType ;
@@ -338,10 +340,10 @@ private static bool TryResolveSourceMethod(IEnumerable<MethodBase> candidateMeth
338340
339341 private static void GetOrdinal ( MethodBase method , ref int ? ordinal )
340342 {
341- var lamdaStart = method . Name . IndexOf ( ( char ) GeneratedNameKind . LambdaMethod + "__" ) + 3 ;
343+ var lamdaStart = method . Name . IndexOf ( ( char ) GeneratedNameKind . LambdaMethod + "__" , StringComparison . Ordinal ) + 3 ;
342344 if ( lamdaStart > 3 )
343345 {
344- var secondStart = method . Name . IndexOf ( "_" , lamdaStart ) + 1 ;
346+ var secondStart = method . Name . IndexOf ( "_" , lamdaStart , StringComparison . Ordinal ) + 1 ;
345347 if ( secondStart > 0 ) lamdaStart = secondStart ;
346348
347349 if ( ! int . TryParse ( method . Name . Substring ( lamdaStart ) , out var foundOrdinal ) )
@@ -352,21 +354,22 @@ private static void GetOrdinal(MethodBase method, ref int? ordinal)
352354
353355 ordinal = foundOrdinal ;
354356
355- var methods = method . DeclaringType . GetMethods ( BindingFlags . Public | BindingFlags . NonPublic |
357+ var methods = method . DeclaringType ? . GetMethods ( BindingFlags . Public | BindingFlags . NonPublic |
356358 BindingFlags . Static | BindingFlags . Instance |
357359 BindingFlags . DeclaredOnly ) ;
358360
359- var startName = method . Name . Substring ( 0 , lamdaStart ) ;
360361 var count = 0 ;
361- foreach ( var m in methods )
362- if ( m . Name . Length > lamdaStart && m . Name . StartsWith ( startName ) )
363- {
364- count ++ ;
365-
366- if ( count > 1 ) break ;
367- }
368-
362+ if ( methods != null )
363+ {
364+ var startName = method . Name . Substring ( 0 , lamdaStart ) ;
365+ foreach ( var m in methods )
366+ if ( m . Name . Length > lamdaStart && m . Name . StartsWith ( startName ) )
367+ {
368+ count ++ ;
369369
370+ if ( count > 1 ) break ;
371+ }
372+ }
370373 if ( count <= 1 ) ordinal = null ;
371374 }
372375 }
@@ -378,12 +381,15 @@ private static string GetMatchHint(GeneratedNameKind kind, MethodBase method)
378381 switch ( kind )
379382 {
380383 case GeneratedNameKind . LocalFunction :
381- var start = methodName . IndexOf ( "|" ) ;
384+ var start = methodName . IndexOf ( "|" , StringComparison . Ordinal ) ;
382385 if ( start < 1 ) return null ;
383- var end = methodName . IndexOf ( "_" , start ) + 1 ;
386+ var end = methodName . IndexOf ( "_" , start , StringComparison . Ordinal ) + 1 ;
384387 if ( end <= start ) return null ;
385388
386389 return methodName . Substring ( start , end - start ) ;
390+
391+ default :
392+ break ;
387393 }
388394
389395 return null ;
@@ -413,7 +419,7 @@ internal static bool TryParseGeneratedName(
413419 int c = name [ closeBracketOffset + 1 ] ;
414420 if ( c >= '1' && c <= '9' || c >= 'a' && c <= 'z' ) // Note '0' is not special.
415421 {
416- kind = ( GeneratedNameKind ) c ;
422+ kind = ( GeneratedNameKind ) c ;
417423 return true ;
418424 }
419425 }
@@ -619,6 +625,7 @@ private static bool TryResolveStateMachineMethod(ref MethodBase method, out Type
619625 Debug . Assert ( method . DeclaringType != null ) ;
620626
621627 declaringType = method . DeclaringType ;
628+ if ( declaringType == null ) return false ;
622629
623630 var parentType = declaringType . DeclaringType ;
624631 if ( parentType == null ) return false ;
0 commit comments