1 instantiation of ControlFlowGraph
Microsoft.CodeAnalysis (1)
Operations\ControlFlowGraphBuilder.cs (1)
167return new ControlFlowGraph(body, parent, builder._captureIdDispenser, ToImmutableBlocks(blocks), region,
487 references to ControlFlowGraph
ILLink.RoslynAnalyzer (18)
DataFlow\ControlFlowGraphExtensions.cs (4)
15 public static BasicBlock EntryBlock (this ControlFlowGraph cfg) 22 public static BasicBlock ExitBlock (this ControlFlowGraph cfg) 29 public static IEnumerable<IOperation> DescendantOperations (this ControlFlowGraph cfg) 32 public static IEnumerable<T> DescendantOperations<T> (this ControlFlowGraph cfg, OperationKind operationKind)
DataFlow\ControlFlowGraphProxy.cs (1)
47 public readonly record struct ControlFlowGraphProxy (ControlFlowGraph ControlFlowGraph) : IControlFlowGraph<BlockProxy, RegionProxy>
DataFlow\LocalDataFlowAnalysis.cs (3)
98 var cfg = Context.GetControlFlowGraph (attribute); 106 var cfg = method.ControlFlowGraph; 118 ControlFlowGraph methodCFG,
DataFlow\LocalDataFlowVisitor.cs (5)
45 private readonly ControlFlowGraph ControlFlowGraph; 63 ControlFlowGraph cfg, 575 var localFunctionCFG = ControlFlowGraph.GetLocalFunctionControlFlowGraphInScope (localFunction); 718 var lambdaCFG = ControlFlowGraph.GetAnonymousFunctionControlFlowGraphInScope (operation); 825 var localFunctionCFG = ControlFlowGraph.GetLocalFunctionControlFlowGraphInScope (localFunction);
DataFlow\LValueFlowCaptureProvider.cs (1)
51 public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures (ControlFlowGraph cfg)
DataFlow\MethodBodyValue.cs (2)
19 public ControlFlowGraph ControlFlowGraph { get; } 21 public MethodBodyValue (ISymbol owningSymbol, ControlFlowGraph cfg)
TrimAnalysis\TrimAnalysisVisitor.cs (1)
50 ControlFlowGraph methodCFG,
TrimAnalysis\TrimDataFlowAnalysis.cs (1)
62 ControlFlowGraph methodCFG,
Metrics (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Metrics.Legacy (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Microsoft.CodeAnalysis (86)
DiagnosticAnalyzer\AnalyzerExecutor.cs (5)
54private Func<IOperation, ControlFlowGraph>? _lazyGetControlFlowGraph; 56private ConcurrentDictionary<IOperation, ControlFlowGraph>? _lazyControlFlowGraphMap; 58private Func<IOperation, ControlFlowGraph> GetControlFlowGraph 1546private ControlFlowGraph GetControlFlowGraphImpl(IOperation operation) 1552Interlocked.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)
331Func<IOperation, ControlFlowGraph> getControlFlowGraph,
Generated\FlowAnalysis.Generated.cs (7)
16/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 40/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 85/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 102/// This node is produced only as part of a <see cref="ControlFlowGraph" />. 120/// Represents an anonymous function operation in context of a <see cref="ControlFlowGraph" />. 128/// A <see cref="ControlFlowGraph" /> for the body of the anonymous function is available from 129/// 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 (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Microsoft.CodeAnalysis.AnalyzerUtilities (118)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\BasicBlockExtensions.cs (3)
16internal static IEnumerable<(BasicBlock predecessorBlock, BranchWithInfo branchWithInfo)> GetPredecessorsWithBranches(this BasicBlock basicBlock, ControlFlowGraph cfg) 145public static bool IsFirstBlockOfCompilerGeneratedFinally(this BasicBlock basicBlock, ControlFlowGraph cfg) 194internal static bool DominatesPredecessors(this BasicBlock? basicBlock, ControlFlowGraph cfg)
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowGraphExtensions.cs (5)
15public static BasicBlock GetEntry(this ControlFlowGraph cfg) => cfg.Blocks.Single(b => b.Kind == BasicBlockKind.Entry); 16public static BasicBlock GetExit(this ControlFlowGraph cfg) => cfg.Blocks.Single(b => b.Kind == BasicBlockKind.Exit); 17public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 28public static IEnumerable<T> DescendantOperations<T>(this ControlFlowGraph cfg, OperationKind operationKind) 40internal static bool SupportsFlowAnalysis(this ControlFlowGraph cfg)
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowRegionExtensions.cs (1)
15public static IEnumerable<IOperation> DescendantOperations(this ControlFlowRegion controlFlowRegion, ControlFlowGraph cfg)
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\IOperationExtensions_FlowAnalysis.cs (1)
14public static bool IsInsideCatchRegion([NotNullWhen(returnValue: true)] this IOperation? operation, ControlFlowGraph cfg)
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\OperationBlocksExtensions.cs (2)
13public static ControlFlowGraph? GetControlFlowGraph(this ImmutableArray<IOperation> operationBlocks) 17if (operationRoot.TryGetEnclosingControlFlowGraph(out var cfg))
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.cs (1)
29ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysisContext.cs (4)
25ControlFlowGraph controlFlowGraph, 33ControlFlowGraph? parentControlFlowGraph, 45ControlFlowGraph controlFlowGraph, 62ControlFlowGraph invokedCfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.cs (2)
37ControlFlowGraph cfg, 83ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisContext.cs (4)
29ControlFlowGraph controlFlowGraph, 41ControlFlowGraph? parentControlFlowGraph, 67ControlFlowGraph controlFlowGraph, 93ControlFlowGraph invokedCfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisHelper.cs (1)
135var cfg = operationBlocks.GetControlFlowGraph();
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysis.cs (3)
20/// 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"/>. 58ControlFlowGraph cfg, 88ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysisContext.cs (4)
28ControlFlowGraph controlFlowGraph, 36ControlFlowGraph? parentControlFlowGraph, 56ControlFlowGraph controlFlowGraph, 75ControlFlowGraph invokedCfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysis.cs (3)
43var cfg = topmostBlock.GetEnclosingControlFlowGraph(); 59ControlFlowGraph cfg, 86ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysisContext.cs (4)
28ControlFlowGraph controlFlowGraph, 36ControlFlowGraph? parentControlFlowGraph, 52ControlFlowGraph controlFlowGraph, 70ControlFlowGraph invokedCfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.cs (2)
31ControlFlowGraph cfg, 48ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysisContext.cs (4)
26ControlFlowGraph controlFlowGraph, 35ControlFlowGraph? parentControlFlowGraph, 52ControlFlowGraph controlFlowGraph, 70ControlFlowGraph invokedCfg,
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\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysisContext.cs (4)
31ControlFlowGraph controlFlowGraph, 39ControlFlowGraph? parentControlFlowGraph, 74ControlFlowGraph controlFlowGraph, 109ControlFlowGraph invokedCfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysis.cs (2)
29ControlFlowGraph cfg, 45ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysisContext.cs (4)
26ControlFlowGraph controlFlowGraph, 35ControlFlowGraph? parentControlFlowGraph, 68ControlFlowGraph controlFlowGraph, 104ControlFlowGraph invokedCfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.cs (3)
30ControlFlowGraph cfg, 44ControlFlowGraph cfg, 79ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysisContext.cs (4)
27ControlFlowGraph controlFlowGraph, 37ControlFlowGraph? parentControlFlowGraph, 55ControlFlowGraph controlFlowGraph, 76ControlFlowGraph invokedCfg,
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\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityFactory.cs (2)
27private readonly ControlFlowGraph _controlFlowGraph; 43ControlFlowGraph controlFlowGraph,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysis.cs (3)
56var cfg = analysisContext.ControlFlowGraph; 182ControlFlowGraph cfg, 800private static bool ComputeLoopRangeMap(ControlFlowGraph cfg, PooledDictionary<int, int> loopRangeMap)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResult.cs (2)
47ControlFlowGraph cfg, 208public ControlFlowGraph ControlFlowGraph { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResultBuilder.cs (1)
58ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowOperationVisitor.cs (15)
124/// Dictionary from interprocedural method symbols invoked to their corresponding <see cref="ControlFlowGraph"/>. 126private readonly Dictionary<IMethodSymbol, ControlFlowGraph?>? _interproceduralMethodToCfgMap; 305_interproceduralMethodToCfgMap = new Dictionary<IMethodSymbol, ControlFlowGraph?>(); 2200Func<ControlFlowGraph?> getCfg, 2254var cfg = pointsToAnalysisResult?.ControlFlowGraph ?? 2593ControlFlowGraph cfg, 2641var cfg = pointsToAnalysisResult?.ControlFlowGraph ?? 2691var cfg = pointsToAnalysisResult?.ControlFlowGraph ?? 2731ControlFlowGraph cfg, 3161ControlFlowGraph? getCfg() => GetInterproceduralControlFlowGraph(method); 3539ControlFlowGraph? getCfg() => GetInterproceduralControlFlowGraph(method); 3545private ControlFlowGraph? GetInterproceduralControlFlowGraph(IMethodSymbol method) 3554if (!_interproceduralMethodToCfgMap.TryGetValue(method, out var cfg)) 3580ControlFlowGraph? getCfg() => DataFlowAnalysisContext.GetLocalFunctionControlFlowGraph(localFunction); 3598ControlFlowGraph? getCfg() => DataFlowAnalysisContext.GetAnonymousFunctionControlFlowGraph(lambda);
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\IDataFlowAnalysisContext.cs (3)
13ControlFlowGraph ControlFlowGraph { get; } 15ControlFlowGraph? GetLocalFunctionControlFlowGraph(IMethodSymbol localFunction); 16ControlFlowGraph? GetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation lambda);
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\IDataFlowAnalysisResult.cs (1)
13ControlFlowGraph ControlFlowGraph { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralAnalysisConfiguration.cs (2)
44ControlFlowGraph cfg, 84ControlFlowGraph cfg,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralAnalysisData.cs (2)
39Func<IMethodSymbol, ControlFlowGraph?> getInterproceduralControlFlowGraph, 66public Func<IMethodSymbol, ControlFlowGraph?> GetInterproceduralControlFlowGraph { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralCaptureId.cs (2)
17internal InterproceduralCaptureId(CaptureId captureId, ControlFlowGraph controlFlowGraph, bool isLValueFlowCapture) 25public ControlFlowGraph ControlFlowGraph { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\LValueFlowCapturesProvider.cs (3)
23private static readonly ConditionalWeakTable<ControlFlowGraph, ImmutableHashSet<CaptureId>> s_lValueFlowCapturesCache = 26public static ImmutableHashSet<CaptureId> GetOrCreateLValueFlowCaptures(ControlFlowGraph cfg) 29private static ImmutableHashSet<CaptureId> CreateLValueFlowCaptures(ControlFlowGraph cfg)
Microsoft.CodeAnalysis.BannedApiAnalyzers (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Microsoft.CodeAnalysis.CodeStyle (43)
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (1)
518var controlFlowGraph = context.GetControlFlowGraph(operationBlock);
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\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
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\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
25public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
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\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) 135localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 136lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 140ControlFlowGraph cfg, 165ControlFlowGraph cfg) 176public ControlFlowGraph ControlFlowGraph { get; } 186private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 238ControlFlowGraph cfg, 260var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 277ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 301void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 308ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 310if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 312var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 320ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 327if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 329var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 491if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 496var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 503if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 508var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (3)
CodeGen\CodeGenOperators.cs (3)
5409ControlFlowGraph.Create((IMethodBodyOperation)model.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Where(m => m.Identifier.ValueText == "Calculate").Single())); 5699ControlFlowGraph.Create((IMethodBodyOperation)model.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Where(m => m.Identifier.ValueText == "Calculate").Single())); 5735ControlFlowGraph.Create((IMethodBodyOperation)model.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Where(m => m.Identifier.ValueText == "Calculate").Single()));
Microsoft.CodeAnalysis.CSharp.Emit3.UnitTests (2)
Diagnostics\DiagnosticAnalyzerTests.cs (2)
2764void verifyFlowGraphs(ImmutableArray<(ControlFlowGraph Graph, ISymbol AssociatedSymbol)> flowGraphs) 2769(ControlFlowGraph actualFlowGraph, ISymbol associatedSymbol) = flowGraphs[i];
Microsoft.CodeAnalysis.CSharp.EndToEnd.UnitTests (3)
EndToEndTests.cs (3)
499var graph = Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph.Create(operation); 887Assert.NotNull(ControlFlowGraph.Create((IMethodBodyOperation)operation));
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (24)
IOperation\IOperationTests_IAnonymousFunctionExpression.cs (12)
847var graphM = ControlFlowGraph.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Single())); 859var graphD1 = graphM.GetAnonymousFunctionControlFlowGraph(lambdaD1); 862var graphD1_FromExtension = graphM.GetAnonymousFunctionControlFlowGraphInScope(lambdaD1); 866var graphD2 = graphD1.GetAnonymousFunctionControlFlowGraph(lambdaD2); 875IFlowAnonymousFunctionOperation getLambda(ControlFlowGraph graph) 902var graphM = ControlFlowGraph.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Single())); 917var graphD1 = graphM.GetAnonymousFunctionControlFlowGraph(lambdaD1); 920var graphD2 = graphM.GetAnonymousFunctionControlFlowGraph(lambdaD2); 924var graphD1_FromExtension = graphM.GetAnonymousFunctionControlFlowGraphInScope(lambdaD1); 931IFlowAnonymousFunctionOperation getLambda(ControlFlowGraph graph, int index)
IOperation\IOperationTests_ILocalFunctionStatement.cs (12)
1793var graphM = ControlFlowGraph.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().First())); 1802var graphD1 = graphM.GetLocalFunctionControlFlowGraph(localFunctionD1); 1805var graphD1_FromExtension = graphM.GetLocalFunctionControlFlowGraphInScope(localFunctionD1); 1812var graphD2 = graphD1.GetLocalFunctionControlFlowGraph(localFunctionD2); 1821IMethodSymbol getLocalFunction(ControlFlowGraph graph) 1848var graphM = ControlFlowGraph.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().First())); 1858var graphD1 = graphM.GetLocalFunctionControlFlowGraph(localFunctionD1); 1861var graphD2 = graphM.GetLocalFunctionControlFlowGraph(localFunctionD2); 1865var graphD1_FromExtension = graphM.GetLocalFunctionControlFlowGraphInScope(localFunctionD1); 1872IMethodSymbol getLocalFunction(ControlFlowGraph graph, string name)
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (6)
Semantics\RefFieldTests.cs (3)
29402var controlFlowGraph = Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph.Create(fieldInitializerOperation); 29456controlFlowGraph = Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph.Create(constructorOperation);
Semantics\TopLevelStatementsTests.cs (3)
204Assert.NotNull(ControlFlowGraph.Create((IMethodBodyOperation)((IBlockOperation)operation1.Parent.Parent).Parent)); 332Assert.NotNull(ControlFlowGraph.Create((IMethodBodyOperation)((IBlockOperation)operation1.Parent.Parent).Parent)); 370Assert.NotNull(ControlFlowGraph.Create((IMethodBodyOperation)((IBlockOperation)operation2.Parent).Parent));
Microsoft.CodeAnalysis.CSharp.Test.Utilities (1)
CSharpTestBase.cs (1)
2133(ControlFlowGraph graph, ISymbol associatedSymbol) = ControlFlowGraphVerifier.GetControlFlowGraph(syntaxNode, model);
Microsoft.CodeAnalysis.Features (1)
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (1)
518var controlFlowGraph = context.GetControlFlowGraph(operationBlock);
Microsoft.CodeAnalysis.ResxSourceGenerator (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Microsoft.CodeAnalysis.Test.Utilities (29)
Compilation\ControlFlowGraphVerifier.cs (22)
28public static (ControlFlowGraph graph, ISymbol associatedSymbol) GetControlFlowGraph(SyntaxNode syntaxNode, SemanticModel model) 41ControlFlowGraph graph; 45graph = ControlFlowGraph.Create(blockOperation); 49graph = ControlFlowGraph.Create(methodBodyOperation); 53graph = ControlFlowGraph.Create(constructorBodyOperation); 57graph = ControlFlowGraph.Create(fieldInitializerOperation); 61graph = ControlFlowGraph.Create(propertyInitializerOperation); 65graph = ControlFlowGraph.Create(parameterInitializerOperation); 69graph = ControlFlowGraph.Create(attributeOperation); 82public static void VerifyGraph(Compilation compilation, string expectedFlowGraph, ControlFlowGraph graph, ISymbol associatedSymbol) 98public static string GetFlowGraph(Compilation compilation, ControlFlowGraph graph, ISymbol associatedSymbol) 108private static void GetFlowGraph(System.Text.StringBuilder stringBuilder, Compilation compilation, ControlFlowGraph graph, 117var localFunctionsMap = PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(); 118var anonymousFunctionsMap = PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance(); 330ControlFlowGraph g = localFunctionsMap[m]; 338foreach (KeyValuePair<IFlowAnonymousFunctionOperation, ControlFlowGraph> pair in anonymousFunctionsMap) 1522var g = graph.GetLocalFunctionControlFlowGraph(method); 1797private readonly ControlFlowGraph _graph; 1800private readonly Dictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> _anonymousFunctionsMap; 1803public OperationTreeSerializer(ControlFlowGraph graph, ControlFlowRegion region, string idSuffix, 1804Dictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph> anonymousFunctionsMap, 1823var g = _graph.GetAnonymousFunctionControlFlowGraph(operation);
Compilation\FlowAnalysis\BasicBlockReachabilityDataFlowAnalyzer.cs (1)
17public static BitVector Run(ControlFlowGraph controlFlowGraph)
Diagnostics\CommonDiagnosticAnalyzers.cs (5)
1230private readonly ConcurrentDictionary<IOperation, (ControlFlowGraph Graph, ISymbol AssociatedSymbol)> _controlFlowGraphMapOpt; 1252_controlFlowGraphMapOpt = verifyGetControlFlowGraph ? new ConcurrentDictionary<IOperation, (ControlFlowGraph, ISymbol)>() : null; 1255public ImmutableArray<(ControlFlowGraph Graph, ISymbol AssociatedSymbol)> GetControlFlowGraphs() 1267private void CacheAndVerifyControlFlowGraph(ImmutableArray<IOperation> operationBlocks, Func<IOperation, (ControlFlowGraph Graph, ISymbol AssociatedSymbol)> getControlFlowGraph) 1308var controlFlowGraph = operationContext.GetControlFlowGraph();
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
Microsoft.CodeAnalysis.UnitTests (20)
Diagnostics\OperationTests.cs (20)
120Assert.Throws<ArgumentNullException>(() => ControlFlowGraph.Create((IBlockOperation)null)); 121Assert.Throws<ArgumentNullException>(() => ControlFlowGraph.Create((IFieldInitializerOperation)null)); 122Assert.Throws<ArgumentNullException>(() => ControlFlowGraph.Create((IPropertyInitializerOperation)null)); 123Assert.Throws<ArgumentNullException>(() => ControlFlowGraph.Create((IParameterInitializerOperation)null)); 124Assert.Throws<ArgumentNullException>(() => ControlFlowGraph.Create((IConstructorBodyOperation)null)); 125Assert.Throws<ArgumentNullException>(() => ControlFlowGraph.Create((IMethodBodyOperation)null)); 154_ = ControlFlowGraph.Create(block); 172_ = ControlFlowGraph.Create(initializer); 190_ = ControlFlowGraph.Create(initializer); 208_ = ControlFlowGraph.Create(initializer); 230_ = ControlFlowGraph.Create(constructorBody); 250_ = ControlFlowGraph.Create(methodBody); 283_ = ControlFlowGraph.Create(node: null, model); 296_ = ControlFlowGraph.Create(methodBodySyntax, semanticModel: null); 311_ = ControlFlowGraph.Create(literal, model); 324Assert.Null(ControlFlowGraph.Create(classDecl, model)); 327var cfgFromSyntax = ControlFlowGraph.Create(methodBodySyntax, model); 333var cfgFromOperation = ControlFlowGraph.Create(operation);
Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests (2)
Diagnostics\DiagnosticAnalyzerTests.vb (2)
1615Private Shared Sub verifyFlowGraphs(compilation As Compilation, flowGraphs As ImmutableArray(Of (Graph As ControlFlowGraph, AssociatedSymbol As ISymbol)), expectedFlowGraphs As String()) 1618Dim actualFlowGraphAndSymbol As (Graph As ControlFlowGraph, AssociatedSymbol As ISymbol) = flowGraphs(i)
Microsoft.CodeAnalysis.VisualBasic.Test.Utilities (1)
BasicTestBase.vb (1)
843Dim graphAndSymbol As (Graph As FlowAnalysis.ControlFlowGraph, AssociatedSymbol As ISymbol) = ControlFlowGraphVerifier.GetControlFlowGraph(syntaxNode, model)
Microsoft.CodeAnalysis.Workspaces (42)
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\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (1)
308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
28public static TBlockAnalysisData Run(ControlFlowGraph controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\LValueFlowCaptureProvider.cs (1)
40public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(ControlFlowGraph cfg)
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\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (1)
25public static SymbolUsageResult Run(ControlFlowGraph cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
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\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) 135localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol, ControlFlowGraph>.GetInstance(), 136lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation, ControlFlowGraph>.GetInstance()); 140ControlFlowGraph cfg, 165ControlFlowGraph cfg) 176public ControlFlowGraph ControlFlowGraph { get; } 186private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 238ControlFlowGraph cfg, 260var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 277ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 301void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 308ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 310if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 312var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 320ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 327if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 329var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 491if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 496var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 503if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 508var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Roslyn.Diagnostics.Analyzers (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Test.Utilities (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);
Text.Analyzers (11)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (11)
442/// PERF: Cache from operation roots to their corresponding <see cref="ControlFlowGraph"/> to enable interprocedural flow analysis 446private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 449public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 458public static ControlFlowGraph? GetEnclosingControlFlowGraph(this IBlockOperation blockOperation) 460var success = blockOperation.TryGetEnclosingControlFlowGraph(out var cfg); 466private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 471return ControlFlowGraph.Create(blockOperation); 474return ControlFlowGraph.Create(methodBodyOperation); 477return ControlFlowGraph.Create(constructorBodyOperation); 480return ControlFlowGraph.Create(fieldInitializerOperation); 483return ControlFlowGraph.Create(propertyInitializerOperation);