| File: FlowAnalysis\RegionAnalysisContext.cs | Web Access |
| Project: src\roslyn\src\Compilers\CSharp\Portable\Microsoft.CodeAnalysis.CSharp.csproj (Microsoft.CodeAnalysis.CSharp) |
// 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. #nullable disable using System; using System.Diagnostics; using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.Text; namespace Microsoft.CodeAnalysis.CSharp { /// <summary> /// Represents region analysis context attributes such as compilation, region, etc... /// </summary> internal readonly struct RegionAnalysisContext { /// <summary> Compilation to use </summary> public readonly CSharpCompilation Compilation; /// <summary> Containing symbol if available, null otherwise </summary> public readonly Symbol Member; /// <summary> Bound node, not null </summary> public readonly BoundNode BoundNode; /// <summary> Region to be used </summary> public readonly BoundNode FirstInRegion, LastInRegion; /// <summary> True if the input was bad, such as no first and last nodes </summary> public readonly bool Failed; /// <summary> /// Construct context /// </summary> public RegionAnalysisContext(CSharpCompilation compilation, Symbol member, BoundNode boundNode, BoundNode firstInRegion, BoundNode lastInRegion) { this.Compilation = compilation; this.Member = member; this.BoundNode = boundNode; this.FirstInRegion = firstInRegion; this.LastInRegion = lastInRegion; this.Failed = boundNode == null || firstInRegion == null || lastInRegion == null || firstInRegion.Syntax.SpanStart > lastInRegion.Syntax.Span.End; if (!this.Failed && ReferenceEquals(firstInRegion, lastInRegion)) { switch (firstInRegion.Kind) { case BoundKind.NamespaceExpression: case BoundKind.TypeExpression: // Some bound nodes are still considered to be invalid for flow analysis this.Failed = true; break; } } } } }