Skip to content

Commit ec1e21f

Browse files
Pass through expected type
This improves error stack traces
1 parent 3524b14 commit ec1e21f

7 files changed

Lines changed: 20 additions & 22 deletions

CodeConverter/CSharp/BuiltInVisualBasicOperatorSubstitutions.cs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,9 @@ private static VBSyntax.ExpressionSyntax ArgComparedToNull(VBSyntax.BinaryExpres
9292
return null;
9393
}
9494

95-
private async Task<ExpressionSyntax> ConvertIsOrIsNotExpressionArgAsync(VBSyntax.ExpressionSyntax binaryExpressionArg)
96-
{
97-
return (ExpressionSyntax) (await ConvertMyGroupCollectionPropertyGetWithUnderlyingFieldAsync(binaryExpressionArg)
98-
?? await binaryExpressionArg.AcceptAsync(_triviaConvertingVisitor));
99-
}
95+
private async Task<ExpressionSyntax> ConvertIsOrIsNotExpressionArgAsync(VBSyntax.ExpressionSyntax binaryExpressionArg) =>
96+
await ConvertMyGroupCollectionPropertyGetWithUnderlyingFieldAsync(binaryExpressionArg)
97+
?? await binaryExpressionArg.AcceptAsync<ExpressionSyntax>(_triviaConvertingVisitor);
10098

10199
private async Task<ExpressionSyntax> ConvertMyGroupCollectionPropertyGetWithUnderlyingFieldAsync(SyntaxNode node)
102100
{

CodeConverter/CSharp/CommonConversions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,7 @@ private async Task<ExpressionSyntax> IncreaseArrayUpperBoundExpressionAsync(VBSy
512512
{
513513
// These attributes' semantic effects are expressed differently in CSharp.
514514
return await attributeList.Attributes.Where(a => !IsExtensionAttribute(a) && !IsOutAttribute(a))
515-
.SelectAsync(async a => (CSSyntax.AttributeListSyntax)await a.AcceptAsync(TriviaConvertingExpressionVisitor));
515+
.SelectAsync(async a => await a.AcceptAsync<CSSyntax.AttributeListSyntax>(TriviaConvertingExpressionVisitor));
516516
}
517517

518518
public static CSSyntax.AttributeArgumentListSyntax CreateAttributeArgumentList(params CSSyntax.AttributeArgumentSyntax[] attributeArgumentSyntaxs)

CodeConverter/CSharp/DeclarationNodeVisitor.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -926,14 +926,14 @@ await asClause.Type.AcceptAsync<TypeSyntax>(_triviaConvertingExpressionVisitor,
926926

927927
async Task<MethodDeclarationSyntax> CreateMethodDeclarationSyntax(VBSyntax.ParameterListSyntax containingPropParameterList, bool voidReturn)
928928
{
929-
var parameterListSyntax = await containingPropParameterList.AcceptAsync(_triviaConvertingExpressionVisitor, sourceMap);
929+
var parameterListSyntax = await containingPropParameterList.AcceptAsync<ParameterListSyntax>(_triviaConvertingExpressionVisitor, sourceMap);
930930
var methodModifiers = explicitInterfaceSpecifier != null ? modifiers.RemoveOnly(x => x.IsKind(CSSyntaxKind.PrivateKeyword))
931931
: modifiers;
932932
MethodDeclarationSyntax methodDeclarationSyntax = SyntaxFactory.MethodDeclaration(attributes, methodModifiers,
933933
voidReturn ? SyntaxFactory.PredefinedType(SyntaxFactory.Token(CSSyntaxKind.VoidKeyword)) : returnType,
934934
explicitInterfaceSpecifier,
935935
SyntaxFactory.Identifier(potentialMethodId), null,
936-
(ParameterListSyntax)parameterListSyntax, SyntaxFactory.List<TypeParameterConstraintClauseSyntax>(), body, null);
936+
parameterListSyntax, SyntaxFactory.List<TypeParameterConstraintClauseSyntax>(), body, null);
937937
return methodDeclarationSyntax;
938938
}
939939
}
@@ -1101,8 +1101,8 @@ public override async Task<CSharpSyntaxNode> VisitMethodStatement(VBSyntax.Metho
11011101
}
11021102
var (typeParameters, constraints) = await SplitTypeParametersAsync(node.TypeParameterList);
11031103

1104-
var returnType = (TypeSyntax)(declaredSymbol != null ? CommonConversions.GetTypeSyntax(declaredSymbol.ReturnType) :
1105-
await (node.AsClause?.Type).AcceptAsync(_triviaConvertingExpressionVisitor) ?? SyntaxFactory.PredefinedType(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.VoidKeyword)));
1104+
var returnType = (declaredSymbol != null ? CommonConversions.GetTypeSyntax(declaredSymbol.ReturnType) :
1105+
await (node.AsClause?.Type).AcceptAsync<TypeSyntax>(_triviaConvertingExpressionVisitor) ?? SyntaxFactory.PredefinedType(SyntaxFactory.Token(Microsoft.CodeAnalysis.CSharp.SyntaxKind.VoidKeyword)));
11061106

