1 instantiation of ControlFlowGraph
Microsoft.CodeAnalysis (1)
Operations\ControlFlowGraphBuilder.cs (1)
167
return new
ControlFlowGraph
(body, parent, builder._captureIdDispenser, ToImmutableBlocks(blocks), region,
260 references to ControlFlowGraph
Microsoft.CodeAnalysis (86)
DiagnosticAnalyzer\AnalyzerExecutor.cs (5)
58
private Func<IOperation,
ControlFlowGraph
>? _lazyGetControlFlowGraph;
60
private ConcurrentDictionary<IOperation,
ControlFlowGraph
>? _lazyControlFlowGraphMap;
62
private Func<IOperation,
ControlFlowGraph
> GetControlFlowGraph
1460
private
ControlFlowGraph
GetControlFlowGraphImpl(IOperation operation)
1466
Interlocked.CompareExchange(ref _lazyControlFlowGraphMap, new ConcurrentDictionary<IOperation,
ControlFlowGraph
>(), null);
DiagnosticAnalyzer\DiagnosticAnalysisContext.cs (12)
1112
private readonly Func<IOperation,
ControlFlowGraph
>? _getControlFlowGraph;
1164
Func<IOperation,
ControlFlowGraph
>? getControlFlowGraph,
1206
/// Gets a <see cref="
ControlFlowGraph
"/> for a given <paramref name="operationBlock"/> from this analysis context's <see cref="OperationBlocks"/>.
1209
public
ControlFlowGraph
GetControlFlowGraph(IOperation operationBlock)
1237
private readonly Func<IOperation,
ControlFlowGraph
>? _getControlFlowGraph;
1293
Func<IOperation,
ControlFlowGraph
>? getControlFlowGraph,
1322
/// Gets a <see cref="
ControlFlowGraph
"/> for a given <paramref name="operationBlock"/> from this analysis context's <see cref="OperationBlocks"/>.
1325
public
ControlFlowGraph
GetControlFlowGraph(IOperation operationBlock)
1581
private readonly Func<IOperation,
ControlFlowGraph
>? _getControlFlowGraph;
1634
Func<IOperation,
ControlFlowGraph
>? getControlFlowGraph,
1663
/// Gets a <see cref="
ControlFlowGraph
"/> for the operation block containing the <see cref="Operation"/>.
1665
public
ControlFlowGraph
GetControlFlowGraph() => DiagnosticAnalysisContextHelpers.GetControlFlowGraph(Operation, _getControlFlowGraph, _cancellationToken);
DiagnosticAnalyzer\DiagnosticAnalysisContextHelpers.cs (3)
171
internal static
ControlFlowGraph
GetControlFlowGraph(IOperation operation, Func<IOperation,
ControlFlowGraph
>? getControlFlowGraph, CancellationToken cancellationToken)
176
ControlFlowGraph
.CreateCore(rootOperation, nameof(rootOperation), cancellationToken);
DiagnosticAnalyzer\DiagnosticStartAnalysisScope.cs (1)
334
Func<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
" />.
126
/// A <see cref="
ControlFlowGraph
" /> for the body of the anonymous function is available from
127
/// 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)
28
private
ControlFlowGraph
?[]? _lazyLocalFunctionsGraphs;
30
private
ControlFlowGraph
?[]? _lazyAnonymousFunctionsGraphs;
33
ControlFlowGraph
? 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.
83
public 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"/>.
105
public static
ControlFlowGraph
Create(Operations.IBlockOperation body, CancellationToken cancellationToken = default)
111
/// Creates a <see cref="
ControlFlowGraph
"/> for the given executable code block <paramref name="initializer"/>.
115
public static
ControlFlowGraph
Create(Operations.IFieldInitializerOperation initializer, CancellationToken cancellationToken = default)
121
/// Creates a <see cref="
ControlFlowGraph
"/> for the given executable code block <paramref name="initializer"/>.
125
public static
ControlFlowGraph
Create(Operations.IPropertyInitializerOperation initializer, CancellationToken cancellationToken = default)
131
/// Creates a <see cref="
ControlFlowGraph
"/> for the given executable code block <paramref name="initializer"/>.
135
public static
ControlFlowGraph
Create(Operations.IParameterInitializerOperation initializer, CancellationToken cancellationToken = default)
141
/// Creates a <see cref="
ControlFlowGraph
"/> for the given executable code block <paramref name="attribute"/>.
145
public static
ControlFlowGraph
Create(Operations.IAttributeOperation attribute, CancellationToken cancellationToken = default)
151
/// Creates a <see cref="
ControlFlowGraph
"/> for the given executable code block <paramref name="constructorBody"/>.
155
public static
ControlFlowGraph
Create(Operations.IConstructorBodyOperation constructorBody, CancellationToken cancellationToken = default)
161
/// Creates a <see cref="
ControlFlowGraph
"/> for the given executable code block <paramref name="methodBody"/>.
165
public static
ControlFlowGraph
Create(Operations.IMethodBodyOperation methodBody, CancellationToken cancellationToken = default)
171
internal static
ControlFlowGraph
CreateCore(IOperation operation, string argumentNameForException, CancellationToken cancellationToken)
190
ControlFlowGraph
controlFlowGraph = ControlFlowGraphBuilder.Create(operation);
207
public
ControlFlowGraph
? Parent { get; }
227
public
ControlFlowGraph
GetLocalFunctionControlFlowGraph(IMethodSymbol localFunction, CancellationToken cancellationToken = default)
236
if (!TryGetLocalFunctionControlFlowGraph(localFunction, out
var
controlFlowGraph))
244
internal bool TryGetLocalFunctionControlFlowGraph(IMethodSymbol localFunction, [NotNullWhen(true)] out
ControlFlowGraph
? controlFlowGraph)
256
Interlocked.CompareExchange(ref _lazyLocalFunctionsGraphs, new
ControlFlowGraph
[LocalFunctions.Length], null);
259
ref
ControlFlowGraph
? localFunctionGraph = ref _lazyLocalFunctionsGraphs[info.ordinal];
263
ControlFlowGraph
graph = ControlFlowGraphBuilder.Create(info.operation, this, info.enclosing, _captureIdDispenser);
276
public
ControlFlowGraph
GetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation anonymousFunction, CancellationToken cancellationToken = default)
285
if (!TryGetAnonymousFunctionControlFlowGraph(anonymousFunction, out
ControlFlowGraph
? controlFlowGraph))
293
internal bool TryGetAnonymousFunctionControlFlowGraph(IFlowAnonymousFunctionOperation anonymousFunction, [NotNullWhen(true)] out
ControlFlowGraph
? controlFlowGraph)
303
Interlocked.CompareExchange(ref _lazyAnonymousFunctionsGraphs, new
ControlFlowGraph
[_anonymousFunctionsMap.Count], null);
306
ref
ControlFlowGraph
? anonymousFlowGraph = ref _lazyAnonymousFunctionsGraphs[info.ordinal];
310
ControlFlowGraph
graph = ControlFlowGraphBuilder.Create(anonymous.Original, this, info.enclosing, _captureIdDispenser, in anonymous.Context);
Operations\ControlFlowGraphBuilder.cs (2)
87
public static
ControlFlowGraph
Create(IOperation body,
ControlFlowGraph
? parent = null, ControlFlowRegion? enclosing = null, CaptureIdDispenser? captureIdDispenser = null, in Context context = default)
Operations\ControlFlowGraphExtensions.cs (8)
17
public static
ControlFlowGraph
GetLocalFunctionControlFlowGraphInScope(this
ControlFlowGraph
controlFlowGraph, IMethodSymbol localFunction, CancellationToken cancellationToken = default)
30
ControlFlowGraph
? currentGraph = controlFlowGraph;
33
if (currentGraph.TryGetLocalFunctionControlFlowGraph(localFunction, out
ControlFlowGraph
? localFunctionControlFlowGraph))
48
public static
ControlFlowGraph
GetAnonymousFunctionControlFlowGraphInScope(this
ControlFlowGraph
controlFlowGraph, IFlowAnonymousFunctionOperation anonymousFunction, CancellationToken cancellationToken = default)
61
ControlFlowGraph
? currentGraph = controlFlowGraph;
64
if (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)
AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (1)
481
var
controlFlowGraph = context.GetControlFlowGraph(operationBlock);
ControlFlowGraphExtensions.cs (4)
13
public static BasicBlock EntryBlock(this
ControlFlowGraph
cfg)
20
public static BasicBlock ExitBlock(this
ControlFlowGraph
cfg)
27
public static IEnumerable<IOperation> DescendantOperations(this
ControlFlowGraph
cfg)
30
public static IEnumerable<T> DescendantOperations<T>(this
ControlFlowGraph
cfg, OperationKind operationKind)
CustomDataFlowAnalysis.cs (1)
29
public static TBlockAnalysisData Run(
ControlFlowGraph
controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
LValueFlowCaptureProvider.cs (1)
40
public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(
ControlFlowGraph
cfg)
OperationExtensions.cs (1)
299
public static bool IsInsideCatchRegion(this IOperation operation,
ControlFlowGraph
cfg)
SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
17
/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="
ControlFlowGraph
"/>
SymbolUsageAnalysis.cs (1)
25
public static SymbolUsageResult Run(
ControlFlowGraph
cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25
private DataFlowAnalyzer(
ControlFlowGraph
cfg, ISymbol owningSymbol)
29
ControlFlowGraph
cfg,
40
public static SymbolUsageResult RunAnalysis(
ControlFlowGraph
cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
53
ControlFlowGraph
cfg,
SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36
private readonly Func<IMethodSymbol,
ControlFlowGraph
, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55
private readonly PooledDictionary<IMethodSymbol,
ControlFlowGraph
> _localFunctionTargetsToAccessingCfgMap;
62
private readonly PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> _lambdaTargetsToAccessingCfgMap;
72
ControlFlowGraph
controlFlowGraph,
80
Func<IMethodSymbol,
ControlFlowGraph
, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82
PooledDictionary<IMethodSymbol,
ControlFlowGraph
> localFunctionTargetsToAccessingCfgMap,
83
PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> lambdaTargetsToAccessingCfgMap)
117
ControlFlowGraph
cfg,
119
Func<IMethodSymbol,
ControlFlowGraph
, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
135
localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol,
ControlFlowGraph
>.GetInstance(),
136
lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
>.GetInstance());
140
ControlFlowGraph
cfg,
165
ControlFlowGraph
cfg)
176
public
ControlFlowGraph
ControlFlowGraph { get; }
187
private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(
ControlFlowGraph
cfg)
239
ControlFlowGraph
cfg,
261
var
localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken);
278
ControlFlowGraph
lambdaOrLocalFunctionCfgOpt = null;
302
void AddDescendantOperationsInLambdaOrLocalFunctionGraph(
ControlFlowGraph
lambdaOrLocalFunctionCfg)
309
ControlFlowGraph
TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation)
311
if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out
var
lambdaAccessingCfg))
313
var
anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken);
321
ControlFlowGraph
TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
328
if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out
var
localFunctionAccessingCfg))
330
var
localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken);
490
if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out
var
accessingCfg))
495
var
localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken);
502
if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out
var
accessingCfg))
507
var
lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (3)
CodeGen\CodeGenOperators.cs (3)
5253
ControlFlowGraph
.Create((IMethodBodyOperation)model.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Where(m => m.Identifier.ValueText == "Calculate").Single()));
5543
ControlFlowGraph
.Create((IMethodBodyOperation)model.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Where(m => m.Identifier.ValueText == "Calculate").Single()));
5579
ControlFlowGraph
.Create((IMethodBodyOperation)model.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Where(m => m.Identifier.ValueText == "Calculate").Single()));
Microsoft.CodeAnalysis.CSharp.Emit2.UnitTests (2)
Diagnostics\DiagnosticAnalyzerTests.cs (2)
2763
void verifyFlowGraphs(ImmutableArray<(
ControlFlowGraph
Graph, ISymbol AssociatedSymbol)> flowGraphs)
2768
(
ControlFlowGraph
actualFlowGraph, ISymbol associatedSymbol) = flowGraphs[i];
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (24)
IOperation\IOperationTests_IAnonymousFunctionExpression.cs (12)
847
var
graphM =
ControlFlowGraph
.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Single()));
859
var
graphD1 = graphM.GetAnonymousFunctionControlFlowGraph(lambdaD1);
862
var
graphD1_FromExtension = graphM.GetAnonymousFunctionControlFlowGraphInScope(lambdaD1);
866
var
graphD2 = graphD1.GetAnonymousFunctionControlFlowGraph(lambdaD2);
875
IFlowAnonymousFunctionOperation getLambda(
ControlFlowGraph
graph)
902
var
graphM =
ControlFlowGraph
.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().Single()));
917
var
graphD1 = graphM.GetAnonymousFunctionControlFlowGraph(lambdaD1);
920
var
graphD2 = graphM.GetAnonymousFunctionControlFlowGraph(lambdaD2);
924
var
graphD1_FromExtension = graphM.GetAnonymousFunctionControlFlowGraphInScope(lambdaD1);
931
IFlowAnonymousFunctionOperation getLambda(
ControlFlowGraph
graph, int index)
IOperation\IOperationTests_ILocalFunctionStatement.cs (12)
1793
var
graphM =
ControlFlowGraph
.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().First()));
1802
var
graphD1 = graphM.GetLocalFunctionControlFlowGraph(localFunctionD1);
1805
var
graphD1_FromExtension = graphM.GetLocalFunctionControlFlowGraphInScope(localFunctionD1);
1812
var
graphD2 = graphD1.GetLocalFunctionControlFlowGraph(localFunctionD2);
1821
IMethodSymbol getLocalFunction(
ControlFlowGraph
graph)
1848
var
graphM =
ControlFlowGraph
.Create((IMethodBodyOperation)semanticModel.GetOperation(tree.GetRoot().DescendantNodes().OfType<MethodDeclarationSyntax>().First()));
1858
var
graphD1 = graphM.GetLocalFunctionControlFlowGraph(localFunctionD1);
1861
var
graphD2 = graphM.GetLocalFunctionControlFlowGraph(localFunctionD2);
1865
var
graphD1_FromExtension = graphM.GetLocalFunctionControlFlowGraphInScope(localFunctionD1);
1872
IMethodSymbol getLocalFunction(
ControlFlowGraph
graph, string name)
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (6)
Semantics\RefFieldTests.cs (3)
28109
var
controlFlowGraph = Microsoft.CodeAnalysis.FlowAnalysis.
ControlFlowGraph
.Create(fieldInitializerOperation);
28163
controlFlowGraph = Microsoft.CodeAnalysis.FlowAnalysis.
ControlFlowGraph
.Create(constructorOperation);
Semantics\TopLevelStatementsTests.cs (3)
204
Assert.NotNull(
ControlFlowGraph
.Create((IMethodBodyOperation)((IBlockOperation)operation1.Parent.Parent).Parent));
332
Assert.NotNull(
ControlFlowGraph
.Create((IMethodBodyOperation)((IBlockOperation)operation1.Parent.Parent).Parent));
370
Assert.NotNull(
ControlFlowGraph
.Create((IMethodBodyOperation)((IBlockOperation)operation2.Parent).Parent));
Microsoft.CodeAnalysis.CSharp.Test.Utilities (1)
CSharpTestBase.cs (1)
2014
(
ControlFlowGraph
graph, ISymbol associatedSymbol) = ControlFlowGraphVerifier.GetControlFlowGraph(syntaxNode, model);
Microsoft.CodeAnalysis.Features (1)
AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (1)
481
var
controlFlowGraph = context.GetControlFlowGraph(operationBlock);
Microsoft.CodeAnalysis.Test.Utilities (29)
Compilation\ControlFlowGraphVerifier.cs (22)
28
public static (
ControlFlowGraph
graph, ISymbol associatedSymbol) GetControlFlowGraph(SyntaxNode syntaxNode, SemanticModel model)
41
ControlFlowGraph
graph;
45
graph =
ControlFlowGraph
.Create(blockOperation);
49
graph =
ControlFlowGraph
.Create(methodBodyOperation);
53
graph =
ControlFlowGraph
.Create(constructorBodyOperation);
57
graph =
ControlFlowGraph
.Create(fieldInitializerOperation);
61
graph =
ControlFlowGraph
.Create(propertyInitializerOperation);
65
graph =
ControlFlowGraph
.Create(parameterInitializerOperation);
69
graph =
ControlFlowGraph
.Create(attributeOperation);
82
public static void VerifyGraph(Compilation compilation, string expectedFlowGraph,
ControlFlowGraph
graph, ISymbol associatedSymbol)
98
public static string GetFlowGraph(Compilation compilation,
ControlFlowGraph
graph, ISymbol associatedSymbol)
108
private static void GetFlowGraph(System.Text.StringBuilder stringBuilder, Compilation compilation,
ControlFlowGraph
graph,
117
var localFunctionsMap = PooledDictionary<IMethodSymbol,
ControlFlowGraph
>.GetInstance();
118
var anonymousFunctionsMap = PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
>.GetInstance();
330
ControlFlowGraph
g = localFunctionsMap[m];
338
foreach (KeyValuePair<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> pair in anonymousFunctionsMap)
1547
var
g = graph.GetLocalFunctionControlFlowGraph(method);
1822
private readonly
ControlFlowGraph
_graph;
1825
private readonly Dictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> _anonymousFunctionsMap;
1828
public OperationTreeSerializer(
ControlFlowGraph
graph, ControlFlowRegion region, string idSuffix,
1829
Dictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> anonymousFunctionsMap,
1848
var
g = _graph.GetAnonymousFunctionControlFlowGraph(operation);
Compilation\FlowAnalysis\BasicBlockReachabilityDataFlowAnalyzer.cs (1)
17
public static BitVector Run(
ControlFlowGraph
controlFlowGraph)
CustomDataFlowAnalysis.cs (1)
29
public static TBlockAnalysisData Run(
ControlFlowGraph
controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
Diagnostics\CommonDiagnosticAnalyzers.cs (5)
1120
private readonly ConcurrentDictionary<IOperation, (
ControlFlowGraph
Graph, ISymbol AssociatedSymbol)> _controlFlowGraphMapOpt;
1142
_controlFlowGraphMapOpt = verifyGetControlFlowGraph ? new ConcurrentDictionary<IOperation, (
ControlFlowGraph
, ISymbol)>() : null;
1145
public ImmutableArray<(
ControlFlowGraph
Graph, ISymbol AssociatedSymbol)> GetControlFlowGraphs()
1157
private void CacheAndVerifyControlFlowGraph(ImmutableArray<IOperation> operationBlocks, Func<IOperation, (
ControlFlowGraph
Graph, ISymbol AssociatedSymbol)> getControlFlowGraph)
1198
var
controlFlowGraph = operationContext.GetControlFlowGraph();
Microsoft.CodeAnalysis.UnitTests (20)
Diagnostics\OperationTests.cs (20)
120
Assert.Throws<ArgumentNullException>(() =>
ControlFlowGraph
.Create((IBlockOperation)null));
121
Assert.Throws<ArgumentNullException>(() =>
ControlFlowGraph
.Create((IFieldInitializerOperation)null));
122
Assert.Throws<ArgumentNullException>(() =>
ControlFlowGraph
.Create((IPropertyInitializerOperation)null));
123
Assert.Throws<ArgumentNullException>(() =>
ControlFlowGraph
.Create((IParameterInitializerOperation)null));
124
Assert.Throws<ArgumentNullException>(() =>
ControlFlowGraph
.Create((IConstructorBodyOperation)null));
125
Assert.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);
324
Assert.Null(
ControlFlowGraph
.Create(classDecl, model));
327
var
cfgFromSyntax =
ControlFlowGraph
.Create(methodBodySyntax, model);
333
var
cfgFromOperation =
ControlFlowGraph
.Create(operation);
Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests (2)
Diagnostics\DiagnosticAnalyzerTests.vb (2)
1615
Private Shared Sub verifyFlowGraphs(compilation As Compilation, flowGraphs As ImmutableArray(Of (Graph As
ControlFlowGraph
, AssociatedSymbol As ISymbol)), expectedFlowGraphs As String())
1618
Dim actualFlowGraphAndSymbol As (Graph As
ControlFlowGraph
, AssociatedSymbol As ISymbol) = flowGraphs(i)
Microsoft.CodeAnalysis.VisualBasic.Test.Utilities (1)
BasicTestBase.vb (1)
831
Dim graphAndSymbol As (Graph As FlowAnalysis.
ControlFlowGraph
, AssociatedSymbol As ISymbol) = ControlFlowGraphVerifier.GetControlFlowGraph(syntaxNode, model)
Microsoft.CodeAnalysis.Workspaces (42)
ControlFlowGraphExtensions.cs (4)
13
public static BasicBlock EntryBlock(this
ControlFlowGraph
cfg)
20
public static BasicBlock ExitBlock(this
ControlFlowGraph
cfg)
27
public static IEnumerable<IOperation> DescendantOperations(this
ControlFlowGraph
cfg)
30
public static IEnumerable<T> DescendantOperations<T>(this
ControlFlowGraph
cfg, OperationKind operationKind)
CustomDataFlowAnalysis.cs (1)
29
public static TBlockAnalysisData Run(
ControlFlowGraph
controlFlowGraph, DataFlowAnalyzer<TBlockAnalysisData> analyzer, CancellationToken cancellationToken)
LValueFlowCaptureProvider.cs (1)
40
public static ImmutableDictionary<CaptureId, FlowCaptureKind> CreateLValueFlowCaptures(
ControlFlowGraph
cfg)
OperationExtensions.cs (1)
299
public static bool IsInsideCatchRegion(this IOperation operation,
ControlFlowGraph
cfg)
SymbolUsageAnalysis.BasicBlockAnalysisData.cs (1)
17
/// Analysis data for a particular <see cref="BasicBlock"/> for <see cref="
ControlFlowGraph
"/>
SymbolUsageAnalysis.cs (1)
25
public static SymbolUsageResult Run(
ControlFlowGraph
cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
SymbolUsageAnalysis.DataFlowAnalyzer.cs (4)
25
private DataFlowAnalyzer(
ControlFlowGraph
cfg, ISymbol owningSymbol)
29
ControlFlowGraph
cfg,
40
public static SymbolUsageResult RunAnalysis(
ControlFlowGraph
cfg, ISymbol owningSymbol, CancellationToken cancellationToken)
53
ControlFlowGraph
cfg,
SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (29)
36
private readonly Func<IMethodSymbol,
ControlFlowGraph
, AnalysisData, CancellationToken, BasicBlockAnalysisData> _analyzeLocalFunctionOrLambdaInvocation;
55
private readonly PooledDictionary<IMethodSymbol,
ControlFlowGraph
> _localFunctionTargetsToAccessingCfgMap;
62
private readonly PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> _lambdaTargetsToAccessingCfgMap;
72
ControlFlowGraph
controlFlowGraph,
80
Func<IMethodSymbol,
ControlFlowGraph
, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation,
82
PooledDictionary<IMethodSymbol,
ControlFlowGraph
> localFunctionTargetsToAccessingCfgMap,
83
PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
> lambdaTargetsToAccessingCfgMap)
117
ControlFlowGraph
cfg,
119
Func<IMethodSymbol,
ControlFlowGraph
, AnalysisData, CancellationToken, BasicBlockAnalysisData> analyzeLocalFunctionOrLambdaInvocation)
135
localFunctionTargetsToAccessingCfgMap: PooledDictionary<IMethodSymbol,
ControlFlowGraph
>.GetInstance(),
136
lambdaTargetsToAccessingCfgMap: PooledDictionary<IFlowAnonymousFunctionOperation,
ControlFlowGraph
>.GetInstance());
140
ControlFlowGraph
cfg,
165
ControlFlowGraph
cfg)
176
public
ControlFlowGraph
ControlFlowGraph { get; }
187
private static ImmutableHashSet<ILocalSymbol> GetCapturedLocals(
ControlFlowGraph
cfg)
239
ControlFlowGraph
cfg,
261
var
localFunctionGraph = cfg.GetLocalFunctionControlFlowGraphInScope(invocation.TargetMethod.OriginalDefinition, cancellationToken);
278
ControlFlowGraph
lambdaOrLocalFunctionCfgOpt = null;
302
void AddDescendantOperationsInLambdaOrLocalFunctionGraph(
ControlFlowGraph
lambdaOrLocalFunctionCfg)
309
ControlFlowGraph
TryGetAnonymousFunctionControlFlowGraphInScope(IFlowAnonymousFunctionOperation flowAnonymousFunctionOperation)
311
if (_lambdaTargetsToAccessingCfgMap.TryGetValue(flowAnonymousFunctionOperation, out
var
lambdaAccessingCfg))
313
var
anonymousFunctionCfg = lambdaAccessingCfg.GetAnonymousFunctionControlFlowGraphInScope(flowAnonymousFunctionOperation, cancellationToken);
321
ControlFlowGraph
TryGetLocalFunctionControlFlowGraphInScope(IMethodSymbol localFunction)
328
if (_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out
var
localFunctionAccessingCfg))
330
var
localFunctionCfg = localFunctionAccessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken);
490
if (!_localFunctionTargetsToAccessingCfgMap.TryGetValue(localFunction, out
var
accessingCfg))
495
var
localFunctionCfg = accessingCfg.GetLocalFunctionControlFlowGraphInScope(localFunction, cancellationToken);
502
if (!_lambdaTargetsToAccessingCfgMap.TryGetValue(lambda, out
var
accessingCfg))
507
var
lambdaCfg = accessingCfg.GetAnonymousFunctionControlFlowGraphInScope(lambda, cancellationToken);