Skip to content

Commit b6c3359

Browse files
authored
fix: Enabling AsyncUsageAnalyzers and fixing violations (#243)
* fix: Enabling AsyncUsageAnalyzers and fixing violations * fix: Removed experimental changes
1 parent 341ac93 commit b6c3359

13 files changed

+58
-27
lines changed

FirebaseAdmin/FirebaseAdmin/Auth/AbstractFirebaseAuth.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,8 @@ public async Task<FirebaseToken> VerifyIdTokenAsync(
313313
.ConfigureAwait(false);
314314
if (checkRevoked)
315315
{
316-
var revoked = await this.IsRevokedAsync(decodedToken, cancellationToken);
316+
var revoked = await this.IsRevokedAsync(decodedToken, cancellationToken)
317+
.ConfigureAwait(false);
317318
if (revoked)
318319
{
319320
throw new FirebaseAuthException(
@@ -701,7 +702,8 @@ public async Task<DeleteUsersResult> DeleteUsersAsync(IReadOnlyList<string> uids
701702
public async Task<UserImportResult> ImportUsersAsync(
702703
IEnumerable<ImportUserRecordArgs> users)
703704
{
704-
return await this.ImportUsersAsync(users, default(CancellationToken)).ConfigureAwait(false);
705+
return await this.ImportUsersAsync(users, default(CancellationToken))
706+
.ConfigureAwait(false);
705707
}
706708

707709
/// <summary>
@@ -726,7 +728,8 @@ public async Task<UserImportResult> ImportUsersAsync(
726728
IEnumerable<ImportUserRecordArgs> users,
727729
CancellationToken cancellationToken)
728730
{
729-
return await this.ImportUsersAsync(users, null, cancellationToken).ConfigureAwait(false);
731+
return await this.ImportUsersAsync(users, null, cancellationToken)
732+
.ConfigureAwait(false);
730733
}
731734

732735
/// <summary>
@@ -746,7 +749,8 @@ public async Task<UserImportResult> ImportUsersAsync(
746749
IEnumerable<ImportUserRecordArgs> users,
747750
UserImportOptions options)
748751
{
749-
return await this.ImportUsersAsync(users, options, default(CancellationToken)).ConfigureAwait(false);
752+
return await this.ImportUsersAsync(users, options, default(CancellationToken))
753+
.ConfigureAwait(false);
750754
}
751755

752756
/// <summary>
@@ -769,8 +773,9 @@ public async Task<UserImportResult> ImportUsersAsync(
769773
UserImportOptions options,
770774
CancellationToken cancellationToken)
771775
{
772-
var request = new UserImportRequest(users, options);
773-
return await this.UserManager.ImportUsersAsync(request, cancellationToken);
776+
var request = new UserImportRequest(users, options);
777+
return await this.UserManager.ImportUsersAsync(request, cancellationToken)
778+
.ConfigureAwait(false);
774779
}
775780

776781
/// <summary>
@@ -1227,7 +1232,7 @@ private protected TResult IfNotDeleted<TResult>(Func<TResult> func)
12271232
private protected async Task<bool> IsRevokedAsync(
12281233
FirebaseToken token, CancellationToken cancellationToken)
12291234
{
1230-
var user = await this.GetUserAsync(token.Uid, cancellationToken);
1235+
var user = await this.GetUserAsync(token.Uid, cancellationToken).ConfigureAwait(false);
12311236
var cutoff = user.TokensValidAfterTimestamp.Subtract(UserRecord.UnixEpoch)
12321237
.TotalSeconds;
12331238
return token.IssuedAtTimeSeconds < cutoff;

FirebaseAdmin/FirebaseAdmin/Auth/FirebaseAuth.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,8 @@ public async Task<FirebaseToken> VerifySessionCookieAsync(
208208
.ConfigureAwait(false);
209209
if (checkRevoked)
210210
{
211-
var revoked = await this.IsRevokedAsync(decodedToken, cancellationToken);
211+
var revoked = await this.IsRevokedAsync(decodedToken, cancellationToken)
212+
.ConfigureAwait(false);
212213
if (revoked)
213214
{
214215
throw new FirebaseAuthException(

FirebaseAdmin/FirebaseAdmin/FirebaseAdmin.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
<PackageReference Include="StyleCop.Analyzers" Version="1.1.1-beta.61">
3333
<PrivateAssets>all</PrivateAssets>
3434
</PackageReference>
35+
<PackageReference Include="AsyncUsageAnalyzers" Version="1.0.0-alpha003">
36+
<PrivateAssets>all</PrivateAssets>
37+
</PackageReference>
3538
<AdditionalFiles Include="../../stylecop.json" />
3639
</ItemGroup>
3740

FirebaseAdmin/FirebaseAdmin/HttpErrorHandler.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,4 +92,4 @@ internal class FirebaseExceptionArgs
9292
internal string ResponseBody { get; set; }
9393
}
9494
}
95-
}
95+
}

FirebaseAdmin/FirebaseAdmin/Messaging/Action.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,4 @@ internal Action(Action action)
5151
[JsonProperty("icon")]
5252
public string Icon { get; set; }
5353
}
54-
}
54+
}

FirebaseAdmin/FirebaseAdmin/Messaging/Direction.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,4 +34,4 @@ public enum Direction
3434
/// </summary>
3535
RightToLeft,
3636
}
37-
}
37+
}

FirebaseAdmin/FirebaseAdmin/Messaging/FirebaseMessagingClient.cs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -201,12 +201,15 @@ private async Task<BatchResponse> SendBatchRequestAsync(
201201
var batch = this.CreateBatchRequest(
202202
messages,
203203
dryRun,
204-
async (content, error, index, message) =>
204+
(content, error, index, message) =>
205205
{
206206
SendResponse sendResponse;
207207
if (error != null)
208208
{
209-
sendResponse = SendResponse.FromException(await this.CreateException(message).ConfigureAwait(false));
209+
var json = (error as ContentRetainingRequestError).Content;
210+
var exception = MessagingErrorHandler.Instance.HandleHttpErrorResponse(
211+
message, json);
212+
sendResponse = SendResponse.FromException(exception);
210213
}
211214
else if (content != null)
212215
{
@@ -247,13 +250,6 @@ private BatchRequest CreateBatchRequest(
247250
return batch;
248251
}
249252

250-
private async Task<FirebaseMessagingException> CreateException(HttpResponseMessage response)
251-
{
252-
var json = await response.Content.ReadAsStringAsync()
253-
.ConfigureAwait(false);
254-
return MessagingErrorHandler.Instance.HandleHttpErrorResponse(response, json);
255-
}
256-
257253
/// <summary>
258254
/// Represents the envelope message accepted by the FCM backend service, including the message
259255
/// payload and other options like <c>validate_only</c>.
@@ -300,6 +296,30 @@ public FCMClientService(Initializer initializer)
300296
public override string BasePath => null;
301297

302298
public override IList<string> Features => null;
299+
300+
public override async Task<RequestError> DeserializeError(HttpResponseMessage response)
301+
{
302+
var error = await base.DeserializeError(response).ConfigureAwait(false);
303+
304+
// Read the full response text here and add it to the RequestError so it can be
305+
// used in the batch request callback.
306+
// See https://github.com/googleapis/google-api-dotnet-client/issues/1632.
307+
var content = await response.Content.ReadAsStringAsync().ConfigureAwait(false);
308+
return new ContentRetainingRequestError(error, content);
309+
}
310+
}
311+
312+
private sealed class ContentRetainingRequestError : RequestError
313+
{
314+
internal ContentRetainingRequestError(RequestError error, string content)
315+
{
316+
this.Code = error.Code;
317+
this.Message = error.Message;
318+
this.Errors = error.Errors;
319+
this.Content = content;
320+
}
321+
322+
internal string Content { get; }
303323
}
304324

305325
private sealed class FCMClientServiceRequest : ClientServiceRequest<string>

FirebaseAdmin/FirebaseAdmin/Messaging/Priority.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,4 @@ public enum Priority
2929
/// </summary>
3030
Normal,
3131
}
32-
}
32+
}

FirebaseAdmin/FirebaseAdmin/Util/IHttpResponseDeserializer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,4 @@ internal interface IHttpResponseDeserializer
2727
/// <typeparam name="T">Type to deserialize the response into.</typeparam>
2828
T Deserialize<T>(string body);
2929
}
30-
}
30+
}

