Skip to content

Commit ce67d2d

Browse files
Always convert Call statement to method call - fixes #445
1 parent a6ebc83 commit ce67d2d

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
1616
* Omit conversion in string concatenation where possible [#508](https://github.com/icsharpcode/CodeConverter/issues/508)
1717
* Use ToString for numeric types rather than Conversions.ToString
1818
* Convert optional ref parameters - fixes #91
19+
* Always convert Call statement to method call [#445](https://github.com/icsharpcode/CodeConverter/issues/445)
1920

2021
### C# -> VB
2122

CodeConverter/CSharp/ExpressionNodeVisitor.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1232,7 +1232,7 @@ private async Task<IEnumerable<ArgumentSyntax>> ConvertArguments(VBasic.Syntax.A
12321232
ISymbol invocationSymbol = GetInvocationSymbol(node.Parent);
12331233
int vbPositionalArgs = node.Arguments.TakeWhile(a => !a.IsNamed).Count();
12341234
var namedArgNames = new HashSet<string>(node.Arguments.OfType<VBasic.Syntax.SimpleArgumentSyntax>().Where(a => a.IsNamed).Select(a => a.NameColonEquals.Name.Identifier.Text), StringComparer.OrdinalIgnoreCase);
1235-
bool afterOmitted = false;
1235+
bool forceNamedParameters = false;
12361236
var argumentSyntaxs = (await node.Arguments.SelectAsync(async (a, i) => await ConvertArg(a, i)))
12371237
.Where(a => a != null);
12381238

@@ -1247,9 +1247,8 @@ private async Task<IEnumerable<ArgumentSyntax>> ConvertArguments(VBasic.Syntax.A
12471247
async Task<ArgumentSyntax> ConvertArg(VBSyntax.ArgumentSyntax a, int i)
12481248
{
12491249
if (a.IsOmitted) {
1250-
afterOmitted = true;
1251-
12521250
if (invocationSymbol != null) {
1251+
forceNamedParameters = true;
12531252
return null; //Prefer to skip omitted and use named parameters when the symbol is available
12541253
}
12551254

@@ -1259,7 +1258,7 @@ async Task<ArgumentSyntax> ConvertArg(VBSyntax.ArgumentSyntax a, int i)
12591258

12601259
var argumentSyntax = (ArgumentSyntax)await a.AcceptAsync(TriviaConvertingExpressionVisitor);
12611260

1262-
if (afterOmitted) {
1261+
if (forceNamedParameters) {
12631262
var elementAtOrDefault = invocationSymbol.GetParameters().ElementAt(i).Name;
12641263
return argumentSyntax.WithNameColon(SyntaxFactory.NameColon(elementAtOrDefault));
12651264
}
@@ -1339,7 +1338,7 @@ private static bool IsArrayElementAccess(IOperation operation)
13391338
/// </summary>
13401339
private static bool ProbablyNotAMethodCall(VBasic.Syntax.InvocationExpressionSyntax node, ISymbol symbol, ITypeSymbol symbolReturnType)
13411340
{
1342-
return !(symbol is IMethodSymbol) && symbolReturnType.IsErrorType() && node.Expression is VBasic.Syntax.IdentifierNameSyntax && node.ArgumentList?.Arguments.Any() == true;
1341+
return !node.IsParentKind(VBasic.SyntaxKind.CallStatement) && !(symbol is IMethodSymbol) && symbolReturnType.IsErrorType() && node.Expression is VBasic.Syntax.IdentifierNameSyntax && node.ArgumentList?.Arguments.Any() == true;
13431342
}
13441343

13451344
private async Task<ArgumentListSyntax> ConvertArgumentListOrEmpty(VBasic.Syntax.ArgumentListSyntax argumentListSyntax)

Tests/CSharp/MissingSemanticModelInfo/ExpressionTests.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,5 +340,15 @@ public void Test()
340340
CS0246: The type or namespace name 'SomeUnknownType' could not be found (are you missing a using directive or an assembly reference?)");
341341
}
342342

343+
[Fact]
344+
public async Task CallShouldAlwaysBecomeInvocation()
345+
{
346+
await TestConversionVisualBasicToCSharp(
347+
@"Call mySuperFunction(strSomething, , optionalSomething)",
348+
@"mySuperFunction(strSomething, default, optionalSomething);",
349+
expectSurroundingBlock: true, missingSemanticInfo: true
350+
);
351+
}
352+
343353
}
344354
}

0 commit comments

Comments
 (0)