@@ -683,46 +683,50 @@ void PopulateClosureMethod(MethodDefinition generatedMethod, TypeDefinition owne
683
683
return [ new Symbol { Name = "this" , SymbolType = SymbolType . Arg , Line = UnknownFieldAndArgLine , Type = method . GetDeclaringType ( ) . FullName ( MetadataReader ) } ] ;
684
684
}
685
685
686
- var argsSymbol = CreateArgSymbolArray ( method , parameters ) ;
686
+ var argsSymbol = method . IsStaticMethod ( ) ? new Symbol [ parameters . Count ] : new Symbol [ parameters . Count + 1 ] ; // 'this'
687
687
int index = 0 ;
688
688
var methodSig = method . DecodeSignature ( new TypeProvider ( false ) , 0 ) ;
689
- var paramTypesMatchArgSymbols = methodSig . ParameterTypes . Length == argsSymbol . Length || methodSig . ParameterTypes . Length == argsSymbol . Length - 1 ;
689
+ var typesIndex = 0 ;
690
+ if ( ! method . IsStaticMethod ( ) )
691
+ {
692
+ var thisSymbol = new Symbol { Name = "this" , SymbolType = SymbolType . Arg , Line = UnknownFieldAndArgLine , Type = method . GetDeclaringType ( ) . FullName ( MetadataReader ) } ;
693
+ argsSymbol [ 0 ] = thisSymbol ;
694
+ index ++ ;
695
+ }
696
+
690
697
foreach ( var parameterHandle in parameters )
691
698
{
699
+ if ( parameterHandle . IsNil )
700
+ {
701
+ continue ;
702
+ }
703
+
692
704
var parameterDef = MetadataReader . GetParameter ( parameterHandle ) ;
693
- if ( index == 0 && ! method . IsStaticMethod ( ) )
705
+ var parameterName = MetadataReader . GetString ( parameterDef . Name ) ;
706
+ if ( string . IsNullOrEmpty ( parameterName ) )
694
707
{
695
- argsSymbol [ index ] = new Symbol { Name = "this" , SymbolType = SymbolType . Arg , Line = UnknownFieldAndArgLine , Type = method . GetDeclaringType ( ) . FullName ( MetadataReader ) } ;
696
- index ++ ;
708
+ continue ;
709
+ }
697
710
698
- if ( parameterDef . IsHiddenThis ( ) )
699
- {
700
- continue ;
701
- }
711
+ if ( parameterDef . IsHiddenThis ( ) )
712
+ {
713
+ continue ;
702
714
}
703
715
704
716
argsSymbol [ index ] = new Symbol
705
717
{
706
- Name = MetadataReader . GetString ( parameterDef . Name ) ,
718
+ Name = parameterName ,
707
719
SymbolType = SymbolType . Arg ,
708
720
Line = UnknownFieldAndArgLine ,
709
- Type = paramTypesMatchArgSymbols ? methodSig . ParameterTypes [ parameterDef . IsHiddenThis ( ) ? index : index - 1 ] : "Unknown"
721
+ Type = typesIndex < methodSig . ParameterTypes . Length ? methodSig . ParameterTypes [ typesIndex ] : "Unknown"
710
722
} ;
711
723
index ++ ;
724
+ typesIndex ++ ;
712
725
}
713
726
714
727
return argsSymbol ;
715
728
}
716
729
717
- private Symbol [ ] CreateArgSymbolArray ( MethodDefinition method , ParameterHandleCollection parameters )
718
- {
719
- // ReSharper disable once NotDisposedResource
720
- return method . IsStaticMethod ( ) ?
721
- new Symbol [ parameters . Count ] :
722
- MetadataReader . GetParameter ( parameters . GetEnumerator ( ) . Current ) . IsHiddenThis ( ) ?
723
- new Symbol [ parameters . Count ] : new Symbol [ parameters . Count + 1 ] ;
724
- }
725
-
726
730
private string [ ] ? GetClassBaseClassNames ( TypeDefinition type )
727
731
{
728
732
EntityHandle ? baseType = type . BaseType ;
0 commit comments