Skip to content

Commit 6caedbf

Browse files
Readability tweaks
1 parent 4da86f1 commit 6caedbf

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

CodeConverter/CSharp/ExpressionNodeVisitor.cs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -407,32 +407,35 @@ public override async Task<CSharpSyntaxNode> VisitSimpleArgument(VBasic.Syntax.S
407407
return await node.Expression.AcceptAsync(TriviaConvertingExpressionVisitor);
408408
var symbol = GetInvocationSymbol(invocation);
409409
SyntaxToken token = default(SyntaxToken);
410-
var convertedArgExpression = (ExpressionSyntax)await node.Expression.AcceptAsync(TriviaConvertingExpressionVisitor);
410+
var convertedArgExpression = ((ExpressionSyntax)await node.Expression.AcceptAsync(TriviaConvertingExpressionVisitor)).SkipParens();
411411
if (symbol is IMethodSymbol methodSymbol) {
412412
var parameters = (CommonConversions.GetCsOriginalSymbolOrNull(methodSymbol.OriginalDefinition) ?? methodSymbol).GetParameters();
413413
var refType = GetRefConversionType(node, argList, parameters, out var argName, out var refKind);
414-
var convertedExpressionWithoutCast = convertedArgExpression;
415-
convertedArgExpression = CommonConversions.TypeConversionAnalyzer.AddExplicitConversion(node.Expression, convertedArgExpression, defaultToCast: refKind != RefKind.None);
416414

417415
if (refType != RefConversion.Inline) {
418416
string prefix = $"arg{argName}";
417+
var refLhs = convertedArgExpression;
419418
var expressionTypeInfo = _semanticModel.GetTypeInfo(node.Expression);
420419
bool useVar = expressionTypeInfo.Type?.Equals(expressionTypeInfo.ConvertedType) == true && !CommonConversions.ShouldPreferExplicitType(node.Expression, expressionTypeInfo.ConvertedType, out var _);
421420
var typeSyntax = CommonConversions.GetTypeSyntax(expressionTypeInfo.ConvertedType, useVar);
422421

423-
if (convertedExpressionWithoutCast.SkipParens() is ElementAccessExpressionSyntax eae) {
422+
if (convertedArgExpression is ElementAccessExpressionSyntax eae) {
424423
//Hoist out the container so we can assign back to the same one after (like VB does)
425424
var tmpContainer = _additionalLocals.Hoist(new AdditionalDeclaration("tmp", eae.Expression, ValidSyntaxFactory.VarType));
426-
convertedExpressionWithoutCast = eae.WithExpression(tmpContainer.IdentifierName);
427-
convertedArgExpression = convertedArgExpression.ReplaceNode(eae, convertedExpressionWithoutCast);
425+
convertedArgExpression = eae.WithExpression(tmpContainer.IdentifierName);
428426
}
427+
428+
convertedArgExpression = CommonConversions.TypeConversionAnalyzer.AddExplicitConversion(node.Expression, convertedArgExpression, defaultToCast: refKind != RefKind.None);
429+
429430
var local = _additionalLocals.Hoist(new AdditionalDeclaration(prefix, convertedArgExpression, typeSyntax));
431+
convertedArgExpression = local.IdentifierName;
430432

431433
if (refType == RefConversion.PreAndPostAssignment) {
432434
var convertedLocalIdentifier = CommonConversions.TypeConversionAnalyzer.AddExplicitConversion(node.Expression, local.IdentifierName, forceSourceType: expressionTypeInfo.ConvertedType, forceTargetType: expressionTypeInfo.Type);
433-
_additionalLocals.Hoist(new AdditionalAssignment(convertedExpressionWithoutCast, convertedLocalIdentifier));
435+
_additionalLocals.Hoist(new AdditionalAssignment(refLhs, convertedLocalIdentifier));
434436
}
435-
convertedArgExpression = local.IdentifierName;
437+
} else {
438+
convertedArgExpression = CommonConversions.TypeConversionAnalyzer.AddExplicitConversion(node.Expression, convertedArgExpression, defaultToCast: refKind != RefKind.None);
436439
}
437440
token = GetRefToken(refKind);
438441
} else {

0 commit comments

Comments
 (0)