11071107
var directlyConvertedCsIdentifier = CommonConversions.CsEscapedIdentifier(node.Identifier.Value as string);
11081108
var csIdentifier = CommonConversions.ConvertIdentifier(node.Identifier);
@@ -1338,8 +1338,8 @@ public override async Task<CSharpSyntaxNode> VisitDeclareStatement(VBSyntax.Decl
13381338
_extraUsingDirectives.Add(DllImportType.Namespace);
13391339
_extraUsingDirectives.Add(CharSetType.Namespace);
13401340
var dllImportAttributeName = SyntaxFactory.ParseName(DllImportType.Name.Replace("Attribute", ""));
1341-
var dllImportLibLiteral = await node.LibraryName.AcceptAsync(_triviaConvertingExpressionVisitor);
1342-
importAttributes.Add(SyntaxFactory.AttributeArgument((ExpressionSyntax)dllImportLibLiteral));
1341+
var dllImportLibLiteral = await node.LibraryName.AcceptAsync<ExpressionSyntax>(_triviaConvertingExpressionVisitor);
1342+
importAttributes.Add(SyntaxFactory.AttributeArgument(dllImportLibLiteral));
13431343

13441344
if (node.AliasName != null) {
13451345
importAttributes.Add(SyntaxFactory.AttributeArgument(SyntaxFactory.NameEquals("EntryPoint"), null, await node.AliasName.AcceptAsync<ExpressionSyntax>(_triviaConvertingExpressionVisitor)));

CodeConverter/CSharp/ExpressionNodeVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,8 +1066,8 @@ public override async Task<CSharpSyntaxNode> VisitSingleLineLambdaExpression(VBa
10661066
if (node.Body is VBasic.Syntax.StatementSyntax statement) {
10671067
convertedStatements = await statement.Accept(await CreateMethodBodyVisitorAsync(node));
10681068
} else {
1069-
var csNode = await node.Body.AcceptAsync(TriviaConvertingExpressionVisitor);
1070-
convertedStatements = new[] { SyntaxFactory.ExpressionStatement((ExpressionSyntax)csNode)};
1069+
var csNode = await node.Body.AcceptAsync<ExpressionSyntax>(TriviaConvertingExpressionVisitor);
1070+
convertedStatements = new[] { SyntaxFactory.ExpressionStatement(csNode)};
10711071
}
10721072
var param = await node.SubOrFunctionHeader.ParameterList.AcceptAsync<ParameterListSyntax>(TriviaConvertingExpressionVisitor);
10731073
return await _lambdaConverter.ConvertAsync(node, param, convertedStatements);

CodeConverter/CSharp/MethodBodyExecutableStatementVisitor.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,10 +233,10 @@ public SyntaxList<StatementSyntax> GetPostAssignmentStatements(Microsoft.CodeAna
233233
public override async Task<SyntaxList<StatementSyntax>> VisitEraseStatement(VBSyntax.EraseStatementSyntax node)
234234
{
235235
var eraseStatements = await node.Expressions.SelectAsync<VBSyntax.ExpressionSyntax, StatementSyntax>(async arrayExpression => {
236-
var lhs = await arrayExpression.AcceptAsync(_expressionVisitor);
236+
var lhs = await arrayExpression.AcceptAsync<ExpressionSyntax>(_expressionVisitor);
237237
var rhs = SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression);
238238
var assignmentExpressionSyntax =
239-
SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, (ExpressionSyntax)lhs,
239+
SyntaxFactory.AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, lhs,
240240
rhs);
241241
return SyntaxFactory.ExpressionStatement(assignmentExpressionSyntax);
242242
});

CodeConverter/CSharp/QueryConverter.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -340,22 +340,22 @@ private IEnumerable<string> GetGroupKeyIdentifiers(VBSyntax.GroupByClauseSyntax
340340
private async Task<CSSyntax.QueryClauseSyntax> ConvertLetClauseAsync(VBSyntax.LetClauseSyntax ls)
341341
{
342342
var singleVariable = ls.Variables.Single();
343-
return SyntaxFactory.LetClause(CommonConversions.ConvertIdentifier(singleVariable.NameEquals.Identifier.Identifier), (CSSyntax.ExpressionSyntax) await singleVariable.Expression.AcceptAsync(_triviaConvertingVisitor));
343+
return SyntaxFactory.LetClause(CommonConversions.ConvertIdentifier(singleVariable.NameEquals.Identifier.Identifier), await singleVariable.Expression.AcceptAsync<CSSyntax.ExpressionSyntax>(_triviaConvertingVisitor));
344344
}
345345

346346
private async Task<CSSyntax.QueryClauseSyntax> ConvertOrderByClauseAsync(VBSyntax.OrderByClauseSyntax os)
347347
{
348-
var orderingSyntaxs = await os.Orderings.SelectAsync(async o => (CSSyntax.OrderingSyntax) await o.AcceptAsync(_triviaConvertingVisitor));
348+
var orderingSyntaxs = await os.Orderings.SelectAsync(async o => await o.AcceptAsync<CSSyntax.OrderingSyntax>(_triviaConvertingVisitor));
349349
return SyntaxFactory.OrderByClause(SyntaxFactory.SeparatedList(orderingSyntaxs));
350350
}
351351

352352
private async Task<CSSyntax.QueryClauseSyntax> ConvertJoinClauseAsync(VBSyntax.JoinClauseSyntax js)
353353
{
354354
var variable = js.JoinedVariables.Single();
355-
var joinLhs = SingleExpression(await js.JoinConditions.SelectAsync(async c => (CSSyntax.ExpressionSyntax) await c.Left.AcceptAsync(_triviaConvertingVisitor)));
356-
var joinRhs = SingleExpression(await js.JoinConditions.SelectAsync(async c => (CSSyntax.ExpressionSyntax) await c.Right.AcceptAsync(_triviaConvertingVisitor)));
355+
var joinLhs = SingleExpression(await js.JoinConditions.SelectAsync(async c => await c.Left.AcceptAsync<CSSyntax.ExpressionSyntax>(_triviaConvertingVisitor)));
356+
var joinRhs = SingleExpression(await js.JoinConditions.SelectAsync(async c => await c.Right.AcceptAsync<CSSyntax.ExpressionSyntax>(_triviaConvertingVisitor)));
357357
var convertIdentifier = CommonConversions.ConvertIdentifier(variable.Identifier.Identifier);
358-
var expressionSyntax = (CSSyntax.ExpressionSyntax) await variable.Expression.AcceptAsync(_triviaConvertingVisitor);
358+
var expressionSyntax = await variable.Expression.AcceptAsync<CSSyntax.ExpressionSyntax>(_triviaConvertingVisitor);
359359

360360
CSSyntax.JoinIntoClauseSyntax joinIntoClauseSyntax = null;
361361
if (js is VBSyntax.GroupJoinClauseSyntax gjs) {

CodeConverter/CSharp/VisualBasicConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static async Task<SyntaxNode> ConvertCompilationTreeAsync(Document docume
3030
var semanticModel = compilation.GetSemanticModel(tree, true);
3131
var visualBasicSyntaxVisitor = new
3232
DeclarationNodeVisitor(document, compilation, semanticModel, csharpViewOfVbSymbols, csSyntaxGenerator);
33-
var converted = (CSS.CompilationUnitSyntax)await root.AcceptAsync(visualBasicSyntaxVisitor.TriviaConvertingDeclarationVisitor);
33+
var converted = await root.AcceptAsync<CSS.CompilationUnitSyntax>(visualBasicSyntaxVisitor.TriviaConvertingDeclarationVisitor);
3434

3535
return optionalOperations.MapSourceTriviaToTargetHandled(root, converted, document);
3636
}

0 commit comments

Comments
 (0)