Skip to content

Commit 5c06d29

Browse files
Convert conditional invocations
1 parent afecf05 commit 5c06d29

1 file changed

Lines changed: 28 additions & 5 deletions

File tree

ICSharpCode.CodeConverter/VB/NodesVisitor.cs

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -952,19 +952,33 @@ public override VisualBasicSyntaxNode VisitInvocationExpression(CSS.InvocationEx
952952
}
953953

954954
var invokedCsExpression = node.Expression;
955-
if (invokedCsExpression is CSS.MemberAccessExpressionSyntax csMemberAccess && csMemberAccess.Name.Identifier.Value.Equals("Invoke") && _commonConversions.IsEventHandlerIdentifier(csMemberAccess.Expression)) {
955+
if (invokedCsExpression is CSS.MemberAccessExpressionSyntax csMemberAccess && IsInvokeIdentifier(csMemberAccess.Name)) {
956956
invokedCsExpression = csMemberAccess.Expression;
957957
}
958958

959+
if (TryCreateRaiseEventStatement(invokedCsExpression, node.ArgumentList, out VisualBasicSyntaxNode visitInvocationExpression)) {
960+
return visitInvocationExpression;
961+
}
962+
959963
var vbEventExpression = (ExpressionSyntax)invokedCsExpression.Accept(TriviaConvertingVisitor);
960964
var argumentListSyntax = (ArgumentListSyntax)node.ArgumentList.Accept(TriviaConvertingVisitor);
965+
return SyntaxFactory.InvocationExpression(vbEventExpression, argumentListSyntax);
966+
}
961967

962-
if (_commonConversions.IsEventHandlerIdentifier(invokedCsExpression)) {
963-
return SyntaxFactory.RaiseEventStatement(RemoveEventSuffix(GetSimpleName(vbEventExpression)),
964-
argumentListSyntax);
968+
private bool TryCreateRaiseEventStatement(CSS.ExpressionSyntax invokedCsExpression,
969+
CSS.ArgumentListSyntax argumentListSyntax, out VisualBasicSyntaxNode visitInvocationExpression)
970+
{
971+
if (_commonConversions.IsEventHandlerIdentifier(invokedCsExpression))
972+
{
973+
var expressionSyntax = (ExpressionSyntax)invokedCsExpression.Accept(TriviaConvertingVisitor);
974+
var identifierNameSyntax = RemoveEventSuffix(GetSimpleName(expressionSyntax));
975+
var argumentList = (ArgumentListSyntax)argumentListSyntax.Accept(TriviaConvertingVisitor);
976+
visitInvocationExpression = SyntaxFactory.RaiseEventStatement(identifierNameSyntax, argumentList);
977+
return true;
965978
}
966979

967-
return SyntaxFactory.InvocationExpression(vbEventExpression, argumentListSyntax);
980+
visitInvocationExpression = null;
981+
return false;
968982
}
969983

970984
private IdentifierNameSyntax RemoveEventSuffix(SimpleNameSyntax name)
@@ -1009,13 +1023,22 @@ public override VisualBasicSyntaxNode VisitConditionalExpression(CSS.Conditional
10091023

10101024
public override VisualBasicSyntaxNode VisitConditionalAccessExpression(CSS.ConditionalAccessExpressionSyntax node)
10111025
{
1026+
if (node.WhenNotNull is CSS.InvocationExpressionSyntax invocation && invocation.Expression is CSS.MemberBindingExpressionSyntax binding && IsInvokeIdentifier(binding.Name) && TryCreateRaiseEventStatement(node.Expression, invocation.ArgumentList, out var raiseEventStatement)) {
1027+
return raiseEventStatement;
1028+
}
1029+
10121030
return SyntaxFactory.ConditionalAccessExpression(
10131031
(ExpressionSyntax)node.Expression.Accept(TriviaConvertingVisitor),
10141032
SyntaxFactory.Token(SyntaxKind.QuestionToken),
10151033
(ExpressionSyntax)node.WhenNotNull.Accept(TriviaConvertingVisitor)
10161034
);
10171035
}
10181036

1037+
private static bool IsInvokeIdentifier(CSS.SimpleNameSyntax sns)
1038+
{
1039+
return sns.Identifier.Value.Equals("Invoke");
1040+
}
1041+
10191042
public override VisualBasicSyntaxNode VisitMemberAccessExpression(CSS.MemberAccessExpressionSyntax node)
10201043
{
10211044
return WrapTypedNameIfNecessary(SyntaxFactory.MemberAccessExpression(

0 commit comments

Comments
 (0)