File: src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ValueUsageInfo.cs
Web Access
Project: src\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
 
using System;
 
namespace Microsoft.CodeAnalysis;
 
[Flags]
internal enum ValueUsageInfo
{
    /// <summary>
    /// Represents default value indicating no usage.
    /// </summary>
    None = 0x0,
 
    /// <summary>
    /// Represents a value read.
    /// For example, reading the value of a local/field/parameter.
    /// </summary>
    Read = 0x1,
 
    /// <summary>
    /// Represents a value write.
    /// For example, assigning a value to a local/field/parameter.
    /// </summary>
    Write = 0x2,
 
    /// <summary>
    /// Represents a reference being taken for the symbol.
    /// For example, passing an argument to an "in", "ref" or "out" parameter.
    /// </summary>
    Reference = 0x4,
 
    /// <summary>
    /// Represents a name-only reference that neither reads nor writes the underlying value.
    /// For example, 'nameof(x)' or reference to a symbol 'x' in a documentation comment
    /// does not read or write the underlying value stored in 'x'.
    /// </summary>
    Name = 0x8,
 
    /// <summary>
    /// Represents a value read and/or write.
    /// For example, an increment or compound assignment operation.
    /// </summary>
    ReadWrite = Read | Write,
 
    /// <summary>
    /// Represents a readable reference being taken to the value.
    /// For example, passing an argument to an "in" or "ref readonly" parameter.
    /// </summary>
    ReadableReference = Read | Reference,
 
    /// <summary>
    /// Represents a readable reference being taken to the value.
    /// For example, passing an argument to an "out" parameter.
    /// </summary>
    WritableReference = Write | Reference,
 
    /// <summary>
    /// Represents a value read or write.
    /// For example, passing an argument to a "ref" parameter.
    /// </summary>
    ReadableWritableReference = Read | Write | Reference
}
 
internal static class ValueUsageInfoExtensions
{
    public static bool IsReadFrom(this ValueUsageInfo valueUsageInfo)
        => (valueUsageInfo & ValueUsageInfo.Read) != 0;
 
    public static bool IsWrittenTo(this ValueUsageInfo valueUsageInfo)
        => (valueUsageInfo & ValueUsageInfo.Write) != 0;
 
    public static bool IsNameOnly(this ValueUsageInfo valueUsageInfo)
        => (valueUsageInfo & ValueUsageInfo.Name) != 0;
 
    public static bool IsReference(this ValueUsageInfo valueUsageInfo)
        => (valueUsageInfo & ValueUsageInfo.Reference) != 0;
}