diff --git a/src/D2L.CodeStyle.Analyzers/Async/Generator/AsyncToSyncMethodTransformer.cs b/src/D2L.CodeStyle.Analyzers/Async/Generator/AsyncToSyncMethodTransformer.cs index c2bfbc56..68b22ff2 100644 --- a/src/D2L.CodeStyle.Analyzers/Async/Generator/AsyncToSyncMethodTransformer.cs +++ b/src/D2L.CodeStyle.Analyzers/Async/Generator/AsyncToSyncMethodTransformer.cs @@ -20,7 +20,6 @@ CancellationToken token private bool m_removeAsyncAnywhere; public TransformResult Transform( MethodDeclarationSyntax decl ) { - // TODO: remove CancellationToken parameters decl = decl.WithAttributeLists( ReplaceGenerateSyncAttribute( decl.AttributeLists ) ) .WithModifiers( RemoveAsyncModifier( decl.Modifiers ) ) .WithIdentifier( RemoveAsyncSuffix( decl.Identifier ) ) @@ -328,6 +327,13 @@ private ExpressionSyntax Transform( ExpressionSyntax expr ) AnonymousObjectCreationExpressionSyntax anonCreationExpr => anonCreationExpr .WithInitializers( TransformAnonDecls( anonCreationExpr.Initializers ) ), + ConditionalAccessExpressionSyntax condAccessExpr => condAccessExpr + .WithExpression( Transform( condAccessExpr.Expression ) ) + .WithWhenNotNull( Transform( condAccessExpr.WhenNotNull ) ), + + MemberBindingExpressionSyntax memBindExpr => memBindExpr + .WithName( Transform( memBindExpr.Name ) ), + _ => UnhandledSyntax( expr ) }; diff --git a/tests/D2L.CodeStyle.Analyzers.Test/Async/Generator/AsyncToSyncMethodTransformerTests.cs b/tests/D2L.CodeStyle.Analyzers.Test/Async/Generator/AsyncToSyncMethodTransformerTests.cs index a1a4c19f..432c7427 100644 --- a/tests/D2L.CodeStyle.Analyzers.Test/Async/Generator/AsyncToSyncMethodTransformerTests.cs +++ b/tests/D2L.CodeStyle.Analyzers.Test/Async/Generator/AsyncToSyncMethodTransformerTests.cs @@ -430,6 +430,15 @@ public void AsyncParenthesizedBlockLambda() { Assert.AreEqual( @"[Blocking] void Bar() { Create( () => { using( new Context() ) { Baz(); } } ); }", actual.Value.ToFullString() ); } + [Test] + public void ConditionalAccessExpression() { + var actual = Transform( @"[GenerateSync] async Task BarAsync() { await m_baz?.PushAsync(); }" ); + + Assert.IsTrue( actual.Success ); + Assert.IsEmpty( actual.Diagnostics ); + Assert.AreEqual( @"[Blocking] void Bar() { m_baz?.Push(); }", actual.Value.ToFullString() ); + } + [Test] public void Silly() { var actual = Transform( @"[GenerateSync]