Skip to content

Commit b35f2fa

Browse files
Merge pull request #570 from icsharpcode/issue/376/flaky-test-prevention
Flaky test prevention
2 parents dbe18ed + 76ca882 commit b35f2fa

39 files changed

Lines changed: 523 additions & 354 deletions

CodeConverter/CSharp/CommentConvertingNodesVisitor.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,17 @@ public CommentConvertingNodesVisitor(VisualBasicSyntaxVisitor<Task<CSharpSyntaxN
1818
}
1919
public override async Task<CSharpSyntaxNode> DefaultVisit(SyntaxNode node)
2020
{
21-
return await DefaultVisitInner(node);
21+
return await DefaultVisitInnerAsync(node);
2222
}
2323

24-
private async Task<CSharpSyntaxNode> DefaultVisitInner(SyntaxNode node)
24+
private async Task<CSharpSyntaxNode> DefaultVisitInnerAsync(SyntaxNode node)
2525
{
2626
return await _wrappedVisitor.Visit(node);
2727
}
2828

2929
public override async Task<CSharpSyntaxNode> VisitCompilationUnit(VbSyntax.CompilationUnitSyntax node)
3030
{
31-
var convertedNode = (CsSyntax.CompilationUnitSyntax)await DefaultVisitInner(node);
31+
var convertedNode = (CsSyntax.CompilationUnitSyntax)await DefaultVisitInnerAsync(node);
3232
// Special case where we need to map manually because it's a special zero-width token that just has leading trivia that isn't at the start of the line necessarily
3333
return convertedNode.WithEndOfFileToken(
3434
convertedNode.EndOfFileToken.WithSourceMappingFrom(node.EndOfFileToken)

CodeConverter/CSharp/CommentConvertingVisitorWrapper.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,14 @@ public CommentConvertingVisitorWrapper(VisualBasicSyntaxVisitor<Task<CSharpSynta
2525
_syntaxTree = syntaxTree;
2626
}
2727

28-
public async Task<T> Accept<T>(SyntaxNode vbNode, SourceTriviaMapKind sourceTriviaMap) where T : CS.CSharpSyntaxNode
28+
public async Task<T> AcceptAsync<T>(SyntaxNode vbNode, SourceTriviaMapKind sourceTriviaMap) where T : CS.CSharpSyntaxNode
2929
{
30-
return await ConvertHandled<T>(vbNode, sourceTriviaMap);
30+
return await ConvertHandledAsync<T>(vbNode, sourceTriviaMap);
3131
}
3232

33-
public async Task<SeparatedSyntaxList<TOut>> Accept<TIn, TOut>(SeparatedSyntaxList<TIn> vbNodes, SourceTriviaMapKind sourceTriviaMap) where TIn : VBasic.VisualBasicSyntaxNode where TOut : CS.CSharpSyntaxNode
33+
public async Task<SeparatedSyntaxList<TOut>> AcceptAsync<TIn, TOut>(SeparatedSyntaxList<TIn> vbNodes, SourceTriviaMapKind sourceTriviaMap) where TIn : VBasic.VisualBasicSyntaxNode where TOut : CS.CSharpSyntaxNode
3434
{
35-
var convertedNodes = await vbNodes.SelectAsync(n => ConvertHandled<TOut>(n, sourceTriviaMap));
35+
var convertedNodes = await vbNodes.SelectAsync(n => ConvertHandledAsync<TOut>(n, sourceTriviaMap));
3636
var convertedSeparators = vbNodes.GetSeparators().Select(s =>
3737
CS.SyntaxFactory.Token(CS.SyntaxKind.CommaToken)
3838
.WithConvertedTrailingTriviaFrom(s, TriviaKinds.FormattingOnly)
@@ -41,7 +41,7 @@ public async Task<SeparatedSyntaxList<TOut>> Accept<TIn, TOut>(SeparatedSyntaxLi
4141
return CS.SyntaxFactory.SeparatedList(convertedNodes, convertedSeparators);
4242
}
4343

44-
private async Task<T> ConvertHandled<T>(SyntaxNode vbNode, SourceTriviaMapKind sourceTriviaMap) where T : CS.CSharpSyntaxNode
44+
private async Task<T> ConvertHandledAsync<T>(SyntaxNode vbNode, SourceTriviaMapKind sourceTriviaMap) where T : CS.CSharpSyntaxNode
4545
{
4646
try {
4747
var converted = (T)await _wrappedVisitor.Visit(vbNode);

CodeConverter/CSharp/CommonConversions.cs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public CommonConversions(Document document, SemanticModel semanticModel,
5959
_typeContext = typeContext;
6060
}
6161

62-
public async Task<(IReadOnlyCollection<(VariableDeclarationSyntax Decl, ITypeSymbol Type)> Variables, IReadOnlyCollection<CSharpSyntaxNode> Methods)> SplitVariableDeclarations(
62+
public async Task<(IReadOnlyCollection<(VariableDeclarationSyntax Decl, ITypeSymbol Type)> Variables, IReadOnlyCollection<CSharpSyntaxNode> Methods)> SplitVariableDeclarationsAsync(
6363
VariableDeclaratorSyntax declarator, HashSet<ILocalSymbol> symbolsToSkip = null, bool preferExplicitType = false)
6464
{
6565
var vbInitValue = GetInitializerToConvert(declarator);
@@ -85,7 +85,7 @@ public CommonConversions(Document document, SemanticModel semanticModel,
8585
var declaredSymbol = _semanticModel.GetDeclaredSymbol(name);
8686
if (symbolsToSkip?.Contains(declaredSymbol) == true) continue;
8787
var declaredSymbolType = declaredSymbol.GetSymbolType();
88-
var equalsValueClauseSyntax = await ConvertEqualsValueClauseSyntax(declarator, name, vbInitValue, declaredSymbolType, declaredSymbol, initializerOrMethodDecl);
88+
var equalsValueClauseSyntax = await ConvertEqualsValueClauseSyntaxAsync(declarator, name, vbInitValue, declaredSymbolType, declaredSymbol, initializerOrMethodDecl);
8989
var v = SyntaxFactory.VariableDeclarator(ConvertIdentifier(name.Identifier), null, equalsValueClauseSyntax);
9090
string k = declaredSymbolType?.GetFullMetadataName() ?? name.ToString();//Use likely unique key if the type symbol isn't available
9191

@@ -119,7 +119,7 @@ public bool ShouldPreferExplicitType(VBSyntax.ExpressionSyntax exp,
119119
return shouldPreferExplicitType;
120120
}
121121

122-
private async Task<EqualsValueClauseSyntax> ConvertEqualsValueClauseSyntax(
122+
private async Task<EqualsValueClauseSyntax> ConvertEqualsValueClauseSyntaxAsync(
123123
VariableDeclaratorSyntax vbDeclarator, VBSyntax.ModifiedIdentifierSyntax vbName,
124124
VBSyntax.ExpressionSyntax vbInitValue,
125125
ITypeSymbol declaredSymbolType,
@@ -132,7 +132,7 @@ private async Task<EqualsValueClauseSyntax> ConvertEqualsValueClauseSyntax(
132132
declaredSymbol is ILocalSymbol localSymbol && localSymbol.IsConst;
133133

134134
EqualsValueClauseSyntax equalsValueClauseSyntax;
135-
if (await GetInitializerFromNameAndType(declaredSymbolType, vbName, initializerOrMethodDecl) is ExpressionSyntax
135+
if (await GetInitializerFromNameAndTypeAsync(declaredSymbolType, vbName, initializerOrMethodDecl) is ExpressionSyntax
136136
adjustedInitializerExpr)
137137
{
138138
var convertedInitializer = vbInitValue != null
@@ -210,7 +210,7 @@ public TypeSyntax GetTypeSyntax(ITypeSymbol typeSymbol, bool useImplicitType = f
210210

211211
/// <summary>
212212
/// Semantic model merges the symbols, but the compiled form retains multiple namespaces, which (when referenced from C#) need to keep the correct casing.
213-
/// <seealso cref="DeclarationNodeVisitor.WithDeclarationCasing(VBSyntax.NamespaceBlockSyntax, ISymbol)"/>
213+
/// <seealso cref="DeclarationNodeVisitor.WithDeclarationCasingAsync(VBSyntax.NamespaceBlockSyntax, ISymbol)"/>
214214
/// <seealso cref="CommonConversions.WithDeclarationCasing(SyntaxToken, ISymbol, string)"/>
215215
/// </summary>
216216
private static TypeSyntax WithDeclarationCasing(TypeSyntax syntax, ITypeSymbol typeSymbol)
@@ -234,7 +234,7 @@ private static VBSyntax.ExpressionSyntax GetInitializerToConvert(VariableDeclara
234234
) ?? declarator.Initializer?.Value;
235235
}
236236

237-
private async Task<CSharpSyntaxNode> GetInitializerFromNameAndType(ITypeSymbol typeSymbol,
237+
private async Task<CSharpSyntaxNode> GetInitializerFromNameAndTypeAsync(ITypeSymbol typeSymbol,
238238
VBSyntax.ModifiedIdentifierSyntax name, CSharpSyntaxNode initializer)
239239
{
240240
if (!SyntaxTokenExtensions.IsKind(name.Nullable, SyntaxKind.None))
@@ -245,10 +245,10 @@ private async Task<CSharpSyntaxNode> GetInitializerFromNameAndType(ITypeSymbol t
245245
}
246246
}
247247

248-
var rankSpecifiers = await ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds, false);
248+
var rankSpecifiers = await ConvertArrayRankSpecifierSyntaxesAsync(name.ArrayRankSpecifiers, name.ArrayBounds, false);
249249
if (rankSpecifiers.Count > 0)
250250
{
251-
var rankSpecifiersWithSizes = await ConvertArrayRankSpecifierSyntaxes(name.ArrayRankSpecifiers, name.ArrayBounds);
251+
var rankSpecifiersWithSizes = await ConvertArrayRankSpecifierSyntaxesAsync(name.ArrayRankSpecifiers, name.ArrayBounds);
252252
var arrayTypeSyntax = ((ArrayTypeSyntax)GetTypeSyntax(typeSymbol)).WithRankSpecifiers(rankSpecifiersWithSizes);
253253
if (rankSpecifiersWithSizes.SelectMany(ars => ars.Sizes).Any(e => !e.IsKind(CSSyntaxKind.OmittedArraySizeExpression))) {
254254
initializer = SyntaxFactory.ArrayCreationExpression(arrayTypeSyntax);
@@ -299,7 +299,7 @@ public SyntaxToken ConvertIdentifier(SyntaxToken id, bool isAttribute = false, S
299299

300300
/// <summary>
301301
/// Semantic model merges the symbols, but the compiled form retains multiple namespaces, which (when referenced from C#) need to keep the correct casing.
302-
/// <seealso cref="DeclarationNodeVisitor.WithDeclarationCasing(VBSyntax.NamespaceBlockSyntax, ISymbol)"/>
302+
/// <seealso cref="DeclarationNodeVisitor.WithDeclarationCasingAsync(VBSyntax.NamespaceBlockSyntax, ISymbol)"/>
303303
/// <seealso cref="CommonConversions.WithDeclarationCasing(TypeSyntax, ITypeSymbol)"/>
304304
/// </summary>
305305
private static string WithDeclarationCasing(SyntaxToken id, ISymbol idSymbol, string text)
@@ -451,47 +451,47 @@ public bool IsConversionOperator(SyntaxToken token)
451451
return isConvOp;
452452
}
453453

454-
internal async Task<SyntaxList<ArrayRankSpecifierSyntax>> ConvertArrayRankSpecifierSyntaxes(
454+
internal async Task<SyntaxList<ArrayRankSpecifierSyntax>> ConvertArrayRankSpecifierSyntaxesAsync(
455455
SyntaxList<VBSyntax.ArrayRankSpecifierSyntax> arrayRankSpecifierSyntaxs,
456456
ArgumentListSyntax nodeArrayBounds, bool withSizes = true)
457457
{
458458
var bounds = SyntaxFactory.List(await arrayRankSpecifierSyntaxs.SelectAsync(async r => (ArrayRankSpecifierSyntax) await r.AcceptAsync(TriviaConvertingExpressionVisitor)));
459459

460460
if (nodeArrayBounds != null) {
461-
ArrayRankSpecifierSyntax arrayRankSpecifierSyntax = await ConvertArrayBounds(nodeArrayBounds, withSizes);
461+
ArrayRankSpecifierSyntax arrayRankSpecifierSyntax = await ConvertArrayBoundsAsync(nodeArrayBounds, withSizes);
462462
bounds = bounds.Insert(0, arrayRankSpecifierSyntax);
463463
}
464464

465465
return bounds;
466466
}
467467

468-
public async Task<ArrayRankSpecifierSyntax> ConvertArrayBounds(ArgumentListSyntax nodeArrayBounds, bool withSizes = true)
468+
public async Task<ArrayRankSpecifierSyntax> ConvertArrayBoundsAsync(ArgumentListSyntax nodeArrayBounds, bool withSizes = true)
469469
{
470470
SeparatedSyntaxList<VBSyntax.ArgumentSyntax> arguments = nodeArrayBounds.Arguments;
471471
var sizesSpecified = arguments.Any(a => !a.IsOmitted);
472472
var rank = arguments.Count;
473473
if (!sizesSpecified) rank += 1;
474474

475-
var convertedArrayBounds = withSizes && sizesSpecified ? await ConvertArrayBounds(arguments)
475+
var convertedArrayBounds = withSizes && sizesSpecified ? await ConvertArrayBoundsAsync(arguments)
476476
: Enumerable.Repeat(SyntaxFactory.OmittedArraySizeExpression(), rank);
477477
var arrayRankSpecifierSyntax = SyntaxFactory.ArrayRankSpecifier(
478478
SyntaxFactory.SeparatedList(
479479
convertedArrayBounds));
480480
return arrayRankSpecifierSyntax;
481481
}
482482

483-
private async Task<IEnumerable<ExpressionSyntax>> ConvertArrayBounds(SeparatedSyntaxList<VBSyntax.ArgumentSyntax> arguments)
483+
private async Task<IEnumerable<ExpressionSyntax>> ConvertArrayBoundsAsync(SeparatedSyntaxList<VBSyntax.ArgumentSyntax> arguments)
484484
{
485485
return await arguments.SelectAsync(a => {
486486
VBSyntax.ExpressionSyntax upperBoundExpression = a is VBSyntax.SimpleArgumentSyntax sas ? sas.Expression
487487
: a is VBSyntax.RangeArgumentSyntax ras ? ras.UpperBound
488488
: throw new ArgumentOutOfRangeException(nameof(a), a, null);
489489

490-
return IncreaseArrayUpperBoundExpression(upperBoundExpression);
490+
return IncreaseArrayUpperBoundExpressionAsync(upperBoundExpression);
491491
});
492492
}
493493

494-
private async Task<ExpressionSyntax> IncreaseArrayUpperBoundExpression(VBSyntax.ExpressionSyntax expr)
494+
private async Task<ExpressionSyntax> IncreaseArrayUpperBoundExpressionAsync(VBSyntax.ExpressionSyntax expr)
495495
{
496496
var op = _semanticModel.GetOperation(expr);
497497
var constant = op.ConstantValue;
@@ -510,12 +510,12 @@ private async Task<ExpressionSyntax> IncreaseArrayUpperBoundExpression(VBSyntax.
510510
convertedExpression, SyntaxFactory.Token(CSSyntaxKind.PlusToken), SyntaxFactory.LiteralExpression(CSSyntaxKind.NumericLiteralExpression, SyntaxFactory.Literal(1)));
511511
}
512512

513-
public async Task<SyntaxList<CSSyntax.AttributeListSyntax>> ConvertAttributes(SyntaxList<VBSyntax.AttributeListSyntax> attributeListSyntaxs)
513+
public async Task<SyntaxList<CSSyntax.AttributeListSyntax>> ConvertAttributesAsync(SyntaxList<VBSyntax.AttributeListSyntax> attributeListSyntaxs)
514514
{
515-
return SyntaxFactory.List(await attributeListSyntaxs.SelectManyAsync(ConvertAttribute));
515+
return SyntaxFactory.List(await attributeListSyntaxs.SelectManyAsync(ConvertAttributeAsync));
516516
}
517517

518-
public async Task<IEnumerable<CSSyntax.AttributeListSyntax>> ConvertAttribute(VBSyntax.AttributeListSyntax attributeList)
518+
public async Task<IEnumerable<CSSyntax.AttributeListSyntax>> ConvertAttributeAsync(VBSyntax.AttributeListSyntax attributeList)
519519
{
520520
// These attributes' semantic effects are expressed differently in CSharp.
521521
return await attributeList.Attributes.Where(a => !IsExtensionAttribute(a) && !IsOutAttribute(a))
@@ -550,7 +550,7 @@ public static CSSyntax.VariableDeclaratorSyntax CreateVariableDeclarator(string
550550
return variableDeclaratorSyntax;
551551
}
552552

553-
public async Task<(string, ExpressionSyntax extraArg)> GetParameterizedPropertyAccessMethod(IOperation operation)
553+
public async Task<(string, ExpressionSyntax extraArg)> GetParameterizedPropertyAccessMethodAsync(IOperation operation)
554554
{
555555
if (operation is IPropertyReferenceOperation pro && pro.Arguments.Any() &&
556556
!VBasic.VisualBasicExtensions.IsDefault(pro.Property)) {

0 commit comments

Comments
 (0)