1 instantiation of ControlFlowGraph
Microsoft.CodeAnalysis (1)
Operations\ControlFlowGraphBuilder.cs (1)
167return new ControlFlowGraph(body, parent, builder._captureIdDispenser, ToImmutableBlocks(blocks), region,
278 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,
Microsoft.CodeAnalysis (86)
DiagnosticAnalyzer\AnalyzerExecutor.cs (5)
54private Func<IOperation, ControlFlowGraph>? _lazyGetControlFlowGraph; 56private ConcurrentDictionary<IOperation, ControlFlowGraph>? _lazyControlFlowGraphMap; 58private Func<IOperation, ControlFlowGraph> GetControlFlowGraph 1500private ControlFlowGraph GetControlFlowGraphImpl(IOperation operation) 1506Interlocked.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.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)
305public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
29public 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)
17/// 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; } 187private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 239ControlFlowGraph cfg, 261var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 278ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 302void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 309ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 311if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 313var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 321ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 328if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 330var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 492if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 497var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 504if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 509var 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.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)
28409var controlFlowGraph = Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph.Create(fieldInitializerOperation); 28463controlFlowGraph = 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)
2101(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.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)
29public 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)
831Dim 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)
305public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\CustomDataFlowAnalysis.cs (1)
29public 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)
17/// 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; } 187private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(ControlFlowGraph cfg) 239ControlFlowGraph cfg, 261var localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken); 278ControlFlowGraph lambdaOrLocalFunctionCfgOpt = null; 302void AddDescendantOperationsInLambdaOrLocalFunctionGraph(ControlFlowGraph lambdaOrLocalFunctionCfg) 309ControlFlowGraph TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation) 311if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out var lambdaAccessingCfg)) 313var anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken); 321ControlFlowGraph TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction) 328if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var localFunctionAccessingCfg)) 330var localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 492if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out var accessingCfg)) 497var localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken); 504if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out var accessingCfg)) 509var lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);