Skip to content

Commit 907a497

Browse files
Take a best effort match. ExtractBestMatch is a bit of a misnomer - it enforces having precisely one match
1 parent f4b2f84 commit 907a497

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

CodeConverter/CSharp/ArgumentConverter.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,14 +147,23 @@ private CSSyntax.ExpressionSyntax HoistByRefDeclaration(VBSyntax.SimpleArgumentS
147147
private ISymbol GetInvocationSymbol(SyntaxNode invocation)
148148
{
149149
var symbol = invocation.TypeSwitch(
150-
(VBSyntax.InvocationExpressionSyntax e) => _semanticModel.GetSymbolInfo(e).ExtractBestMatch<ISymbol>(),
150+
(VBSyntax.InvocationExpressionSyntax e) => _semanticModel.GetSymbolInfo(e).CandidateSymbols
151+
.OrderByDescending(s => s.GetParameters().Length == e.ArgumentList.Arguments.Count)
152+
.ThenByDescending(s => ParameterMatchScore(s, e.ArgumentList.Arguments))
153+
.FirstOrDefault(),
151154
(VBSyntax.ObjectCreationExpressionSyntax e) => _semanticModel.GetSymbolInfo(e).ExtractBestMatch<ISymbol>(),
152155
(VBSyntax.RaiseEventStatementSyntax e) => _semanticModel.GetSymbolInfo(e.Name).ExtractBestMatch<ISymbol>(),
153156
(VBSyntax.MidExpressionSyntax _) => CommonConversions.KnownTypes.VbCompilerStringType?.GetMembers("MidStmtStr").FirstOrDefault(),
154157
_ => throw new NotSupportedException());
155158
return symbol;
156159
}
157160

161+
private static int ParameterMatchScore(ISymbol symbol, SeparatedSyntaxList<VBSyntax.ArgumentSyntax> arguments)
162+
{
163+
//TODO: Match on name/position and type
164+
return 1;
165+
}
166+
158167
private IEnumerable<CSSyntax.ArgumentSyntax> GetAdditionalRequiredArgs(
159168
IEnumerable<VBSyntax.ArgumentSyntax> arguments,
160169
ISymbol invocationSymbol)

0 commit comments

Comments
 (0)