@@ -244,34 +244,33 @@ private void AdjustSignatures(Declaration declaration)
244
244
245
245
private void RewriteSignature ( Declaration target , VBAParser . ArgListContext paramList , CodeModule module )
246
246
{
247
- var argList = paramList . arg ( ) ;
247
+ var parameters = paramList . arg ( ) . Select ( ( s , i ) => new { Index = i , Text = s . GetText ( ) } ) . ToList ( ) ;
248
248
249
- var newContent = GetOldSignature ( target ) ;
250
- var lineNum = paramList . GetSelection ( ) . LineCount ;
251
-
252
- var parameterIndex = 0 ;
253
- var currentStringIndex = 0 ;
254
-
255
- for ( var i = parameterIndex ; i < _model . Parameters . Count ; i ++ )
249
+ var reorderedParams = new List < string > ( ) ;
250
+ foreach ( var param in _model . Parameters )
256
251
{
257
- var oldParam = argList . ElementAt ( parameterIndex ) . GetText ( ) ;
258
- var newParam = argList . ElementAt ( _model . Parameters . ElementAt ( parameterIndex ) . Index ) . GetText ( ) ;
259
- var parameterStringIndex = newContent . IndexOf ( oldParam , currentStringIndex , StringComparison . Ordinal ) ;
260
-
261
- if ( parameterStringIndex > - 1 )
252
+ var parameterAtIndex = parameters . SingleOrDefault ( s => s . Index == param . Index ) ;
253
+ if ( parameterAtIndex != null )
262
254
{
263
- var beginningSub = newContent . Substring ( 0 , parameterStringIndex ) ;
264
- var replaceSub = newContent . Substring ( parameterStringIndex ) . Replace ( oldParam , newParam ) ;
265
-
266
- newContent = beginningSub + replaceSub ;
267
-
268
- parameterIndex ++ ;
269
- currentStringIndex = beginningSub . Length + newParam . Length ;
255
+ reorderedParams . Add ( parameterAtIndex . Text ) ;
270
256
}
271
257
}
272
258
273
- module . ReplaceLine ( paramList . Start . Line , newContent . Replace ( " _" + Environment . NewLine , string . Empty ) ) ;
274
- module . DeleteLines ( paramList . Start . Line + 1 , lineNum - 1 ) ;
259
+ // property let/set and paramarrays
260
+ for ( var index = reorderedParams . Count ; index < parameters . Count ; index ++ )
261
+ {
262
+ reorderedParams . Add ( parameters [ index ] . Text ) ;
263
+ }
264
+
265
+ var signature = GetOldSignature ( target ) ;
266
+ signature = signature . Remove ( signature . IndexOf ( '(' ) ) ;
267
+
268
+ var asTypeText = target . AsTypeContext == null ? string . Empty : " " + target . AsTypeContext . GetText ( ) ;
269
+ signature += '(' + string . Join ( ", " , reorderedParams ) + ")" + ( asTypeText == " " ? string . Empty : asTypeText ) ;
270
+
271
+ var lineCount = paramList . GetSelection ( ) . LineCount ;
272
+ module . ReplaceLine ( paramList . Start . Line , signature . Replace ( " _" + Environment . NewLine , string . Empty ) ) ;
273
+ module . DeleteLines ( paramList . Start . Line + 1 , lineCount - 1 ) ;
275
274
}
276
275
277
276
private string GetOldSignature ( Declaration target )
0 commit comments