FirebaseAdmin/FirebaseAdmin/Util/RetryHttpClientInitializer.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,11 +101,11 @@ protected override async Task Wait(TimeSpan ts, CancellationToken cancellationTo
101101
{
102102
if (this.waiter != null)
103103
{
104-
await this.waiter.Wait(ts, cancellationToken);
104+
await this.waiter.Wait(ts, cancellationToken).ConfigureAwait(false);
105105
}
106106
else
107107
{
108-
await base.Wait(ts, cancellationToken);
108+
await base.Wait(ts, cancellationToken).ConfigureAwait(false);
109109
}
110110
}
111111

stylecop.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
"settings": {
44
"documentationRules": {
55
"documentInternalElements": false
6+
},
7+
"layoutRules": {
8+
"newlineAtEndOfFile": "require"
69
}
710
}
811
}

stylecop.ruleset

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<RuleSet Name="Rules for FirebaseAdmin" Description="Code analysis rules for FirebaseAdmin." ToolsVersion="14.0">
33
<Rules AnalyzerId="AsyncUsageAnalyzers" RuleNamespace="AsyncUsageAnalyzers">
44
<Rule Id="UseConfigureAwait" Action="Warning" />
5+
<Rule Id="AvoidAsyncSuffix" Action="None" />
6+
<Rule Id="UseAsyncSuffix" Action="None" />
57
</Rules>
68
<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
79
<Rule Id="SA1200" Action="None" /> <!-- Using clauses inside namespaces -->

stylecop_test.ruleset

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<RuleSet Name="Rules for FirebaseAdmin" Description="Code analysis rules for FirebaseAdmin." ToolsVersion="14.0">
3-
<Rules AnalyzerId="AsyncUsageAnalyzers" RuleNamespace="AsyncUsageAnalyzers">
4-
<Rule Id="UseConfigureAwait" Action="Warning" />
5-
</Rules>
63
<Rules AnalyzerId="StyleCop.Analyzers" RuleNamespace="StyleCop.Analyzers">
74
<Rule Id="SA1200" Action="None" /> <!-- Using clauses inside namespaces -->
85
<Rule Id="SA1402" Action="None" /> <!-- Multiple types in same file -->

0 commit comments

Comments
 (0)