1 instantiation of ControlFlowGraph
Microsoft.CodeAnalysis (1)
Operations\ControlFlowGraphBuilder.cs (1)
167return new ControlFlowGraph(body, parent, builder._captureIdDispenser, ToImmutableBlocksAndFree(blocks), region,
559 references to ControlFlowGraph
GenerateDocumentationAndConfigFiles (53)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
269/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 285public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 287var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 298return ControlFlowGraph.Create(blockOperation); 301return ControlFlowGraph.Create(methodBodyOperation); 304return ControlFlowGraph.Create(constructorBodyOperation); 307return ControlFlowGraph.Create(fieldInitializerOperation); 310return ControlFlowGraph.Create(propertyInitializerOperation);
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
ILLink.RoslynAnalyzer (18)
DataFlow\ControlFlowGraphExtensions.cs (4)
15public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 22public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 29public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 32public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
DataFlow\ControlFlowGraphProxy.cs (1)
48public readonly record struct ControlFlowGraphProxy(ControlFlowGraph ControlFlowGraph) : IControlFlowGraph<BlockProxy, RegionProxy>
DataFlow\LocalDataFlowAnalysis.cs (3)
109var cfg = Context.GetControlFlowGraph(attribute); 117var cfg = method.ControlFlowGraph; 130ControlFlowGraph methodCFG,
DataFlow\LocalDataFlowVisitor.cs (5)
45private readonly ControlFlowGraph ControlFlowGraph; 63ControlFlowGraph cfg, 684var localFunctionCFG = ControlFlowGraph.GetLocalFunctionControlFlowGraphInScope(localFunction); 837var lambdaCFG = ControlFlowGraph.GetAnonymousFunctionControlFlowGraphInScope(operation); 976var localFunctionCFG = ControlFlowGraph.GetLocalFunctionControlFlowGraphInScope(localFunction);
DataFlow\LValueFlowCaptureProvider.cs (1)
51public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
DataFlow\MethodBodyValue.cs (2)
19public ControlFlowGraph ControlFlowGraph { get; } 21public MethodBodyValue(ISymbol owningSymbol, ControlFlowGraph cfg)
TrimAnalysis\TrimAnalysisVisitor.cs (1)
53ControlFlowGraph methodCFG,
TrimAnalysis\TrimDataFlowAnalysis.cs (1)
62ControlFlowGraph methodCFG,
Microsoft.CodeAnalysis (86)
DiagnosticAnalyzer\AnalyzerExecutor.cs (5)
65private Func<IOperation, ControlFlowGraph>? _lazyGetControlFlowGraph; 67private ConcurrentDictionary<IOperation, ControlFlowGraph>? _lazyControlFlowGraphMap; 69private Func<IOperation, ControlFlowGraph> GetControlFlowGraph 1663private ControlFlowGraph GetControlFlowGraphImpl(IOperation operation) 1669Interlocked.CompareExchange(ref _lazyControlFlowGraphMap, new ConcurrentDictionary<IOperation, ControlFlowGraph>(), null);
DiagnosticAnalyzer\DiagnosticAnalysisContext.cs (12)
1240private readonly Func<IOperation, ControlFlowGraph>? _getControlFlowGraph; 1305Func<IOperation, ControlFlowGraph>? getControlFlowGraph, 1351/// Gets a <see cref="ControlFlowGraph"/> for a given <paramref name="operationBlock"/> from this analysis context's <see cref="OperationBlocks"/>. 1354public ControlFlowGraph GetControlFlowGraph(IOperation operationBlock) 1382private readonly Func<IOperation, ControlFlowGraph>? _getControlFlowGraph; 1451Func<IOperation, ControlFlowGraph>? getControlFlowGraph, 1484/// Gets a <see cref="ControlFlowGraph"/> for a given <paramref name="operationBlock"/> from this analysis context's <see cref="OperationBlocks"/>. 1487public ControlFlowGraph GetControlFlowGraph(IOperation operationBlock) 1776private readonly Func<IOperation, ControlFlowGraph>? _getControlFlowGraph; 1841Func<IOperation, ControlFlowGraph>? getControlFlowGraph, 1873/// Gets a <see cref="ControlFlowGraph"/> for the operation block containing the <see cref="Operation"/>. 1875public ControlFlowGraph GetControlFlowGraph() => DiagnosticAnalysisContextHelpers.GetControlFlowGraph(Operation, _getControlFlowGraph, _cancellationToken);
DiagnosticAnalyzer\DiagnosticAnalysisContextHelpers.cs (3)
171internal static ControlFlowGraph GetControlFlowGraph(IOperation operation, Func<IOperation, ControlFlowGraph>? getControlFlowGraph, CancellationToken cancellationToken) 176ControlFlowGraph.CreateCore(rootOperation, nameof(rootOperation), cancellationToken);
DiagnosticAnalyzer\DiagnosticStartAnalysisScope.cs (1)
341Func<IOperation, ControlFlowGraph> getControlFlowGraph,
Generated\FlowAnalysis.Generated.cs (7)
17/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 41/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 86/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 103/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 121/// Represents an anonymous function operation in context of a <see cref="ControlFlowGraph" />. 129/// A <see cref="ControlFlowGraph" /> for the body of the anonymous function is available from 130/// the enclosing <see cref="ControlFlowGraph" />.
Operations\BasicBlock.cs (3)
11/// Represents a basic block in a <see cref="ControlFlowGraph"/> with a sequence of <see cref="Operations"/>. 119/// Unique ordinal for each basic block in a <see cref="ControlFlowGraph"/>, 120/// which can be used to index into <see cref="ControlFlowGraph.Blocks"/> array.
Operations\BasicBlockKind.cs (5)
13/// Indicates an entry block for a <see cref="ControlFlowGraph"/>, 14/// which is always the first block in <see cref="ControlFlowGraph.Blocks"/>. 19/// Indicates an exit block for a <see cref="ControlFlowGraph"/>, 20/// which is always the last block in <see cref="ControlFlowGraph.Blocks"/>. 25/// Indicates an intermediate block for a <see cref="ControlFlowGraph"/>.
Operations\ControlFlowBranch.cs (1)
14/// basic block in a <see cref="ControlFlowGraph"/>.
Operations\ControlFlowGraph.cs (35)
28private ControlFlowGraph?[]? _lazyLocalFunctionsGraphs; 30private ControlFlowGraph?[]? _lazyAnonymousFunctionsGraphs; 33ControlFlowGraph? parent, 74/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block root <paramref name="node"/>. 81/// Otherwise, returns a <see cref="ControlFlowGraph"/> for the executable code block. 83public static ControlFlowGraph? Create(SyntaxNode node, SemanticModel semanticModel, CancellationToken cancellationToken = default) 101/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="body"/>. 105public static ControlFlowGraph Create(Operations.IBlockOperation body, CancellationToken cancellationToken = default) 111/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="initializer"/>. 115public static ControlFlowGraph Create(Operations.IFieldInitializerOperation initializer, CancellationToken cancellationToken = default) 121/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="initializer"/>. 125public static ControlFlowGraph Create(Operations.IPropertyInitializerOperation initializer, CancellationToken cancellationToken = default) 131/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="initializer"/>. 135public static ControlFlowGraph Create(Operations.IParameterInitializerOperation initializer, CancellationToken cancellationToken = default) 141/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="attribute"/>. 145public static ControlFlowGraph Create(Operations.IAttributeOperation attribute, CancellationToken cancellationToken = default) 151/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="constructorBody"/>. 155public static ControlFlowGraph Create(Operations.IConstructorBodyOperation constructorBody, CancellationToken cancellationToken = default) 161/// Creates a <see cref="ControlFlowGraph"/> for the given executable code block <paramref name="methodBody"/>. 165public static ControlFlowGraph Create(Operations.IMethodBodyOperation methodBody, CancellationToken cancellationToken = default) 171internal static ControlFlowGraph CreateCore(IOperation operation, string argumentNameForException, CancellationToken cancellationToken) 190ControlFlowGraph controlFlowGraph = ControlFlowGraphBuilder.Create(operation); 207public ControlFlowGraph? Parent { get; } 227public ControlFlowGraph GetLocalFunctionControlFlowGraph(IMethodSymbol localFunction, CancellationToken cancellationToken = default) 236if (!TryGetLocalFunctionControlFlowGraph(localFunction, out var controlFlowGraph)) 244internal bool TryGetLocalFunctionControlFlowGraph(IMethodSymbol localFunction, [NotNullWhen(true)] out ControlFlowGraph? controlFlowGraph) 256Interlocked.CompareExchange(ref _lazyLocalFunctionsGraphs, new ControlFlowGraph[LocalFunctions.Length], null); 259ref ControlFlowGraph? localFunctionGraph = ref _lazyLocalFunctionsGraphs[info.ordinal]; 263ControlFlowGraph graph = ControlFlowGraphBuilder.Create(info.operation, this, info.enclosing, _captureIdDispenser); 276public ControlFlowGraph GetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation anonymousFunction, CancellationToken cancellationToken = default) 285if (!TryGetAnonymousFunctionControlFlowGraph(anonymousFunction, out ControlFlowGraph? controlFlowGraph)) 293internal bool TryGetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation anonymousFunction, [NotNullWhen(true)] out ControlFlowGraph? controlFlowGraph) 303Interlocked.CompareExchange(ref _lazyAnonymousFunctionsGraphs, new ControlFlowGraph[_anonymousFunctionsMap.Count], null); 306ref ControlFlowGraph? anonymousFlowGraph = ref _lazyAnonymousFunctionsGraphs[info.ordinal]; 310ControlFlowGraph graph = ControlFlowGraphBuilder.Create(anonymous.Original, this, info.enclosing, _captureIdDispenser, in anonymous.Context);
Operations\ControlFlowGraphBuilder.cs (2)
87public static ControlFlowGraph Create(IOperation body, ControlFlowGraph? parent = null, ControlFlowRegion? enclosing = null, CaptureIdDispenser? captureIdDispenser = null, in Context context = default)
Operations\ControlFlowGraphExtensions.cs (8)
17public static ControlFlowGraph GetLocalFunctionControlFlowGraphInScope(this ControlFlowGraph controlFlowGraph, IMethodSymbol localFunction, CancellationToken cancellationToken = default) 30ControlFlowGraph? currentGraph = controlFlowGraph; 33if (currentGraph.TryGetLocalFunctionControlFlowGraph(localFunction, out ControlFlowGraph? localFunctionControlFlowGraph)) 48public static ControlFlowGraph GetAnonymousFunctionControlFlowGraphInScope(this ControlFlowGraph controlFlowGraph, IFlowAnonymousFunctionOperation anonymousFunction, CancellationToken cancellationToken = default) 61ControlFlowGraph? currentGraph = controlFlowGraph; 64if (currentGraph.TryGetAnonymousFunctionControlFlowGraph(anonymousFunction, out ControlFlowGraph? localFunctionControlFlowGraph))
Operations\ControlFlowRegion.cs (1)
12/// Encapsulates information about regions of <see cref="BasicBlock"/>s in a <see cref="ControlFlowGraph"/>.
Operations\ControlFlowRegionKind.cs (2)
10/// Defines kinds of regions that can be present in a <see cref="ControlFlowGraph"/> 15/// A root region encapsulating all <see cref="BasicBlock"/>s in a <see cref="ControlFlowGraph"/>
Operations\IOperation.cs (1)
76/// Null for operations inside a <see cref="FlowAnalysis.ControlFlowGraph"/>.
Microsoft.CodeAnalysis.Analyzers (53)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
269/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 285public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 287var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 298return ControlFlowGraph.Create(blockOperation); 301return ControlFlowGraph.Create(methodBodyOperation); 304return ControlFlowGraph.Create(constructorBodyOperation); 307return ControlFlowGraph.Create(fieldInitializerOperation); 310return ControlFlowGraph.Create(propertyInitializerOperation);
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Microsoft.CodeAnalysis.AnalyzerUtilities (157)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
269/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 285public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 287var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 298return ControlFlowGraph.Create(blockOperation); 301return ControlFlowGraph.Create(methodBodyOperation); 304return ControlFlowGraph.Create(constructorBodyOperation); 307return ControlFlowGraph.Create(fieldInitializerOperation); 310return ControlFlowGraph.Create(propertyInitializerOperation);
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\BasicBlockExtensions.cs (3)
16internal static IEnumerable<(BasicBlock predecessorBlock, BranchWithInfo branchWithInfo)> GetPredecessorsWithBranches(this BasicBlock basicBlock, ControlFlowGraph cfg) 126public static bool IsFirstBlockOfCompilerGeneratedFinally(this BasicBlock basicBlock, ControlFlowGraph cfg) 175internal static bool DominatesPredecessors(this BasicBlock? basicBlock, ControlFlowGraph cfg)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowGraphExtensions.cs (3)
12public static BasicBlock GetEntry(this ControlFlowGraph cfg) => cfg.Blocks.Single(b => b.Kind == BasicBlockKind.Entry); 13public static BasicBlock GetExit(this ControlFlowGraph cfg) => cfg.Blocks.Single(b => b.Kind == BasicBlockKind.Exit); 15internal static bool SupportsFlowAnalysis(this ControlFlowGraph cfg)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowRegionExtensions.cs (1)
15public static IEnumerable<IOperation> DescendantOperations(this ControlFlowRegion controlFlowRegion, ControlFlowGraph cfg)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\IOperationExtensions_FlowAnalysis.cs (1)
14public static bool IsInsideCatchRegion([NotNullWhen(returnValue: true)] this IOperation? operation, ControlFlowGraph cfg)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\OperationBlocksExtensions.cs (2)
13public static ControlFlowGraph? GetControlFlowGraph(this ImmutableArray<IOperation> operationBlocks) 17if (operationRoot.TryGetEnclosingControlFlowGraph(out var cfg))
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.cs (1)
29ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysisContext.cs (4)
25ControlFlowGraph controlFlowGraph, 33ControlFlowGraph? parentControlFlowGraph, 45ControlFlowGraph controlFlowGraph, 62ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.cs (2)
37ControlFlowGraph cfg, 82ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisContext.cs (4)
29ControlFlowGraph controlFlowGraph, 41ControlFlowGraph? parentControlFlowGraph, 67ControlFlowGraph controlFlowGraph, 93ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisHelper.cs (1)
135var cfg = operationBlocks.GetControlFlowGraph();
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysis.cs (3)
21/// Dataflow analysis to track set of global <see cref="IAbstractAnalysisValue"/>s enabled on each control flow path at each <see cref="IOperation"/> in the <see cref="ControlFlowGraph"/>. 59ControlFlowGraph cfg, 89ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysisContext.cs (4)
29ControlFlowGraph controlFlowGraph, 37ControlFlowGraph? parentControlFlowGraph, 57ControlFlowGraph controlFlowGraph, 76ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysis.cs (3)
43var cfg = topmostBlock.GetEnclosingControlFlowGraph(); 59ControlFlowGraph cfg, 86ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysisContext.cs (4)
28ControlFlowGraph controlFlowGraph, 36ControlFlowGraph? parentControlFlowGraph, 52ControlFlowGraph controlFlowGraph, 70ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.cs (2)
31ControlFlowGraph cfg, 48ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysisContext.cs (4)
26ControlFlowGraph controlFlowGraph, 35ControlFlowGraph? parentControlFlowGraph, 52ControlFlowGraph controlFlowGraph, 70ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysis.cs (3)
50ControlFlowGraph cfg, 202var success = Operation.TryGetEnclosingControlFlowGraph(out ControlFlowGraph? enclosingControlFlowGraph); 245PropertySetAnalysisResult? InvokeDfaAndAccumulateResults(ControlFlowGraph cfg, ISymbol owningSymbol)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysisContext.cs (4)
31ControlFlowGraph controlFlowGraph, 39ControlFlowGraph? parentControlFlowGraph, 74ControlFlowGraph controlFlowGraph, 109ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysis.cs (2)
29ControlFlowGraph cfg, 45ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysisContext.cs (4)
26ControlFlowGraph controlFlowGraph, 35ControlFlowGraph? parentControlFlowGraph, 68ControlFlowGraph controlFlowGraph, 104ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.cs (3)
30ControlFlowGraph cfg, 44ControlFlowGraph cfg, 79ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysisContext.cs (4)
27ControlFlowGraph controlFlowGraph, 37ControlFlowGraph? parentControlFlowGraph, 55ControlFlowGraph controlFlowGraph, 76ControlFlowGraph invokedCfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractDataFlowAnalysisContext.cs (7)
31ControlFlowGraph controlFlowGraph, 42ControlFlowGraph? parentControlFlowGraph, 78public ControlFlowGraph ControlFlowGraph { get; } 90protected ControlFlowGraph? ParentControlFlowGraph { get; } 98ControlFlowGraph invokedCfg, 104public ControlFlowGraph? GetLocalFunctionControlFlowGraph(IMethodSymbol localFunction) 130public ControlFlowGraph? GetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation lambda)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityFactory.cs (2)
28private readonly ControlFlowGraph _controlFlowGraph; 44ControlFlowGraph controlFlowGraph,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysis.cs (3)
57var cfg = analysisContext.ControlFlowGraph; 183ControlFlowGraph cfg, 801private static bool ComputeLoopRangeMap(ControlFlowGraph cfg, PooledDictionary<int, int> loopRangeMap)
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResult.cs (2)
47ControlFlowGraph cfg, 208public ControlFlowGraph ControlFlowGraph { get; }
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResultBuilder.cs (1)
58ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowOperationVisitor.cs (14)
126/// Dictionary from interprocedural method symbols invoked to their corresponding <see cref="ControlFlowGraph"/>. 128private readonly Dictionary<IMethodSymbol, ControlFlowGraph?>? _interproceduralMethodToCfgMap; 2202Func<ControlFlowGraph?> getCfg, 2256var cfg = pointsToAnalysisResult?.ControlFlowGraph ?? 2595ControlFlowGraph cfg, 2643var cfg = pointsToAnalysisResult?.ControlFlowGraph ?? 2693var cfg = pointsToAnalysisResult?.ControlFlowGraph ?? 2733ControlFlowGraph cfg, 3163ControlFlowGraph? getCfg() => GetInterproceduralControlFlowGraph(method); 3541ControlFlowGraph? getCfg() => GetInterproceduralControlFlowGraph(method); 3547private ControlFlowGraph? GetInterproceduralControlFlowGraph(IMethodSymbol method) 3556if (!_interproceduralMethodToCfgMap.TryGetValue(method, out var cfg)) 3582ControlFlowGraph? getCfg() => DataFlowAnalysisContext.GetLocalFunctionControlFlowGraph(localFunction); 3600ControlFlowGraph? getCfg() => DataFlowAnalysisContext.GetAnonymousFunctionControlFlowGraph(lambda);
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\IDataFlowAnalysisContext.cs (3)
13ControlFlowGraph ControlFlowGraph { get; } 15ControlFlowGraph? GetLocalFunctionControlFlowGraph(IMethodSymbol localFunction); 16ControlFlowGraph? GetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation lambda);
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\IDataFlowAnalysisResult.cs (1)
13ControlFlowGraph ControlFlowGraph { get; }
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralAnalysisConfiguration.cs (2)
44ControlFlowGraph cfg, 84ControlFlowGraph cfg,
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralAnalysisData.cs (2)
39Func<IMethodSymbol, ControlFlowGraph?> getInterproceduralControlFlowGraph, 66public Func<IMethodSymbol, ControlFlowGraph?> GetInterproceduralControlFlowGraph { get; }
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralCaptureId.cs (2)
17internal InterproceduralCaptureId(CaptureId captureId, ControlFlowGraph controlFlowGraph, bool isLValueFlowCapture) 25public ControlFlowGraph ControlFlowGraph { get; }
src\roslyn\src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\LValueFlowCapturesProvider.cs (3)
23private static readonly ConditionalWeakTable<ControlFlowGraph, ImmutableHashSet<CaptureId>> s_lValueFlowCapturesCache = new(); 25public static ImmutableHashSet<CaptureId> GetOrCreateLValueFlowCaptures(ControlFlowGraph cfg) 28private static ImmutableHashSet<CaptureId> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Microsoft.CodeAnalysis.CodeStyle (43)
src\roslyn\src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (1)
518var controlFlowGraph = context.GetControlFlowGraph(operationBlock);
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Microsoft.CodeAnalysis.Features (1)
src\roslyn\src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (1)
518var controlFlowGraph = context.GetControlFlowGraph(operationBlock);
Microsoft.CodeAnalysis.ResxSourceGenerator (53)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
269/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 285public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 287var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 298return ControlFlowGraph.Create(blockOperation); 301return ControlFlowGraph.Create(methodBodyOperation); 304return ControlFlowGraph.Create(constructorBodyOperation); 307return ControlFlowGraph.Create(fieldInitializerOperation); 310return ControlFlowGraph.Create(propertyInitializerOperation);
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Microsoft.CodeAnalysis.Workspaces (42)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Roslyn.Diagnostics.Analyzers (53)
src\roslyn\src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
269/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 285public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 287var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 298return ControlFlowGraph.Create(blockOperation); 301return ControlFlowGraph.Create(methodBodyOperation); 304return ControlFlowGraph.Create(constructorBodyOperation); 307return ControlFlowGraph.Create(fieldInitializerOperation); 310return ControlFlowGraph.Create(propertyInitializerOperation);
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (4)
13public static BasicBlock EntryBlock(this ControlFlowGraph cfg) 20public static BasicBlock ExitBlock(this ControlFlowGraph cfg) 27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 30public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
15/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="ControlFlowGraph"/>
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
26public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25private DataFlowAnalyzer(ControlFlowGraph cfg, ISymbol owningSymbol) 29ControlFlowGraph cfg, 40public static SymbolUsageResult RunAnalysis(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken) 53ControlFlowGraph cfg,
src\roslyn\src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36private readonly Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation; 55private readonly PooledDictionary<IMethodSymbol, ControlFlowGraph> _localFunctionTargetsToAccessingCfgMap; 62private readonly PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _lambdaTargetsToAccessingCfgMap; 72ControlFlowGraph controlFlowGraph, 80Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation, 82PooledDictionary<IMethodSymbol, ControlFlowGraph> localFunctionTargetsToAccessingCfgMap, 83PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> lambdaTargetsToAccessingCfgMap) 117ControlFlowGraph cfg, 119Func<IMethodSymbol, ControlFlowGraph, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation) 136localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 137lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 156ControlFlowGraph cfg, 181ControlFlowGraph cfg) 192public ControlFlowGraph ControlFlowGraph { get; } 202private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 254ControlFlowGraph cfg, 276var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 293ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 317void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 324ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 326if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 328var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 336ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 343if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 345var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 507if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 512var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 519if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 524var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);