@@ -455,9 +455,11 @@ private async Task<ExpressionSyntax> ConvertArgExpression(VBSyntax.SimpleArgumen
455455 return CommonConversions . TypeConversionAnalyzer . AddExplicitConversion ( node . Expression , ( ExpressionSyntax ) await node . Expression . AcceptAsync ( TriviaConvertingExpressionVisitor ) , defaultToCast : refKind != RefKind . None ) ;
456456 }
457457
458- private RefConversion GetRefType ( VBSyntax . SimpleArgumentSyntax node , VBSyntax . ArgumentListSyntax argList , System . Collections . Immutable . ImmutableArray < IParameterSymbol > parameters , out string argName , out RefKind refKind )
458+ private RefConversion GetRefType ( VBSyntax . ArgumentSyntax node , VBSyntax . ArgumentListSyntax argList , System . Collections . Immutable . ImmutableArray < IParameterSymbol > parameters , out string argName , out RefKind refKind )
459459 {
460- var parameter = ! node . IsNamed ? parameters . ElementAtOrDefault ( argList . Arguments . IndexOf ( node ) ) : parameters . FirstOrDefault ( p => p . Name . Equals ( node . NameColonEquals . Name . Identifier . Text , StringComparison . OrdinalIgnoreCase ) ) ;
460+ var parameter = node . IsNamed && node is VBSyntax . SimpleArgumentSyntax sas
461+ ? parameters . FirstOrDefault ( p => p . Name . Equals ( sas . NameColonEquals . Name . Identifier . Text , StringComparison . OrdinalIgnoreCase ) )
462+ : parameters . ElementAtOrDefault ( argList . Arguments . IndexOf ( node ) ) ;
461463 if ( parameter != null ) {
462464 refKind = parameter . RefKind ;
463465 argName = parameter . Name ;
@@ -942,10 +944,9 @@ private async Task<InvocationExpressionSyntax> HoistAndCallLocalFunction(VBSynta
942944
943945 private bool RequiresLocalFunction ( VBSyntax . InvocationExpressionSyntax invocation , IMethodSymbol invocationSymbol )
944946 {
945- var originalArgsWithRefTypes = invocation . ArgumentList . Arguments
946- . Select ( a => ( Arg : ( VBSyntax . SimpleArgumentSyntax ) a , RefType : GetRefType ( ( VBSyntax . SimpleArgumentSyntax ) a , invocation . ArgumentList , invocationSymbol . Parameters , out var argName , out var refKind ) , Name : argName , RefKind : refKind ) ) ;
947-
948- return originalArgsWithRefTypes . Any ( x => x . RefType != RefConversion . Inline ) && ! IsDefinitelyExecutedInStatement ( invocation ) ;
947+ if ( invocation . ArgumentList == null || IsDefinitelyExecutedInStatement ( invocation ) ) return false ;
948+ return invocation . ArgumentList . Arguments
949+ . Any ( a => RefConversion . Inline != GetRefType ( a , invocation . ArgumentList , invocationSymbol . Parameters , out var argName , out var refKind ) ) ;
949950 }
950951
951952 private static bool IsDefinitelyExecutedInStatement ( VBSyntax . InvocationExpressionSyntax invocation )
@@ -1399,17 +1400,18 @@ private ArgumentSyntax CreateOptionalRefArg(IParameterSymbol p)
13991400 return ( ArgumentSyntax ) CommonConversions . CsSyntaxGenerator . Argument ( p . Name , p . RefKind , local . IdentifierName ) ;
14001401 }
14011402
1402- private RefConversion NeedsVariableForArgument ( VBasic . Syntax . SimpleArgumentSyntax node , RefKind refKind )
1403+ private RefConversion NeedsVariableForArgument ( VBasic . Syntax . ArgumentSyntax node , RefKind refKind )
14031404 {
14041405 if ( refKind == RefKind . None ) return RefConversion . Inline ;
1405- bool isIdentifier = node . Expression is VBasic . Syntax . IdentifierNameSyntax ;
1406- bool isMemberAccess = node . Expression is VBasic . Syntax . MemberAccessExpressionSyntax ;
1406+ if ( ! ( node is VBSyntax . SimpleArgumentSyntax sas ) ) return RefConversion . PreAssigment ;
1407+ bool isIdentifier = sas . Expression is VBasic . Syntax . IdentifierNameSyntax ;
1408+ bool isMemberAccess = sas . Expression is VBasic . Syntax . MemberAccessExpressionSyntax ;
14071409
1408- var symbolInfo = GetSymbolInfoInDocument < ISymbol > ( node . Expression ) ;
1410+ var symbolInfo = GetSymbolInfoInDocument < ISymbol > ( sas . Expression ) ;
14091411 bool isProperty = symbolInfo != null && symbolInfo . IsKind ( SymbolKind . Property ) ;
14101412 bool isUsing = symbolInfo ? . DeclaringSyntaxReferences . FirstOrDefault ( ) ? . GetSyntax ( ) ? . Parent ? . Parent ? . IsKind ( VBasic . SyntaxKind . UsingStatement ) == true ;
14111413
1412- var typeInfo = _semanticModel . GetTypeInfo ( node . Expression ) ;
1414+ var typeInfo = _semanticModel . GetTypeInfo ( sas . Expression ) ;
14131415 bool isTypeMismatch = typeInfo . Type == null || ! typeInfo . Type . Equals ( typeInfo . ConvertedType ) ;
14141416
14151417 if ( isProperty ) return RefConversion . PreAndPostAssignment ;
0 commit comments