-
Notifications
You must be signed in to change notification settings - Fork 4k
/
AwaitExpressionInfo.cs
51 lines (41 loc) · 1.72 KB
/
AwaitExpressionInfo.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using System.Diagnostics;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp
{
/// <summary>
/// Structure containing all semantic information about an await expression.
/// </summary>
public struct AwaitExpressionInfo : IEquatable<AwaitExpressionInfo>
{
private readonly AwaitableInfo _awaitableInfo;
public IMethodSymbol GetAwaiterMethod => _awaitableInfo?.GetAwaiter;
public IPropertySymbol IsCompletedProperty => _awaitableInfo?.IsCompleted;
public IMethodSymbol GetResultMethod => _awaitableInfo?.GetResult;
public bool IsDynamic => _awaitableInfo?.IsDynamic == true;
internal AwaitExpressionInfo(AwaitableInfo awaitableInfo)
{
Debug.Assert(awaitableInfo != null);
_awaitableInfo = awaitableInfo;
}
public override bool Equals(object obj)
{
return obj is AwaitExpressionInfo otherAwait && Equals(otherAwait);
}
public bool Equals(AwaitExpressionInfo other)
{
return object.Equals(this.GetAwaiterMethod, other.GetAwaiterMethod)
&& object.Equals(this.IsCompletedProperty, other.IsCompletedProperty)
&& object.Equals(this.GetResultMethod, other.GetResultMethod);
}
public override int GetHashCode()
{
if (_awaitableInfo is null)
{
return 0;
}
return Hash.Combine(GetAwaiterMethod, Hash.Combine(IsCompletedProperty, GetResultMethod.GetHashCode()));
}
}
}