106 interfaces inheriting from IOperation
Microsoft.CodeAnalysis (106)
Generated\FlowAnalysis.Generated.cs (6)
26public interface IFlowCaptureOperation : IOperation 50public interface IFlowCaptureReferenceOperation : IOperation 76public interface IIsNullOperation : IOperation 95public interface ICaughtExceptionOperation : IOperation 112public interface IStaticLocalInitializationSemaphoreOperation : IOperation 139public interface IFlowAnonymousFunctionOperation : IOperation
Generated\Operations.Generated.cs (100)
36public interface IInvalidOperation : IOperation 57public interface IBlockOperation : IOperation 90public interface IVariableDeclarationGroupOperation : IOperation 118public interface ISwitchOperation : IOperation 151public interface ILoopOperation : IOperation 339public interface ILabeledOperation : IOperation 368public interface IBranchOperation : IOperation 396public interface IEmptyOperation : IOperation 419public interface IReturnOperation : IOperation 444public interface ILockOperation : IOperation 473public interface ITryOperation : IOperation 510public interface IUsingOperation : IOperation 548public interface IExpressionStatementOperation : IOperation 572public interface ILocalFunctionOperation : IOperation 610public interface IStopOperation : IOperation 630public interface IEndOperation : IOperation 650public interface IRaiseEventOperation : IOperation 683public interface ILiteralOperation : IOperation 704public interface IConversionOperation : IOperation 771public interface IInvocationOperation : IOperation 817public interface IArrayElementReferenceOperation : IOperation 846public interface ILocalReferenceOperation : IOperation 876public interface IParameterReferenceOperation : IOperation 897public interface IMemberReferenceOperation : IOperation 1052public interface IUnaryOperation : IOperation 1102public interface IBinaryOperation : IOperation 1165public interface IConditionalOperation : IOperation 1209public interface ICoalesceOperation : IOperation 1245public interface IAnonymousFunctionOperation : IOperation 1274public interface IObjectCreationOperation : IOperation 1311public interface ITypeParameterObjectCreationOperation : IOperation 1336public interface IArrayCreationOperation : IOperation 1367public interface IInstanceReferenceOperation : IOperation 1392public interface IIsTypeOperation : IOperation 1427public interface IAwaitOperation : IOperation 1448public interface IAssignmentOperation : IOperation 1552public interface IParenthesizedOperation : IOperation 1577public interface IEventAssignmentOperation : IOperation 1611public interface IConditionalAccessOperation : IOperation 1642public interface IConditionalAccessInstanceOperation : IOperation 1661public interface IInterpolatedStringOperation : IOperation 1686public interface IAnonymousObjectCreationOperation : IOperation 1719public interface IObjectOrCollectionInitializerOperation : IOperation 1750public interface IMemberInitializerOperation : IOperation 1778public interface ICollectionElementInitializerOperation : IOperation 1802public interface INameOfOperation : IOperation 1827public interface ITupleOperation : IOperation 1858public interface IDynamicObjectCreationOperation : IOperation 1887public interface IDynamicMemberReferenceOperation : IOperation 1939public interface IDynamicInvocationOperation : IOperation 1967public interface IDynamicIndexerAccessOperation : IOperation 2001public interface ITranslatedQueryOperation : IOperation 2026public interface IDelegateCreationOperation : IOperation 2050public interface IDefaultValueOperation : IOperation 2071public interface ITypeOfOperation : IOperation 2095public interface ISizeOfOperation : IOperation 2119public interface IAddressOfOperation : IOperation 2143public interface IIsPatternOperation : IOperation 2174public interface IIncrementOrDecrementOperation : IOperation 2224public interface IThrowOperation : IOperation 2277public interface IDeclarationExpressionOperation : IOperation 2301public interface IOmittedArgumentOperation : IOperation 2318public interface ISymbolInitializerOperation : IOperation 2443public interface IArrayInitializerOperation : IOperation 2472public interface IVariableDeclaratorOperation : IOperation 2517public interface IVariableDeclarationOperation : IOperation 2558public interface IArgumentOperation : IOperation 2599public interface ICatchClauseOperation : IOperation 2644public interface ISwitchCaseOperation : IOperation 2673public interface ICaseClauseOperation : IOperation 2810public interface IInterpolatedStringContentOperation : IOperation 2884public interface IPatternOperation : IOperation 2971public interface ITupleBinaryOperation : IOperation 2999public interface IMethodBodyBaseOperation : IOperation 3077public interface IDiscardOperation : IOperation 3126public interface IRangeOperation : IOperation 3166public interface IReDimOperation : IOperation 3194public interface IReDimClauseOperation : IOperation 3278public interface ISwitchExpressionOperation : IOperation 3304public interface ISwitchExpressionArmOperation : IOperation 3335public interface IPropertySubpatternOperation : IOperation 3354internal interface IAggregateQueryOperation : IOperation 3366internal interface IFixedOperation : IOperation 3395internal interface INoPiaObjectCreationOperation : IOperation 3410internal interface IPlaceholderOperation : IOperation 3427internal interface IPointerIndirectionReferenceOperation : IOperation 3447internal interface IWithStatementOperation : IOperation 3476public interface IUsingDeclarationOperation : IOperation 3612public interface IWithOperation : IOperation 3638public interface IInterpolatedStringHandlerCreationOperation : IOperation 3679public interface IInterpolatedStringAdditionOperation : IOperation 3724public interface IInterpolatedStringHandlerArgumentPlaceholderOperation : IOperation 3747public interface IFunctionPointerInvocationOperation : IOperation 3829public interface IImplicitIndexerReferenceOperation : IOperation 3865public interface IUtf8StringOperation : IOperation 3890public interface IAttributeOperation : IOperation 3914public interface IInlineArrayAccessOperation : IOperation 3942public interface ICollectionExpressionOperation : IOperation 3999public interface ISpreadOperation : IOperation 4031public interface ICollectionExpressionElementsPlaceholderOperation : IOperation
1 implementation of IOperation
Microsoft.CodeAnalysis (1)
Operations\Operation.cs (1)
18internal abstract partial class Operation : IOperation
6111 references to IOperation
Analyzer.Utilities.UnitTests (3)
FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysisTests.cs (3)
68(IOperation? operation, SemanticModel? model, SyntaxNode? syntaxNode) = GetOperationAndSyntaxForTest<BlockSyntax>((CSharpCompilation)compilation); 1275protected static (IOperation? operation, SemanticModel? model, SyntaxNode? node) GetOperationAndSyntaxForTest<TSyntaxNode>(CSharpCompilation compilation) 1286var operation = model.GetOperation(syntaxNode);
ConfigurationSchemaGenerator (1)
RuntimeSource\Configuration.Binder\Parser\ConfigurationBinder.cs (1)
103static ITypeSymbol? ResolveType(IOperation conversionOperation) =>
GenerateDocumentationAndConfigFiles (203)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
ILLink.RoslynAnalyzer (92)
DataFlow\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
DataFlow\CapturedReferenceValue.cs (2)
13public readonly IOperation Reference; 15public CapturedReferenceValue(IOperation operation)
DataFlow\ControlFlowGraphExtensions.cs (2)
29public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 33where T : IOperation
DataFlow\FeatureChecksVisitor.cs (2)
35public override FeatureChecksValue DefaultVisit(IOperation operation, StateValue state) 81public static bool? GetLiteralBool(IOperation operation)
DataFlow\LocalDataFlowAnalysis.cs (2)
39private readonly IOperation OperationBlock; 56IOperation operationBlock,
DataFlow\LocalDataFlowVisitor.cs (19)
82foreach (IOperation operation in block.Block.Operations) 86IOperation? branchValueOperation = block.Block.BranchValue; 129IOperation branchValueOperation, 141IOperation operation, 144public abstract TValue HandleArrayElementRead(TValue arrayValue, TValue indexValue, IOperation operation); 146public abstract void HandleArrayElementWrite(TValue arrayValue, TValue indexValue, TValue valueToWrite, IOperation operation, bool merge); 152IOperation operation, 157IOperation branchValueOperation); 169IOperation operation, 177private TValue ProcessBinderCall(IOperation operation, string methodName, LocalDataFlowState<TValue, TContext, TValueLattice, TContextLattice> state) 241IOperation targetOperation, 251IOperation targetOperation, 252IOperation valueOperation, 253IOperation assignmentOperation, 472var targetOperation = operation.Target; 699public abstract TValue HandleDelegateCreation(IMethodSymbol methodReference, IOperation operation, in TContext context); 841IOperation operation, 918IOperation operation, 920IOperation? instance,
DataFlow\OperationWalker.cs (4)
14private void VisitChildOperations(IOperation operation, TArgument argument) 16foreach (var child in operation.ChildOperations) 20public override TResult? Visit(IOperation? operation, TArgument argument) 38public override TResult? DefaultVisit(IOperation operation, TArgument argument)
DataFlow\UnexpectedOperationHandler.cs (2)
18public static void Handle(IOperation operation) 37foreach (var descendant in operation.Descendants())
DynamicallyAccessedMembersAnalyzer.cs (1)
113foreach (var operationBlock in context.OperationBlocks)
IOperationExtensions.cs (8)
17public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 213public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 233public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, out IDeconstructionAssignmentOperation? deconstructionAssignment) 237var previousOperation = operation; 238var current = operation.Parent; 269public static bool IsAnyCompoundAssignment(this IOperation operation) 289public static ISymbol FindContainingSymbol(this IOperation operation, ISymbol owningSymbol) 291var parent = operation.Parent;
RequiresAnalyzerBase.cs (2)
200var parent = operationContext.Operation.Parent; 344IOperation operation,
TrimAnalysis\FeatureCheckReturnValuePattern.cs (2)
18public IOperation Operation { get; init; } 24IOperation operation,
TrimAnalysis\HandleCallAction.cs (2)
26private readonly IOperation _operation; 36IOperation operation,
TrimAnalysis\TrimAnalysisAssignmentPattern.cs (2)
21public IOperation Operation { get; init; } 28IOperation operation,
TrimAnalysis\TrimAnalysisGenericInstantiationPattern.cs (2)
17public IOperation Operation { get; init; } 23IOperation operation,
TrimAnalysis\TrimAnalysisMethodCallPattern.cs (2)
21public IOperation Operation { get; init; } 29IOperation operation,
TrimAnalysis\TrimAnalysisPatternStore.cs (14)
15private readonly Dictionary<IOperation, TrimAnalysisAssignmentPattern> AssignmentPatterns; 16private readonly Dictionary<IOperation, TrimAnalysisFieldAccessPattern> FieldAccessPatterns; 17private readonly Dictionary<IOperation, TrimAnalysisBackingFieldAccessPattern> BackingFieldAccessPatterns; 18private readonly Dictionary<IOperation, TrimAnalysisGenericInstantiationPattern> GenericInstantiationPatterns; 19private readonly Dictionary<IOperation, TrimAnalysisMethodCallPattern> MethodCallPatterns; 20private readonly Dictionary<IOperation, TrimAnalysisReflectionAccessPattern> ReflectionAccessPatterns; 21private readonly Dictionary<IOperation, FeatureCheckReturnValuePattern> FeatureCheckReturnValuePatterns; 29AssignmentPatterns = new Dictionary<IOperation, TrimAnalysisAssignmentPattern>(); 30FieldAccessPatterns = new Dictionary<IOperation, TrimAnalysisFieldAccessPattern>(); 31BackingFieldAccessPatterns = new Dictionary<IOperation, TrimAnalysisBackingFieldAccessPattern>(); 32GenericInstantiationPatterns = new Dictionary<IOperation, TrimAnalysisGenericInstantiationPattern>(); 33MethodCallPatterns = new Dictionary<IOperation, TrimAnalysisMethodCallPattern>(); 34ReflectionAccessPatterns = new Dictionary<IOperation, TrimAnalysisReflectionAccessPattern>(); 35FeatureCheckReturnValuePatterns = new Dictionary<IOperation, FeatureCheckReturnValuePattern>();
TrimAnalysis\TrimAnalysisReflectionAccessPattern.cs (2)
15public IOperation Operation { get; init; } 21IOperation operation,
TrimAnalysis\TrimAnalysisVisitor.cs (14)
67public override FeatureChecksValue GetConditionValue(IOperation branchValueOperation, StateValue state) 83public override MultiValue DefaultVisit(IOperation operation, StateValue argument) 275public override void HandleAssignment(MultiValue source, MultiValue target, IOperation operation, in FeatureContext featureContext) 287public override MultiValue HandleArrayElementRead(MultiValue arrayValue, MultiValue indexValue, IOperation operation) 308public override void HandleArrayElementWrite(MultiValue arrayValue, MultiValue indexValue, MultiValue valueToWrite, IOperation operation, bool merge) 339IOperation operation, 383IOperation operation, 405public override void HandleReturnValue(MultiValue returnValue, IOperation operation, in FeatureContext featureContext) 421public override void HandleReturnConditionValue(FeatureChecksValue returnConditionValue, IOperation operation) 444public override MultiValue HandleDelegateCreation(IMethodSymbol method, IOperation operation, in FeatureContext featureContext) 458private void ProcessGenericArgumentDataFlow(IMethodSymbol method, IOperation operation, in FeatureContext featureContext) 476private void ProcessGenericArgumentDataFlow(IFieldSymbol field, IOperation operation, in FeatureContext featureContext) 493private void ProcessGenericArgumentDataFlow(IPropertySymbol property, IOperation operation, in FeatureContext featureContext) 508private static bool TryGetConstantValue(IOperation operation, out MultiValue constValue)
TrimAnalysis\TrimDataFlowAnalysis.cs (4)
43IOperation operationBlock) 94if (block.Block.Operations.FirstOrDefault() is not IOperation op) 116if (block.Block.Operations.FirstOrDefault() is IOperation firstBlockOp) 120else if (block.Block.BranchValue is IOperation branchOp)
Metrics (185)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Metrics.Legacy (185)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Microsoft.Analyzers.Extra (19)
AsyncCallInsideUsingBlockAnalyzer.cs (3)
73IOperation block) 153private static bool IsTaskAwaited(IOperation block, ILocalSymbol taskSymbol) 182private static bool ReferencesSymbol(IOperation? operation, ILocalSymbol symbol)
CallAnalysis\Fixers\LegacyLoggingFixer.cs (8)
41internal Func<SemanticModel, SyntaxNode, CancellationToken, IOperation?> GetOperation = (sm, sn, t) => sm.GetOperation(sn, t); 392foreach (var o in details.InterpolationArgs) 402foreach (var e in arrayCreation.Initializer!.ElementValues) 441foreach (var a in details.InterpolationArgs) 451foreach (var e in arrayCreation.Initializer!.ElementValues) 453foreach (var d in e.Descendants()) 500foreach (var a in details.InterpolationArgs) 507foreach (var e in arrayCreation.Initializer!.ElementValues)
CallAnalysis\Fixers\LegacyLoggingFixer.FixDetails.cs (5)
32public IReadOnlyList<IOperation>? InterpolationArgs { get; } 54var interpolationArgs = new List<IOperation>(); 61foreach (var o in children[0].ChildOperations) 70var operation = intOp.ChildOperations.First(); 106var op = invocationOp.Arguments[LogLevelParamIndex].Descendants().SingleOrDefault(x => x.Kind == OperationKind.Literal || x.Kind == OperationKind.FieldReference);
Utilities\OperationExtensions.cs (3)
17public static IEnumerable<IOperation> Ancestors(this IOperation operationToStart, IOperation parent)
Microsoft.AspNetCore.Analyzers (1)
CompilationFeatureDetector.cs (1)
42var operation = semanticModel.GetOperation(syntax, cancellationToken);
Microsoft.AspNetCore.App.Analyzers (30)
Authorization\AddAuthorizationBuilderAnalyzer.cs (3)
143private static bool DoesOperationInvolveAuthorizationOptions(IOperation operation, AuthorizationOptionsTypes authorizationOptionsTypes) 172private static bool UsesAuthorizationOptionsSpecificGetters(IOperation operation, AuthorizationOptionsTypes authorizationOptionsTypes) 204private static bool UsesAuthorizationOptionsGetPolicy(IOperation operation, AuthorizationOptionsTypes authorizationOptionsTypes)
Http\RequestDelegateReturnTypeAnalyzer.cs (4)
53foreach (var item in anonymousFunction.Body.Descendants()) 58var resolvedOperation = WalkDownConversion(returnedValue); 84private static IOperation WalkDownConversion(IOperation operation)
Kestrel\ListenOnIPv6AnyAnalyzer.cs (2)
41var nodeOperation = context.SemanticModel.GetOperation(context.Node, context.CancellationToken); 108private static bool IsKestrelServerOptionsType(IOperation? operation, out IInvocationOperation? kestrelOptionsListenInvocation)
RouteHandlers\DetectAmbiguousRoutes.cs (14)
48private static IOperation? ResolveOperation(IOperation operation, WellKnownTypes wellKnownTypes) 61var current = operation; 146public IOperation? ParentOperation { get; } 147public IOperation? Builder { get; } 151public MapOperationGroupKey(IOperation? builder, IOperation parentOperation, RoutePatternTree routePattern, ImmutableArray<string> httpMethods) 180static bool AreBuildersEqual(IOperation builder, IOperation? other) 239var argument1 = GetParameterArgument(method.Parameters[i], arguments1); 240var argument2 = GetParameterArgument(method.Parameters[i], arguments2); 271static IOperation? GetParameterArgument(IParameterSymbol parameter, ImmutableArray<IArgumentOperation> arguments) 285private static IOperation WalkDownConversion(IOperation operation)
RouteHandlers\DetectMisplacedLambdaAttribute.cs (1)
73foreach (var op in Enumerable.Reverse(blockOperation.ChildOperations))
RouteHandlers\DisallowReturningActionResultFromMapMethods.cs (1)
61var returnedValue = returnOperation.ReturnedValue;
RouteHandlers\RouteHandlerAnalyzer.cs (5)
128var methodOperation = syntaxNode.SyntaxTree == invocation.SemanticModel!.SyntaxTree 221private record struct MapOperation(IOperation? Builder, IInvocationOperation Operation, RouteUsageModel RouteUsageModel) 225IOperation? builder = null; 236private static IOperation WalkDownConversion(IOperation operation)
Microsoft.AspNetCore.Components.Analyzers (1)
ComponentParameterUsageAnalyzer.cs (1)
41IOperation leftHandSide;
Microsoft.AspNetCore.Components.SdkAnalyzers (1)
ComponentParameterUsageAnalyzer.cs (1)
41IOperation leftHandSide;
Microsoft.AspNetCore.Http.RequestDelegateGenerator (7)
RequestDelegateGenerator.Parser.cs (1)
20var operation = context.SemanticModel.GetOperation(context.Node, cancellationToken);
RequestDelegateGeneratorSuppressor.cs (1)
71var operation = semanticModel.GetOperation(node, context.CancellationToken);
StaticRouteHandlerModel\InvocationOperationExtensions.cs (5)
26public static bool IsValidOperation(this IOperation? operation, WellKnownTypes wellKnownTypes, [NotNullWhen(true)] out IInvocationOperation? invocationOperation) 83private static IMethodSymbol? ResolveMethodFromOperation(IOperation operation, SemanticModel semanticModel) => operation switch 88IFieldReferenceOperation { Field.IsReadOnly: true } f when ResolveDeclarationOperation(f.Field, semanticModel) is IOperation op => 97private static IOperation? ResolveDeclarationOperation(ISymbol symbol, SemanticModel? semanticModel) 113var operation = targetSemanticModel?.GetOperation(expr);
Microsoft.AspNetCore.Mvc.Analyzers (2)
TagHelpersInCodeBlocksAnalyzer.cs (2)
60var parent = context.Operation.Parent; 113private static bool IsParentMethod(IOperation operation)
Microsoft.AspNetCore.Mvc.Api.Analyzers (15)
ActualApiResponseMetadataFactory.cs (5)
64var returnedValue = armOperation?.Value ?? returnOperation.ReturnedValue; 162foreach (var child in initializer.Initializers) 209var operation = argument.Value; 225IOperation operation, 305var parent = operation.Parent;
ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs (10)
51var parent = ifOperation.Parent; 69var trueStatement = UnwrapSingleStatementBlock(ifOperation.WhenTrue); 95var returnValue = returnOperation.ReturnedValue; 129private static bool IsModelStateIsValidCheck(in ApiControllerSymbolCache symbolCache, IOperation condition) 134var operation = ((IUnaryOperation)condition).Operand; 160IOperation operation, 161IOperation otherOperation, 180private static bool IsModelStateIsValidPropertyAccessor(in ApiControllerSymbolCache symbolCache, IOperation operation) 213private static IOperation UnwrapSingleStatementBlock(IOperation statement)
Microsoft.CodeAnalysis (1411)
Compilation\Compilation.cs (1)
1769internal abstract IConvertibleConversion ClassifyConvertibleConversion(IOperation source, ITypeSymbol destination, out ConstantValue? constantValue);
Compilation\SemanticModel.cs (2)
76public IOperation? GetOperation(SyntaxNode node, CancellationToken cancellationToken = default(CancellationToken)) 81protected abstract IOperation? GetOperationCore(SyntaxNode node, CancellationToken cancellationToken);
DiagnosticAnalyzer\AnalysisContextInfo.cs (4)
17private readonly IOperation? _operation; 47public AnalysisContextInfo(Compilation compilation, IOperation operation) : 59IOperation? operation, 85sb.AppendLine($"{nameof(IOperation)}: {_operation.Kind}");
DiagnosticAnalyzer\AnalyzerDriver.cs (15)
2749ImmutableArray<IOperation> getOperationsToAnalyzeWithStackGuard(ImmutableArray<IOperation> operationBlocksToAnalyze) 2761return ImmutableArray<IOperation>.Empty; 2765void executeOperationsActions(ImmutableArray<IOperation> operationsToAnalyze) 2774void executeOperationsActionsByKind(ImmutableArray<IOperation> operationsToAnalyze, GroupedAnalyzerActions groupedActions, bool arePerSymbolActions) 2800void executeOperationsBlockActions(ImmutableArray<IOperation> operationBlocksToAnalyze, ImmutableArray<IOperation> operationsToAnalyze, ArrayBuilder<ExecutableCodeBlockAnalyzerActions> codeBlockActions) 2948private static ImmutableArray<IOperation> GetOperationBlocksToAnalyze( 2953ArrayBuilder<IOperation> operationBlocksToAnalyze = ArrayBuilder<IOperation>.GetInstance(); 2966private static ImmutableArray<IOperation> GetOperationsToAnalyze( 2967ImmutableArray<IOperation> operationBlocks) 2969ArrayBuilder<IOperation> operationsToAnalyze = ArrayBuilder<IOperation>.GetInstance(); 2972foreach (IOperation operationBlock in operationBlocks)
DiagnosticAnalyzer\AnalyzerExecutor.cs (15)
65private Func<IOperation, ControlFlowGraph>? _lazyGetControlFlowGraph; 67private ConcurrentDictionary<IOperation, ControlFlowGraph>? _lazyControlFlowGraphMap; 69private Func<IOperation, ControlFlowGraph> GetControlFlowGraph 793IOperation operation, 945ImmutableArray<IOperation> operationBlocks, 946ImmutableArray<IOperation> operations, 1205ImmutableArray<IOperation> operationsToAnalyze, 1240ImmutableArray<IOperation> operationsToAnalyze, 1253foreach (var operation in operationsToAnalyze) 1640private bool ShouldExecuteOperation(IOperation operation, DiagnosticAnalyzer analyzer, CancellationToken cancellationToken) 1663private ControlFlowGraph GetControlFlowGraphImpl(IOperation operation) 1669Interlocked.CompareExchange(ref _lazyControlFlowGraphMap, new ConcurrentDictionary<IOperation, ControlFlowGraph>(), null); 1689public void OnOperationBlockActionsExecuted(ImmutableArray<IOperation> operationBlocks) 1698foreach (var operationBlock in operationBlocks) 1700var root = operationBlock.GetRootOperation();
DiagnosticAnalyzer\DiagnosticAnalysisContext.cs (54)
177/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 178/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 181/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 182/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 189/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 190/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 193/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 194/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 472/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 473/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 476/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 477/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 484/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 485/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 488/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 489/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 984/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 985/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 988/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 989/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 996/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 997/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 1000/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 1001/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 1236private readonly ImmutableArray<IOperation> _operationBlocks; 1240private readonly Func<IOperation, ControlFlowGraph>? _getControlFlowGraph; 1249public ImmutableArray<IOperation> OperationBlocks => _operationBlocks; 1290ImmutableArray<IOperation> operationBlocks, 1301ImmutableArray<IOperation> operationBlocks, 1305Func<IOperation, ControlFlowGraph>? getControlFlowGraph, 1331/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 1334/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 1335/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 1342/// Register an action to be executed at completion of semantic analysis of an <see cref="IOperation"/> with an appropriate Kind. 1343/// An operation action can report <see cref="Diagnostic"/>s about <see cref="IOperation"/>s, and can also collect 1346/// <param name="action">Action to be executed at completion of semantic analysis of an <see cref="IOperation"/>.</param> 1347/// <param name="operationKinds">Action will be executed only if an <see cref="IOperation"/>'s Kind matches one of the operation kind values.</param> 1354public ControlFlowGraph GetControlFlowGraph(IOperation operationBlock) 1376private readonly ImmutableArray<IOperation> _operationBlocks; 1382private readonly Func<IOperation, ControlFlowGraph>? _getControlFlowGraph; 1391public ImmutableArray<IOperation> OperationBlocks => _operationBlocks; 1432ImmutableArray<IOperation> operationBlocks, 1445ImmutableArray<IOperation> operationBlocks, 1451Func<IOperation, ControlFlowGraph>? getControlFlowGraph, 1487public ControlFlowGraph GetControlFlowGraph(IOperation operationBlock) 1766/// An operation action can use an <see cref="OperationAnalysisContext"/> to report <see cref="Diagnostic"/>s for an <see cref="IOperation"/>. 1770private readonly IOperation _operation; 1776private readonly Func<IOperation, ControlFlowGraph>? _getControlFlowGraph; 1780/// <see cref="IOperation"/> that is the subject of the analysis. 1782public IOperation Operation => _operation; 1790/// <see cref="CodeAnalysis.Compilation"/> containing the <see cref="IOperation"/>. 1823IOperation operation, 1835IOperation operation, 1841Func<IOperation, ControlFlowGraph>? getControlFlowGraph,
DiagnosticAnalyzer\DiagnosticAnalysisContextHelpers.cs (3)
171internal static ControlFlowGraph GetControlFlowGraph(IOperation operation, Func<IOperation, ControlFlowGraph>? getControlFlowGraph, CancellationToken cancellationToken) 173IOperation rootOperation = operation.GetRootOperation();
DiagnosticAnalyzer\DiagnosticStartAnalysisScope.cs (2)
337ImmutableArray<IOperation> operationBlocks, 341Func<IOperation, ControlFlowGraph> getControlFlowGraph,
Generated\FlowAnalysis.Generated.cs (2)
35IOperation Value { get; } 81IOperation Operand { get; }
Generated\OperationKind.Generated.cs (1)
17/// <summary>Indicates an <see cref="IOperation"/> for a construct that is not implemented yet.</summary>
Generated\Operations.Generated.cs (623)
62ImmutableArray<IOperation> Operations { get; } 127IOperation Value { get; } 160IOperation Body { get; } 193IOperation LoopControlVariable { get; } 197IOperation Collection { get; } 202ImmutableArray<IOperation> NextVariables { get; } 227ImmutableArray<IOperation> Before { get; } 237IOperation? Condition { get; } 241ImmutableArray<IOperation> AtLoopBottom { get; } 261IOperation LoopControlVariable { get; } 265IOperation InitialValue { get; } 269IOperation LimitValue { get; } 274IOperation StepValue { get; } 282ImmutableArray<IOperation> NextVariables { get; } 303IOperation? Condition { get; } 319IOperation? IgnoredCondition { get; } 348IOperation? Operation { get; } 424IOperation? ReturnedValue { get; } 449IOperation LockedValue { get; } 453IOperation Body { get; } 515IOperation Resources { get; } 519IOperation Body { get; } 553IOperation Operation { get; } 709IOperation Operand { get; } 785IOperation? Instance { get; } 822IOperation ArrayReference { get; } 826ImmutableArray<IOperation> Indices { get; } 902IOperation? Instance { get; } 1061IOperation Operand { get; } 1111IOperation LeftOperand { get; } 1115IOperation RightOperand { get; } 1170IOperation Condition { get; } 1174IOperation WhenTrue { get; } 1178IOperation? WhenFalse { get; } 1214IOperation Value { get; } 1218IOperation WhenNull { get; } 1341ImmutableArray<IOperation> DimensionSizes { get; } 1397IOperation ValueOperand { get; } 1432IOperation Operation { get; } 1453IOperation Target { get; } 1457IOperation Value { get; } 1557IOperation Operand { get; } 1582IOperation EventReference { get; } 1586IOperation HandlerValue { get; } 1616IOperation Operation { get; } 1620IOperation WhenNotNull { get; } 1693ImmutableArray<IOperation> Initializers { get; } 1724ImmutableArray<IOperation> Initializers { get; } 1755IOperation InitializedMember { get; } 1781ImmutableArray<IOperation> Arguments { get; } 1807IOperation Argument { get; } 1832ImmutableArray<IOperation> Elements { get; } 1835/// Natural type can be different from <see cref="IOperation.Type" /> depending on the 1867ImmutableArray<IOperation> Arguments { get; } 1892IOperation? Instance { get; } 1944IOperation Operation { get; } 1948ImmutableArray<IOperation> Arguments { get; } 1972IOperation Operation { get; } 1976ImmutableArray<IOperation> Arguments { get; } 2006IOperation Operation { get; } 2031IOperation Target { get; } 2124IOperation Reference { get; } 2148IOperation Value { get; } 2194IOperation Target { get; } 2229IOperation? Exception { get; } 2282IOperation Expression { get; } 2327IOperation Value { get; } 2448ImmutableArray<IOperation> ElementValues { get; } 2491ImmutableArray<IOperation> IgnoredArguments { get; } 2538ImmutableArray<IOperation> IgnoredDimensions { get; } 2571IOperation Value { get; } 2608IOperation? ExceptionDeclarationOrExpression { get; } 2620IOperation? Filter { get; } 2653ImmutableArray<IOperation> Body { get; } 2725IOperation? Guard { get; } 2745IOperation MinimumValue { get; } 2749IOperation MaximumValue { get; } 2769IOperation Value { get; } 2794IOperation Value { get; } 2836IOperation Text { get; } 2861IOperation Expression { get; } 2865IOperation? Alignment { get; } 2869IOperation? FormatString { get; } 2917IOperation Value { get; } 2980IOperation LeftOperand { get; } 2984IOperation RightOperand { get; } 3058IOperation? Initializer { get; } 3131IOperation? LeftOperand { get; } 3135IOperation? RightOperand { get; } 3199IOperation Operand { get; } 3203ImmutableArray<IOperation> DimensionSizes { get; } 3283IOperation Value { get; } 3313IOperation? Guard { get; } 3317IOperation Value { get; } 3341IOperation Member { get; } 3356IOperation Group { get; } 3357IOperation Aggregation { get; } 3379IOperation Body { get; } 3432IOperation Pointer { get; } 3452IOperation Body { get; } 3456IOperation Value { get; } 3593IOperation Value { get; } 3617IOperation Operand { get; } 3644IOperation HandlerCreation { get; } 3666IOperation Content { get; } 3685IOperation Left { get; } 3690IOperation Right { get; } 3711IOperation AppendCall { get; } 3752IOperation Target { get; } 3834IOperation Instance { get; } 3838IOperation Argument { get; } 3895IOperation Operation { get; } 3919IOperation Instance { get; } 3923IOperation Argument { get; } 3971ImmutableArray<IOperation> ConstructArguments { get; } 3980ImmutableArray<IOperation> Elements { get; } 4004IOperation Operand { get; } 4039internal BlockOperation(ImmutableArray<IOperation> operations, ImmutableArray<ILocalSymbol> locals, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4045public ImmutableArray<IOperation> Operations { get; } 4049internal override IOperation GetCurrent(int slot, int index) 4104internal override IOperation GetCurrent(int slot, int index) 4151internal SwitchOperation(ImmutableArray<ILocalSymbol> locals, IOperation value, ImmutableArray<ISwitchCaseOperation> cases, ILabelSymbol exitLabel, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4160public IOperation Value { get; } 4166internal override IOperation GetCurrent(int slot, int index) 4221protected BaseLoopOperation(IOperation body, ImmutableArray<ILocalSymbol> locals, ILabelSymbol continueLabel, ILabelSymbol exitLabel, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4230public IOperation Body { get; } 4237internal ForEachLoopOperation(IOperation loopControlVariable, IOperation collection, ImmutableArray<IOperation> nextVariables, ForEachLoopOperationInfo? info, bool isAsynchronous, IOperation body, ImmutableArray<ILocalSymbol> locals, ILabelSymbol continueLabel, ILabelSymbol exitLabel, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4246public IOperation LoopControlVariable { get; } 4247public IOperation Collection { get; } 4248public ImmutableArray<IOperation> NextVariables { get; } 4256internal override IOperation GetCurrent(int slot, int index) 4327internal ForLoopOperation(ImmutableArray<IOperation> before, ImmutableArray<ILocalSymbol> conditionLocals, IOperation? condition, ImmutableArray<IOperation> atLoopBottom, IOperation body, ImmutableArray<ILocalSymbol> locals, ILabelSymbol continueLabel, ILabelSymbol exitLabel, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4335public ImmutableArray<IOperation> Before { get; } 4337public IOperation? Condition { get; } 4338public ImmutableArray<IOperation> AtLoopBottom { get; } 4344internal override IOperation GetCurrent(int slot, int index) 4419internal ForToLoopOperation(IOperation loopControlVariable, IOperation initialValue, IOperation limitValue, IOperation stepValue, bool isChecked, ImmutableArray<IOperation> nextVariables, (ILocalSymbol LoopObject, ForToLoopOperationUserDefinedInfo UserDefinedInfo) info, IOperation body, ImmutableArray<ILocalSymbol> locals, ILabelSymbol continueLabel, ILabelSymbol exitLabel, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4430public IOperation LoopControlVariable { get; } 4431public IOperation InitialValue { get; } 4432public IOperation LimitValue { get; } 4433public IOperation StepValue { get; } 4435public ImmutableArray<IOperation> NextVariables { get; } 4444internal override IOperation GetCurrent(int slot, int index) 4531internal WhileLoopOperation(IOperation? condition, bool conditionIsTop, bool conditionIsUntil, IOperation? ignoredCondition, IOperation body, ImmutableArray<ILocalSymbol> locals, ILabelSymbol continueLabel, ILabelSymbol exitLabel, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4539public IOperation? Condition { get; } 4542public IOperation? IgnoredCondition { get; } 4555internal LabeledOperation(ILabelSymbol label, IOperation? operation, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4562public IOperation? Operation { get; } 4565internal override IOperation GetCurrent(int slot, int index) 4617internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 4631internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 4642internal ReturnOperation(IOperation? returnedValue, OperationKind kind, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4648public IOperation? ReturnedValue { get; } 4651internal override IOperation GetCurrent(int slot, int index) 4694internal LockOperation(IOperation lockedValue, IOperation body, ILocalSymbol? lockTakenSymbol, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4701public IOperation LockedValue { get; } 4702public IOperation Body { get; } 4707internal override IOperation GetCurrent(int slot, int index) 4774internal override IOperation GetCurrent(int slot, int index) 4837internal UsingOperation(IOperation resources, IOperation body, ImmutableArray<ILocalSymbol> locals, bool isAsynchronous, DisposeOperationInfo disposeInfo, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4846public IOperation Resources { get; } 4847public IOperation Body { get; } 4854internal override IOperation GetCurrent(int slot, int index) 4905internal ExpressionStatementOperation(IOperation operation, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 4910public IOperation Operation { get; } 4913internal override IOperation GetCurrent(int slot, int index) 4969internal override IOperation GetCurrent(int slot, int index) 5023internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 5037internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 5059internal override IOperation GetCurrent(int slot, int index) 5121internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 5132internal ConversionOperation(IOperation operand, IConvertibleConversion conversion, bool isTryCast, bool isChecked, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 5142public IOperation Operand { get; } 5149internal override IOperation GetCurrent(int slot, int index) 5192internal InvocationOperation(IMethodSymbol targetMethod, ITypeSymbol? constrainedToType, IOperation? instance, bool isVirtual, ImmutableArray<IArgumentOperation> arguments, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 5204public IOperation? Instance { get; } 5210internal override IOperation GetCurrent(int slot, int index) 5265internal ArrayElementReferenceOperation(IOperation arrayReference, ImmutableArray<IOperation> indices, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 5272public IOperation ArrayReference { get; } 5273public ImmutableArray<IOperation> Indices { get; } 5277internal override IOperation GetCurrent(int slot, int index) 5343internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 5362internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 5373protected BaseMemberReferenceOperation(IOperation? instance, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 5378public IOperation? Instance { get; } 5383internal FieldReferenceOperation(IFieldSymbol field, bool isDeclaration, IOperation? instance, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 5395internal override IOperation GetCurrent(int slot, int index) 5438internal MethodReferenceOperation(IMethodSymbol method, ITypeSymbol? constrainedToType, bool isVirtual, IOperation? instance, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 5451internal override IOperation GetCurrent(int slot, int index) 5494internal PropertyReferenceOperation(IPropertySymbol property, ITypeSymbol? constrainedToType, ImmutableArray<IArgumentOperation> arguments, IOperation? instance, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 5508internal override IOperation GetCurrent(int slot, int index) 5563internal EventReferenceOperation(IEventSymbol @event, ITypeSymbol? constrainedToType, IOperation? instance, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 5574internal override IOperation GetCurrent(int slot, int index) 5617internal UnaryOperation(UnaryOperatorKind operatorKind, IOperation operand, bool isLifted, bool isChecked, IMethodSymbol? operatorMethod, ITypeSymbol? constrainedToType, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 5630public IOperation Operand { get; } 5637internal override IOperation GetCurrent(int slot, int index) 5680internal BinaryOperation(BinaryOperatorKind operatorKind, IOperation leftOperand, IOperation rightOperand, bool isLifted, bool isChecked, bool isCompareText, IMethodSymbol? operatorMethod, ITypeSymbol? constrainedToType, IMethodSymbol? unaryOperatorMethod, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 5696public IOperation LeftOperand { get; } 5697public IOperation RightOperand { get; } 5707internal override IOperation GetCurrent(int slot, int index) 5758internal ConditionalOperation(IOperation condition, IOperation whenTrue, IOperation? whenFalse, bool isRef, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 5768public IOperation Condition { get; } 5769public IOperation WhenTrue { get; } 5770public IOperation? WhenFalse { get; } 5776internal override IOperation GetCurrent(int slot, int index) 5835internal CoalesceOperation(IOperation value, IOperation whenNull, IConvertibleConversion valueConversion, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 5844public IOperation Value { get; } 5845public IOperation WhenNull { get; } 5851internal override IOperation GetCurrent(int slot, int index) 5912internal override IOperation GetCurrent(int slot, int index) 5970internal override IOperation GetCurrent(int slot, int index) 6034internal override IOperation GetCurrent(int slot, int index) 6077internal ArrayCreationOperation(ImmutableArray<IOperation> dimensionSizes, IArrayInitializerOperation? initializer, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6084public ImmutableArray<IOperation> DimensionSizes { get; } 6089internal override IOperation GetCurrent(int slot, int index) 6152internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 6163internal IsTypeOperation(IOperation valueOperand, ITypeSymbol typeOperand, bool isNegated, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6171public IOperation ValueOperand { get; } 6176internal override IOperation GetCurrent(int slot, int index) 6219internal AwaitOperation(IOperation operation, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6225public IOperation Operation { get; } 6228internal override IOperation GetCurrent(int slot, int index) 6271protected BaseAssignmentOperation(IOperation target, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 6277public IOperation Target { get; } 6278public IOperation Value { get; } 6282internal SimpleAssignmentOperation(bool isRef, IOperation target, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 6293internal override IOperation GetCurrent(int slot, int index) 6344internal CompoundAssignmentOperation(IConvertibleConversion inConversion, IConvertibleConversion outConversion, BinaryOperatorKind operatorKind, bool isLifted, bool isChecked, IMethodSymbol? operatorMethod, ITypeSymbol? constrainedToType, IOperation target, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6368internal override IOperation GetCurrent(int slot, int index) 6419internal ParenthesizedOperation(IOperation operand, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 6426public IOperation Operand { get; } 6429internal override IOperation GetCurrent(int slot, int index) 6472internal EventAssignmentOperation(IOperation eventReference, IOperation handlerValue, bool adds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6480public IOperation EventReference { get; } 6481public IOperation HandlerValue { get; } 6486internal override IOperation GetCurrent(int slot, int index) 6537internal ConditionalAccessOperation(IOperation operation, IOperation whenNotNull, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6544public IOperation Operation { get; } 6545public IOperation WhenNotNull { get; } 6549internal override IOperation GetCurrent(int slot, int index) 6606internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 6627internal override IOperation GetCurrent(int slot, int index) 6674internal AnonymousObjectCreationOperation(ImmutableArray<IOperation> initializers, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6680public ImmutableArray<IOperation> Initializers { get; } 6683internal override IOperation GetCurrent(int slot, int index) 6730internal ObjectOrCollectionInitializerOperation(ImmutableArray<IOperation> initializers, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6736public ImmutableArray<IOperation> Initializers { get; } 6739internal override IOperation GetCurrent(int slot, int index) 6786internal MemberInitializerOperation(IOperation initializedMember, IObjectOrCollectionInitializerOperation initializer, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6793public IOperation InitializedMember { get; } 6798internal override IOperation GetCurrent(int slot, int index) 6849internal NameOfOperation(IOperation argument, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 6856public IOperation Argument { get; } 6859internal override IOperation GetCurrent(int slot, int index) 6902internal TupleOperation(ImmutableArray<IOperation> elements, ITypeSymbol? naturalType, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6909public ImmutableArray<IOperation> Elements { get; } 6913internal override IOperation GetCurrent(int slot, int index) 6960internal DynamicMemberReferenceOperation(IOperation? instance, string memberName, ImmutableArray<ITypeSymbol> typeArguments, ITypeSymbol? containingType, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 6969public IOperation? Instance { get; } 6975internal override IOperation GetCurrent(int slot, int index) 7018internal TranslatedQueryOperation(IOperation operation, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7024public IOperation Operation { get; } 7027internal override IOperation GetCurrent(int slot, int index) 7070internal DelegateCreationOperation(IOperation target, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7076public IOperation Target { get; } 7079internal override IOperation GetCurrent(int slot, int index) 7129internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 7148internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 7168internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 7179internal AddressOfOperation(IOperation reference, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7185public IOperation Reference { get; } 7188internal override IOperation GetCurrent(int slot, int index) 7231internal IsPatternOperation(IOperation value, IPatternOperation pattern, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7238public IOperation Value { get; } 7243internal override IOperation GetCurrent(int slot, int index) 7294internal IncrementOrDecrementOperation(bool isPostfix, bool isLifted, bool isChecked, IOperation target, IMethodSymbol? operatorMethod, ITypeSymbol? constrainedToType, OperationKind kind, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7309public IOperation Target { get; } 7314internal override IOperation GetCurrent(int slot, int index) 7357internal ThrowOperation(IOperation? exception, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7363public IOperation? Exception { get; } 7366internal override IOperation GetCurrent(int slot, int index) 7409internal DeconstructionAssignmentOperation(IOperation target, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7417internal override IOperation GetCurrent(int slot, int index) 7468internal DeclarationExpressionOperation(IOperation expression, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 7474public IOperation Expression { get; } 7477internal override IOperation GetCurrent(int slot, int index) 7526internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 7537protected BaseSymbolInitializerOperation(ImmutableArray<ILocalSymbol> locals, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7544public IOperation Value { get; } 7548internal FieldInitializerOperation(ImmutableArray<IFieldSymbol> initializedFields, ImmutableArray<ILocalSymbol> locals, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7556internal override IOperation GetCurrent(int slot, int index) 7599internal VariableInitializerOperation(ImmutableArray<ILocalSymbol> locals, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7603internal override IOperation GetCurrent(int slot, int index) 7646internal PropertyInitializerOperation(ImmutableArray<IPropertySymbol> initializedProperties, ImmutableArray<ILocalSymbol> locals, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7654internal override IOperation GetCurrent(int slot, int index) 7697internal ParameterInitializerOperation(IParameterSymbol parameter, ImmutableArray<ILocalSymbol> locals, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7705internal override IOperation GetCurrent(int slot, int index) 7748internal ArrayInitializerOperation(ImmutableArray<IOperation> elementValues, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7753public ImmutableArray<IOperation> ElementValues { get; } 7756internal override IOperation GetCurrent(int slot, int index) 7803internal VariableDeclaratorOperation(ILocalSymbol symbol, IVariableInitializerOperation? initializer, ImmutableArray<IOperation> ignoredArguments, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7812public ImmutableArray<IOperation> IgnoredArguments { get; } 7816internal override IOperation GetCurrent(int slot, int index) 7871internal VariableDeclarationOperation(ImmutableArray<IVariableDeclaratorOperation> declarators, IVariableInitializerOperation? initializer, ImmutableArray<IOperation> ignoredDimensions, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7880public ImmutableArray<IOperation> IgnoredDimensions { get; } 7885internal override IOperation GetCurrent(int slot, int index) 7952internal ArgumentOperation(ArgumentKind argumentKind, IParameterSymbol? parameter, IOperation value, IConvertibleConversion inConversion, IConvertibleConversion outConversion, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 7963public IOperation Value { get; } 7970internal override IOperation GetCurrent(int slot, int index) 8013internal CatchClauseOperation(IOperation? exceptionDeclarationOrExpression, ITypeSymbol exceptionType, ImmutableArray<ILocalSymbol> locals, IOperation? filter, IBlockOperation handler, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8022public IOperation? ExceptionDeclarationOrExpression { get; } 8025public IOperation? Filter { get; } 8031internal override IOperation GetCurrent(int slot, int index) 8090internal SwitchCaseOperation(ImmutableArray<ICaseClauseOperation> clauses, ImmutableArray<IOperation> body, ImmutableArray<ILocalSymbol> locals, IOperation? condition, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8099public ImmutableArray<IOperation> Body { get; } 8101public IOperation? Condition { get; } 8105internal override IOperation GetCurrent(int slot, int index) 8177internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 8188internal PatternCaseClauseOperation(ILabelSymbol label, IPatternOperation pattern, IOperation? guard, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8196public IOperation? Guard { get; } 8200internal override IOperation GetCurrent(int slot, int index) 8251internal RangeCaseClauseOperation(IOperation minimumValue, IOperation maximumValue, ILabelSymbol? label, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8257public IOperation MinimumValue { get; } 8258public IOperation MaximumValue { get; } 8262internal override IOperation GetCurrent(int slot, int index) 8313internal RelationalCaseClauseOperation(IOperation value, BinaryOperatorKind relation, ILabelSymbol? label, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8319public IOperation Value { get; } 8323internal override IOperation GetCurrent(int slot, int index) 8366internal SingleValueCaseClauseOperation(IOperation value, ILabelSymbol? label, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8371public IOperation Value { get; } 8374internal override IOperation GetCurrent(int slot, int index) 8422internal InterpolatedStringTextOperation(IOperation text, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8427public IOperation Text { get; } 8430internal override IOperation GetCurrent(int slot, int index) 8473internal InterpolationOperation(IOperation expression, IOperation? alignment, IOperation? formatString, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8480public IOperation Expression { get; } 8481public IOperation? Alignment { get; } 8482public IOperation? FormatString { get; } 8487internal override IOperation GetCurrent(int slot, int index) 8557internal ConstantPatternOperation(IOperation value, ITypeSymbol inputType, ITypeSymbol narrowedType, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8562public IOperation Value { get; } 8565internal override IOperation GetCurrent(int slot, int index) 8619internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 8630internal TupleBinaryOperation(BinaryOperatorKind operatorKind, IOperation leftOperand, IOperation rightOperand, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 8639public IOperation LeftOperand { get; } 8640public IOperation RightOperand { get; } 8644internal override IOperation GetCurrent(int slot, int index) 8711internal override IOperation GetCurrent(int slot, int index) 8762internal ConstructorBodyOperation(ImmutableArray<ILocalSymbol> locals, IOperation? initializer, IBlockOperation? blockBody, IBlockOperation? expressionBody, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8769public IOperation? Initializer { get; } 8774internal override IOperation GetCurrent(int slot, int index) 8841internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 8852internal FlowCaptureOperation(CaptureId id, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 8859public IOperation Value { get; } 8862internal override IOperation GetCurrent(int slot, int index) 8916internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 8927internal IsNullOperation(IOperation operand, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) 8934public IOperation Operand { get; } 8937internal override IOperation GetCurrent(int slot, int index) 8986internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 9005internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 9016internal CoalesceAssignmentOperation(IOperation target, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 9024internal override IOperation GetCurrent(int slot, int index) 9075internal RangeOperation(IOperation? leftOperand, IOperation? rightOperand, bool isLifted, IMethodSymbol? method, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 9084public IOperation? LeftOperand { get; } 9085public IOperation? RightOperand { get; } 9091internal override IOperation GetCurrent(int slot, int index) 9152internal override IOperation GetCurrent(int slot, int index) 9199internal ReDimClauseOperation(IOperation operand, ImmutableArray<IOperation> dimensionSizes, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 9205public IOperation Operand { get; } 9206public ImmutableArray<IOperation> DimensionSizes { get; } 9210internal override IOperation GetCurrent(int slot, int index) 9282internal override IOperation GetCurrent(int slot, int index) 9344internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 9355internal SwitchExpressionOperation(IOperation value, ImmutableArray<ISwitchExpressionArmOperation> arms, bool isExhaustive, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 9363public IOperation Value { get; } 9369internal override IOperation GetCurrent(int slot, int index) 9424internal SwitchExpressionArmOperation(IPatternOperation pattern, IOperation? guard, IOperation value, ImmutableArray<ILocalSymbol> locals, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 9433public IOperation? Guard { get; } 9434public IOperation Value { get; } 9440internal override IOperation GetCurrent(int slot, int index) 9499internal PropertySubpatternOperation(IOperation member, IPatternOperation pattern, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 9505public IOperation Member { get; } 9510internal override IOperation GetCurrent(int slot, int index) 9561internal AggregateQueryOperation(IOperation group, IOperation aggregation, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 9568public IOperation Group { get; } 9569public IOperation Aggregation { get; } 9573internal override IOperation GetCurrent(int slot, int index) 9624internal FixedOperation(ImmutableArray<ILocalSymbol> locals, IVariableDeclarationGroupOperation variables, IOperation body, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 9633public IOperation Body { get; } 9637internal override IOperation GetCurrent(int slot, int index) 9697internal override IOperation GetCurrent(int slot, int index) 9748internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 9759internal WithStatementOperation(IOperation body, IOperation value, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 9765public IOperation Body { get; } 9766public IOperation Value { get; } 9770internal override IOperation GetCurrent(int slot, int index) 9833internal override IOperation GetCurrent(int slot, int index) 9884internal override IOperation GetCurrent(int slot, int index) 9940internal override IOperation GetCurrent(int slot, int index) 9998internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 10009internal RelationalPatternOperation(BinaryOperatorKind operatorKind, IOperation value, ITypeSymbol inputType, ITypeSymbol narrowedType, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 10016public IOperation Value { get; } 10019internal override IOperation GetCurrent(int slot, int index) 10062internal WithOperation(IOperation operand, IMethodSymbol? cloneMethod, IObjectOrCollectionInitializerOperation initializer, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 10070public IOperation Operand { get; } 10076internal override IOperation GetCurrent(int slot, int index) 10127internal InterpolatedStringHandlerCreationOperation(IOperation handlerCreation, bool handlerCreationHasSuccessParameter, bool handlerAppendCallsReturnBool, IOperation content, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 10136public IOperation HandlerCreation { get; } 10139public IOperation Content { get; } 10143internal override IOperation GetCurrent(int slot, int index) 10194internal InterpolatedStringAdditionOperation(IOperation left, IOperation right, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 10200public IOperation Left { get; } 10201public IOperation Right { get; } 10205internal override IOperation GetCurrent(int slot, int index) 10256internal InterpolatedStringAppendOperation(IOperation appendCall, OperationKind kind, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 10262public IOperation AppendCall { get; } 10265internal override IOperation GetCurrent(int slot, int index) 10317internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 10328internal FunctionPointerInvocationOperation(IOperation target, ImmutableArray<IArgumentOperation> arguments, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 10335public IOperation Target { get; } 10340internal override IOperation GetCurrent(int slot, int index) 10409internal override IOperation GetCurrent(int slot, int index) 10466internal override IOperation GetCurrent(int slot, int index) 10509internal ImplicitIndexerReferenceOperation(IOperation instance, IOperation argument, ISymbol lengthSymbol, ISymbol indexerSymbol, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 10518public IOperation Instance { get; } 10519public IOperation Argument { get; } 10525internal override IOperation GetCurrent(int slot, int index) 10584internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 10595internal AttributeOperation(IOperation operation, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 10600public IOperation Operation { get; } 10603internal override IOperation GetCurrent(int slot, int index) 10646internal InlineArrayAccessOperation(IOperation instance, IOperation argument, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 10653public IOperation Instance { get; } 10654public IOperation Argument { get; } 10658internal override IOperation GetCurrent(int slot, int index) 10709internal CollectionExpressionOperation(IMethodSymbol? constructMethod, ImmutableArray<IOperation> constructArguments, ImmutableArray<IOperation> elements, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) 10718public ImmutableArray<IOperation> ConstructArguments { get; } 10719public ImmutableArray<IOperation> Elements { get; } 10723internal override IOperation GetCurrent(int slot, int index) 10782internal SpreadOperation(IOperation operand, ITypeSymbol? elementType, IConvertibleConversion elementConversion, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit) 10789public IOperation Operand { get; } 10795internal override IOperation GetCurrent(int slot, int index) 10844internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 10855internal sealed partial class OperationCloner : OperationVisitor<object?, IOperation> 10859public static T CloneOperation<T>(T operation) where T : IOperation => s_instance.Visit(operation); 10862private T? Visit<T>(T? node) where T : IOperation? => (T?)Visit(node, argument: null); 10863public override IOperation DefaultVisit(IOperation operation, object? argument) => throw ExceptionUtilities.Unreachable(); 10864private ImmutableArray<T> VisitArray<T>(ImmutableArray<T> nodes) where T : IOperation => nodes.SelectAsArray((n, @this) => @this.Visit(n), this)!; 10865private ImmutableArray<(ISymbol, T)> VisitArray<T>(ImmutableArray<(ISymbol, T)> nodes) where T : IOperation => nodes.SelectAsArray((n, @this) => (n.Item1, @this.Visit(n.Item2)), this)!; 10866public override IOperation VisitBlock(IBlockOperation operation, object? argument) 10871public override IOperation VisitVariableDeclarationGroup(IVariableDeclarationGroupOperation operation, object? argument) 10876public override IOperation VisitSwitch(ISwitchOperation operation, object? argument) 10881public override IOperation VisitForEachLoop(IForEachLoopOperation operation, object? argument) 10886public override IOperation VisitForLoop(IForLoopOperation operation, object? argument) 10891public override IOperation VisitForToLoop(IForToLoopOperation operation, object? argument) 10896public override IOperation VisitWhileLoop(IWhileLoopOperation operation, object? argument) 10901public override IOperation VisitLabeled(ILabeledOperation operation, object? argument) 10906public override IOperation VisitBranch(IBranchOperation operation, object? argument) 10911public override IOperation VisitEmpty(IEmptyOperation operation, object? argument) 10916public override IOperation VisitReturn(IReturnOperation operation, object? argument) 10921public override IOperation VisitLock(ILockOperation operation, object? argument) 10926public override IOperation VisitTry(ITryOperation operation, object? argument) 10931public override IOperation VisitUsing(IUsingOperation operation, object? argument) 10936public override IOperation VisitExpressionStatement(IExpressionStatementOperation operation, object? argument) 10941public override IOperation VisitLocalFunction(ILocalFunctionOperation operation, object? argument) 10946public override IOperation VisitStop(IStopOperation operation, object? argument) 10951public override IOperation VisitEnd(IEndOperation operation, object? argument) 10956public override IOperation VisitRaiseEvent(IRaiseEventOperation operation, object? argument) 10961public override IOperation VisitLiteral(ILiteralOperation operation, object? argument) 10966public override IOperation VisitConversion(IConversionOperation operation, object? argument) 10971public override IOperation VisitInvocation(IInvocationOperation operation, object? argument) 10976public override IOperation VisitArrayElementReference(IArrayElementReferenceOperation operation, object? argument) 10981public override IOperation VisitLocalReference(ILocalReferenceOperation operation, object? argument) 10986public override IOperation VisitParameterReference(IParameterReferenceOperation operation, object? argument) 10991public override IOperation VisitFieldReference(IFieldReferenceOperation operation, object? argument) 10996public override IOperation VisitMethodReference(IMethodReferenceOperation operation, object? argument) 11001public override IOperation VisitPropertyReference(IPropertyReferenceOperation operation, object? argument) 11006public override IOperation VisitEventReference(IEventReferenceOperation operation, object? argument) 11011public override IOperation VisitUnaryOperator(IUnaryOperation operation, object? argument) 11016public override IOperation VisitBinaryOperator(IBinaryOperation operation, object? argument) 11021public override IOperation VisitConditional(IConditionalOperation operation, object? argument) 11026public override IOperation VisitCoalesce(ICoalesceOperation operation, object? argument) 11031public override IOperation VisitAnonymousFunction(IAnonymousFunctionOperation operation, object? argument) 11036public override IOperation VisitObjectCreation(IObjectCreationOperation operation, object? argument) 11041public override IOperation VisitTypeParameterObjectCreation(ITypeParameterObjectCreationOperation operation, object? argument) 11046public override IOperation VisitArrayCreation(IArrayCreationOperation operation, object? argument) 11051public override IOperation VisitInstanceReference(IInstanceReferenceOperation operation, object? argument) 11056public override IOperation VisitIsType(IIsTypeOperation operation, object? argument) 11061public override IOperation VisitAwait(IAwaitOperation operation, object? argument) 11066public override IOperation VisitSimpleAssignment(ISimpleAssignmentOperation operation, object? argument) 11071public override IOperation VisitCompoundAssignment(ICompoundAssignmentOperation operation, object? argument) 11076public override IOperation VisitParenthesized(IParenthesizedOperation operation, object? argument) 11081public override IOperation VisitEventAssignment(IEventAssignmentOperation operation, object? argument) 11086public override IOperation VisitConditionalAccess(IConditionalAccessOperation operation, object? argument) 11091public override IOperation VisitConditionalAccessInstance(IConditionalAccessInstanceOperation operation, object? argument) 11096public override IOperation VisitInterpolatedString(IInterpolatedStringOperation operation, object? argument) 11101public override IOperation VisitAnonymousObjectCreation(IAnonymousObjectCreationOperation operation, object? argument) 11106public override IOperation VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation, object? argument) 11111public override IOperation VisitMemberInitializer(IMemberInitializerOperation operation, object? argument) 11116public override IOperation VisitNameOf(INameOfOperation operation, object? argument) 11121public override IOperation VisitTuple(ITupleOperation operation, object? argument) 11126public override IOperation VisitDynamicMemberReference(IDynamicMemberReferenceOperation operation, object? argument) 11131public override IOperation VisitTranslatedQuery(ITranslatedQueryOperation operation, object? argument) 11136public override IOperation VisitDelegateCreation(IDelegateCreationOperation operation, object? argument) 11141public override IOperation VisitDefaultValue(IDefaultValueOperation operation, object? argument) 11146public override IOperation VisitTypeOf(ITypeOfOperation operation, object? argument) 11151public override IOperation VisitSizeOf(ISizeOfOperation operation, object? argument) 11156public override IOperation VisitAddressOf(IAddressOfOperation operation, object? argument) 11161public override IOperation VisitIsPattern(IIsPatternOperation operation, object? argument) 11166public override IOperation VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation, object? argument) 11171public override IOperation VisitThrow(IThrowOperation operation, object? argument) 11176public override IOperation VisitDeconstructionAssignment(IDeconstructionAssignmentOperation operation, object? argument) 11181public override IOperation VisitDeclarationExpression(IDeclarationExpressionOperation operation, object? argument) 11186public override IOperation VisitOmittedArgument(IOmittedArgumentOperation operation, object? argument) 11191public override IOperation VisitFieldInitializer(IFieldInitializerOperation operation, object? argument) 11196public override IOperation VisitVariableInitializer(IVariableInitializerOperation operation, object? argument) 11201public override IOperation VisitPropertyInitializer(IPropertyInitializerOperation operation, object? argument) 11206public override IOperation VisitParameterInitializer(IParameterInitializerOperation operation, object? argument) 11211public override IOperation VisitArrayInitializer(IArrayInitializerOperation operation, object? argument) 11216public override IOperation VisitVariableDeclarator(IVariableDeclaratorOperation operation, object? argument) 11221public override IOperation VisitVariableDeclaration(IVariableDeclarationOperation operation, object? argument) 11226public override IOperation VisitArgument(IArgumentOperation operation, object? argument) 11231public override IOperation VisitCatchClause(ICatchClauseOperation operation, object? argument) 11236public override IOperation VisitSwitchCase(ISwitchCaseOperation operation, object? argument) 11241public override IOperation VisitDefaultCaseClause(IDefaultCaseClauseOperation operation, object? argument) 11246public override IOperation VisitPatternCaseClause(IPatternCaseClauseOperation operation, object? argument) 11251public override IOperation VisitRangeCaseClause(IRangeCaseClauseOperation operation, object? argument) 11256public override IOperation VisitRelationalCaseClause(IRelationalCaseClauseOperation operation, object? argument) 11261public override IOperation VisitSingleValueCaseClause(ISingleValueCaseClauseOperation operation, object? argument) 11266public override IOperation VisitInterpolatedStringText(IInterpolatedStringTextOperation operation, object? argument) 11271public override IOperation VisitInterpolation(IInterpolationOperation operation, object? argument) 11276public override IOperation VisitConstantPattern(IConstantPatternOperation operation, object? argument) 11281public override IOperation VisitDeclarationPattern(IDeclarationPatternOperation operation, object? argument) 11286public override IOperation VisitTupleBinaryOperator(ITupleBinaryOperation operation, object? argument) 11291public override IOperation VisitMethodBodyOperation(IMethodBodyOperation operation, object? argument) 11296public override IOperation VisitConstructorBodyOperation(IConstructorBodyOperation operation, object? argument) 11301public override IOperation VisitDiscardOperation(IDiscardOperation operation, object? argument) 11306public override IOperation VisitFlowCaptureReference(IFlowCaptureReferenceOperation operation, object? argument) 11311public override IOperation VisitCoalesceAssignment(ICoalesceAssignmentOperation operation, object? argument) 11316public override IOperation VisitRangeOperation(IRangeOperation operation, object? argument) 11321public override IOperation VisitReDim(IReDimOperation operation, object? argument) 11326public override IOperation VisitReDimClause(IReDimClauseOperation operation, object? argument) 11331public override IOperation VisitRecursivePattern(IRecursivePatternOperation operation, object? argument) 11336public override IOperation VisitDiscardPattern(IDiscardPatternOperation operation, object? argument) 11341public override IOperation VisitSwitchExpression(ISwitchExpressionOperation operation, object? argument) 11346public override IOperation VisitSwitchExpressionArm(ISwitchExpressionArmOperation operation, object? argument) 11351public override IOperation VisitPropertySubpattern(IPropertySubpatternOperation operation, object? argument) 11356internal override IOperation VisitAggregateQuery(IAggregateQueryOperation operation, object? argument) 11361internal override IOperation VisitFixed(IFixedOperation operation, object? argument) 11366internal override IOperation VisitNoPiaObjectCreation(INoPiaObjectCreationOperation operation, object? argument) 11371internal override IOperation VisitPlaceholder(IPlaceholderOperation operation, object? argument) 11376internal override IOperation VisitWithStatement(IWithStatementOperation operation, object? argument) 11381public override IOperation VisitUsingDeclaration(IUsingDeclarationOperation operation, object? argument) 11386public override IOperation VisitNegatedPattern(INegatedPatternOperation operation, object? argument) 11391public override IOperation VisitBinaryPattern(IBinaryPatternOperation operation, object? argument) 11396public override IOperation VisitTypePattern(ITypePatternOperation operation, object? argument) 11401public override IOperation VisitRelationalPattern(IRelationalPatternOperation operation, object? argument) 11406public override IOperation VisitWith(IWithOperation operation, object? argument) 11411public override IOperation VisitInterpolatedStringHandlerCreation(IInterpolatedStringHandlerCreationOperation operation, object? argument) 11416public override IOperation VisitInterpolatedStringAddition(IInterpolatedStringAdditionOperation operation, object? argument) 11421public override IOperation VisitInterpolatedStringAppend(IInterpolatedStringAppendOperation operation, object? argument) 11426public override IOperation VisitInterpolatedStringHandlerArgumentPlaceholder(IInterpolatedStringHandlerArgumentPlaceholderOperation operation, object? argument) 11431public override IOperation VisitFunctionPointerInvocation(IFunctionPointerInvocationOperation operation, object? argument) 11436public override IOperation VisitListPattern(IListPatternOperation operation, object? argument) 11441public override IOperation VisitSlicePattern(ISlicePatternOperation operation, object? argument) 11446public override IOperation VisitImplicitIndexerReference(IImplicitIndexerReferenceOperation operation, object? argument) 11451public override IOperation VisitUtf8String(IUtf8StringOperation operation, object? argument) 11456public override IOperation VisitAttribute(IAttributeOperation operation, object? argument) 11461public override IOperation VisitInlineArrayAccess(IInlineArrayAccessOperation operation, object? argument) 11466public override IOperation VisitCollectionExpression(ICollectionExpressionOperation operation, object? argument) 11471public override IOperation VisitSpread(ISpreadOperation operation, object? argument) 11476public override IOperation VisitCollectionExpressionElementsPlaceholder(ICollectionExpressionElementsPlaceholderOperation operation, object? argument) 11487public virtual void Visit(IOperation? operation) => operation?.Accept(this); 11488public virtual void DefaultVisit(IOperation operation) { /* no-op */ } 11489internal virtual void VisitNoneOperation(IOperation operation) { /* no-op */ } 11627public virtual TResult? Visit(IOperation? operation, TArgument argument) => operation is null ? default(TResult) : operation.Accept(this, argument); 11628public virtual TResult? DefaultVisit(IOperation operation, TArgument argument) => default(TResult); 11629internal virtual TResult? VisitNoneOperation(IOperation operation, TArgument argument) => default(TResult);
Operations\BasicBlock.cs (4)
30ImmutableArray<IOperation> operations, 31IOperation? branchValue, 54public ImmutableArray<IOperation> Operations { get; } 63public IOperation? BranchValue { get; }
Operations\ControlFlowGraph.cs (4)
32internal ControlFlowGraph(IOperation originalOperation, 95IOperation? operation = semanticModel.GetOperation(node, cancellationToken); 171internal static ControlFlowGraph CreateCore(IOperation operation, string argumentNameForException, CancellationToken cancellationToken) 200public IOperation OriginalOperation { get; }
Operations\ControlFlowGraphBuilder.BasicBlockBuilder.cs (6)
19private ArrayBuilder<IOperation>? _statements; 27public IOperation? BranchValue; 47public ArrayBuilder<IOperation>? StatementsOpt => _statements; 49public void AddStatement(IOperation operation) 55_statements = ArrayBuilder<IOperation>.GetInstance(); 83_statements?.ToImmutableAndFree() ?? ImmutableArray<IOperation>.Empty,
Operations\ControlFlowGraphBuilder.ConditionalAccessOperationTracker.cs (2)
21public readonly ArrayBuilder<IOperation>? Operations; 28public ConditionalAccessOperationTracker(ArrayBuilder<IOperation> operations, BasicBlockBuilder whenNull)
Operations\ControlFlowGraphBuilder.Context.cs (5)
20public readonly IOperation? ImplicitInstance; 22public readonly ImmutableArray<KeyValuePair<IPropertySymbol, IOperation>> AnonymousTypePropertyValues; 24internal Context(IOperation? implicitInstance, INamedTypeSymbol? anonymousType, ImmutableArray<KeyValuePair<IPropertySymbol, IOperation>> anonymousTypePropertyValues) 38ImmutableArray<KeyValuePair<IPropertySymbol, IOperation>>.Empty);
Operations\ControlFlowGraphBuilder.cs (514)
27internal sealed partial class ControlFlowGraphBuilder : OperationVisitor<int?, IOperation> 40private IOperation? _currentStatement; 41private readonly ArrayBuilder<(EvalStackFrame? frameOpt, IOperation? operationOpt)> _evalStack; 46private IOperation? _currentSwitchOperationExpression; 47private IOperation? _forToLoopBinaryOperatorLeftOperand; 48private IOperation? _forToLoopBinaryOperatorRightOperand; 49private IOperation? _currentAggregationGroup; 70_evalStack = ArrayBuilder<(EvalStackFrame? frameOpt, IOperation? operationOpt)>.GetInstance(); 82private bool IsImplicit(IOperation operation) 87public static ControlFlowGraph Create(IOperation body, ControlFlowGraph? parent = null, ControlFlowRegion? enclosing = null, CaptureIdDispenser? captureIdDispenser = null, in Context context = default) 836IOperation? value = block.BranchValue; 1233private void VisitStatement(IOperation? operation) 1244IOperation? saveCurrentStatement = _currentStatement; 1271IOperation? statement 1353foreach ((EvalStackFrame? frameOpt, IOperation? operationOpt) in _evalStack) 1384public override IOperation? VisitBlock(IBlockOperation operation, int? captureIdForResult) 1394private void StartVisitingStatement(IOperation operation) 1402private IOperation? FinishVisitingStatement(IOperation originalOperation, IOperation? result = null) 1413return result ?? MakeInvalidOperation(originalOperation.Syntax, originalOperation.Type, ImmutableArray<IOperation>.Empty); 1416private void VisitStatements(ImmutableArray<IOperation> statements) 1439private bool VisitStatementsOneOrAll(IOperation? operation, ImmutableArray<IOperation> statements, int startIndex) 1455var savedCurrentStatement = _currentStatement; 1468internal override IOperation? VisitWithStatement(IWithStatementOperation operation, int? captureIdForResult) 1481public override IOperation? VisitConstructorBodyOperation(IConstructorBodyOperation operation, int? captureIdForResult) 1498public override IOperation? VisitMethodBodyOperation(IMethodBodyOperation operation, int? captureIdForResult) 1536public override IOperation? VisitConditional(IConditionalOperation operation, int? captureIdForResult) 1616IOperation result; 1622IOperation? rewrittenThrow = BaseVisitRequired(whenTrueConversion.Operand, null); 1640IOperation rewrittenThrow = BaseVisitRequired(whenFalseConversion.Operand, null); 1668private void VisitAndCapture(IOperation operation, int captureId) 1671IOperation result = BaseVisitRequired(operation, captureId); 1677private IOperation VisitAndCapture(IOperation operation) 1685private void CaptureResultIfNotAlready(SyntaxNode syntax, int captureId, IOperation result) 1741(EvalStackFrame? frameOpt, IOperation? operationOpt) = _evalStack.Pop(); 1835(EvalStackFrame? frameOpt, IOperation? operationOpt) = _evalStack[i]; 1874IOperation? operation = _evalStack[j].operationOpt; 1938(EvalStackFrame? frameOpt, IOperation? operationOpt) = _evalStack[i]; 1952private void PushOperand(IOperation operation) 1962private IOperation PopOperand() 1972(EvalStackFrame? frameOpt, IOperation? operationOpt) = _evalStack.Pop(); 1979private IOperation PeekOperand() 1983(EvalStackFrame? frameOpt, IOperation? operationOpt) = _evalStack.Peek(); 1990private void VisitAndPushArray<T>(ImmutableArray<T> array, Func<T, IOperation>? unwrapper = null) where T : IOperation 1992Debug.Assert(unwrapper != null || typeof(T) == typeof(IOperation)); 1999private ImmutableArray<T> PopArray<T>(ImmutableArray<T> originalArray, Func<IOperation, int, ImmutableArray<T>, T>? wrapper = null) where T : IOperation 2001Debug.Assert(wrapper != null || typeof(T) == typeof(IOperation)); 2013IOperation visitedElement = PopOperand(); 2021private ImmutableArray<T> VisitArray<T>(ImmutableArray<T> originalArray, Func<T, IOperation>? unwrapper = null, Func<IOperation, int, ImmutableArray<T>, T>? wrapper = null) where T : IOperation 2080var argument = arguments[i].Value switch 2092private IArgumentOperation RewriteArgumentFromArray(IOperation visitedArgument, int index, ImmutableArray<IArgumentOperation> args) 2101public override IOperation VisitSimpleAssignment(ISimpleAssignmentOperation operation, int? captureIdForResult) 2105IOperation value = VisitRequired(operation.Value); 2109public override IOperation VisitCompoundAssignment(ICompoundAssignmentOperation operation, int? captureIdForResult) 2114IOperation value = VisitRequired(compoundAssignment.Value); 2121public override IOperation VisitArrayElementReference(IArrayElementReferenceOperation operation, int? captureIdForResult) 2125ImmutableArray<IOperation> visitedIndices = VisitArray(operation.Indices); 2126IOperation visitedArrayReference = PopOperand(); 2132public override IOperation VisitImplicitIndexerReference(IImplicitIndexerReferenceOperation operation, int? captureIdForResult) 2136IOperation argument = VisitRequired(operation.Argument); 2137IOperation instance = PopOperand(); 2143public override IOperation? VisitInlineArrayAccess(IInlineArrayAccessOperation operation, int? captureIdForResult) 2147IOperation argument = VisitRequired(operation.Argument); 2148IOperation instance = PopOperand(); 2166public override IOperation VisitBinaryOperator(IBinaryOperation operation, int? captureIdForResult) 2207IOperation leftOperand; 2230IOperation rightOperand = VisitRequired(operation.RightOperand); 2244public override IOperation VisitTupleBinaryOperator(ITupleBinaryOperation operation, int? captureIdForResult) 2246(IOperation visitedLeft, IOperation visitedRight) = VisitPreservingTupleOperations(operation.LeftOperand, operation.RightOperand); 2251public override IOperation VisitUnaryOperator(IUnaryOperation operation, int? captureIdForResult) 2287private IOperation VisitBinaryConditionalOperator(IBinaryOperation binOp, bool sense, int? captureIdForResult, 2303private IOperation VisitNullableBinaryConditionalOperator(IBinaryOperation binOp, int? captureIdForResult) 2307IOperation left = binOp.LeftOperand; 2308IOperation right = binOp.RightOperand; 2309IOperation condition; 2355IOperation capturedLeft = VisitAndCapture(left); 2373IOperation capturedRight = VisitAndCapture(right); 2400IOperation negateNullable(IOperation operand) 2409private IOperation VisitObjectBinaryConditionalOperator(IBinaryOperation binOp) 2414IOperation left = binOp.LeftOperand; 2415IOperation right = binOp.RightOperand; 2416IOperation condition; 2458private IOperation CreateConversion(IOperation operand, ITypeSymbol type) 2464private IOperation VisitDynamicBinaryConditionalOperator(IBinaryOperation binOp, int? captureIdForResult) 2472IOperation left = binOp.LeftOperand; 2473IOperation right = binOp.RightOperand; 2477IOperation condition; 2486IOperation capturedLeft = VisitAndCapture(left); 2525IOperation resultFromLeft = OperationCloner.CloneOperation(capturedLeft); 2539IOperation visitedRight = VisitRequired(right); 2564private IOperation VisitUserDefinedBinaryConditionalOperator(IBinaryOperation binOp, int? captureIdForResult) 2574IOperation left = binOp.LeftOperand; 2575IOperation right = binOp.RightOperand; 2578IOperation condition; 2583IOperation capturedLeft = VisitAndCapture(left); 2628IOperation visitedRight = VisitRequired(right); 2653private IOperation VisitShortCircuitingOperator(IBinaryOperation condition, bool sense, bool stopSense, bool stopValue, 2681IOperation resultFromRight = VisitConditionalExpression(condition.RightOperand, sense, captureId, fallToTrueOpt, fallToFalseOpt); 2704private IOperation VisitConditionalExpression(IOperation condition, bool sense, int? captureIdForResult, BasicBlockBuilder? fallToTrueOpt, BasicBlockBuilder? fallToFalseOpt) 2760private void VisitConditionalBranch(IOperation condition, [NotNull] ref BasicBlockBuilder? dest, bool jumpIfTrue) 2775private void VisitConditionalBranchCore(IOperation condition, [NotNull] ref BasicBlockBuilder? dest, bool jumpIfTrue) 2782void visitConditionalBranchCore(IOperation condition, [NotNull] ref BasicBlockBuilder? dest, bool jumpIfTrue) 2796var stack = ArrayBuilder<(IOperation? condition, BasicBlockBuilder dest, bool jumpIfTrue)>.GetInstance(); 2801(IOperation? condition, BasicBlockBuilder dest, bool jumpIfTrue) top = stack.Pop(); 2903IOperation convertedTestExpression = NullCheckAndConvertCoalesceValue(coalesce, whenNull); 2929IOperation? rewrittenThrow = BaseVisitRequired(conversion.Operand, null); 2952static IOperation skipParenthesized(IOperation condition) 2964private void ConditionalBranch(IOperation condition, bool jumpIfTrue, BasicBlockBuilder destination) 2983private IOperation NullCheckAndConvertCoalesceValue(ICoalesceOperation operation, BasicBlockBuilder whenNull) 2988IOperation operationValue = operation.Value; 2994IOperation testExpression = PopOperand(); 3002IOperation capturedValue = OperationCloner.CloneOperation(testExpression); 3003IOperation? convertedTestExpression = null; 3007IOperation? possiblyUnwrappedValue; 3042public override IOperation VisitCoalesce(ICoalesceOperation operation, int? captureIdForResult) 3054IOperation convertedTestExpression = NullCheckAndConvertCoalesceValue(operation, whenNull); 3056IOperation result; 3071IOperation? rewrittenThrow = BaseVisitRequired(conversion.Operand, null); 3099public override IOperation? VisitCoalesceAssignment(ICoalesceAssignmentOperation operation, int? captureIdForResult) 3115IOperation locationCapture = PopOperand(); 3124IOperation valueCapture = GetCaptureReference(valueCaptureId, locationCapture); 3216IOperation whenNullValue = VisitRequired(operation.Value); 3268IOperation whenNullValue = VisitRequired(operation.Value); 3269IOperation whenNullAssignment = new SimpleAssignmentOperation(isRef: false, OperationCloner.CloneOperation(locationCapture), whenNullValue, semanticModel: null, 3290private static IOperation MakeInvalidOperation(ITypeSymbol? type, IOperation child) 3292return new InvalidOperation(ImmutableArray.Create<IOperation>(child), 3297private static IOperation MakeInvalidOperation(SyntaxNode syntax, ITypeSymbol? type, IOperation child1, IOperation child2) 3299return MakeInvalidOperation(syntax, type, ImmutableArray.Create<IOperation>(child1, child2)); 3302private static IOperation MakeInvalidOperation(SyntaxNode syntax, ITypeSymbol? type, ImmutableArray<IOperation> children) 3309private IsNullOperation MakeIsNullOperation(IOperation operand) 3314private static IsNullOperation MakeIsNullOperation(IOperation operand, ITypeSymbol booleanType) 3325private IOperation? TryCallNullableMember(IOperation value, SpecialMember nullableMember) 3355private IOperation CallNullableMember(IOperation value, SpecialMember nullableMember) 3362public override IOperation? VisitConditionalAccess(IConditionalAccessOperation operation, int? captureIdForResult) 3371var operations = ArrayBuilder<IOperation>.GetInstance(); 3379IOperation testExpression; 3412IOperation result = VisitRequired(currentConditionalAccess.WhenNotNull); 3434IOperation access = VisitRequired(currentConditionalAccess.WhenNotNull); 3478static bool isConditionalAccessInstancePresentInChildren(IOperation operation) 3509foreach (var child in operation.ChildOperations) 3521public override IOperation VisitConditionalAccessInstance(IConditionalAccessInstanceOperation operation, int? captureIdForResult) 3525IOperation testExpression = _currentConditionalAccessTracker.Operations.Pop(); 3529private IOperation VisitConditionalAccessTestExpression(IOperation testExpression) 3538IOperation spilledTestExpression = PopOperand(); 3546IOperation receiver = OperationCloner.CloneOperation(spilledTestExpression); 3556public override IOperation? VisitExpressionStatement(IExpressionStatementOperation operation, int? captureIdForResult) 3560IOperation? underlying = Visit(operation.Operation); 3575public override IOperation? VisitWhileLoop(IWhileLoopOperation operation, int? captureIdForResult) 3648public override IOperation? VisitTry(ITryOperation operation, int? captureIdForResult) 3692IOperation? exceptionDeclarationOrExpression = catchClause.ExceptionDeclarationOrExpression; 3693IOperation? filter = catchClause.Filter; 3787private void AddExceptionStore(ITypeSymbol exceptionType, IOperation? exceptionDeclarationOrExpression) 3791IOperation exceptionTarget; 3824public override IOperation VisitCatchClause(ICatchClauseOperation operation, int? captureIdForResult) 3829public override IOperation? VisitReturn(IReturnOperation operation, int? captureIdForResult) 3832IOperation? returnedValue = Visit(operation.ReturnedValue); 3857public override IOperation? VisitLabeled(ILabeledOperation operation, int? captureIdForResult) 3901public override IOperation? VisitBranch(IBranchOperation operation, int? captureIdForResult) 3908public override IOperation? VisitEmpty(IEmptyOperation operation, int? captureIdForResult) 3914public override IOperation? VisitThrow(IThrowOperation operation, int? captureIdForResult) 3934return new NoneOperation(children: ImmutableArray<IOperation>.Empty, semanticModel: null, operation.Syntax, constantValue: null, isImplicit: true, type: null); 3938private void LinkThrowStatement(IOperation? exception) 3949public override IOperation? VisitUsing(IUsingOperation operation, int? captureIdForResult) 3957private void HandleUsingOperationParts(IOperation resources, IOperation body, IMethodSymbol? disposeMethod, ImmutableArray<IArgumentOperation> disposeArguments, ImmutableArray<ILocalSymbol> locals, bool isAsynchronous, 3958Func<IOperation, IOperation>? visitResource = null) 3991IOperation resource = visitResource != null ? visitResource(resources) : VisitRequired(resources); 4027bool shouldConvertToIDisposableBeforeTry(IOperation resource) 4032void processResource(IOperation resource, ArrayBuilder<(IVariableDeclarationOperation, IVariableDeclaratorOperation)>? resourceQueueOpt) 4114private void AddDisposingFinally(IOperation resource, bool requiresRuntimeConversion, ITypeSymbol iDisposable, IMethodSymbol? disposeMethod, ImmutableArray<IArgumentOperation> disposeArguments, bool isAsynchronous) 4138IOperation condition = MakeIsNullOperation(OperationCloner.CloneOperation(resource)); 4168IOperation? tryDispose(IOperation value) 4212private IOperation ConvertToIDisposable(IOperation operand, ITypeSymbol iDisposable, bool isTryCast = false) 4220public override IOperation? VisitLock(ILockOperation operation, int? captureIdForResult) 4238var lockObject = VisitRequired(resource); 4258IOperation? underlying = Visit(operation.LockedValue); 4317IOperation lockedValue = VisitRequired(operation.LockedValue); 4364IOperation? lockTaken = null; 4411IOperation condition = new LocalReferenceOperation(lockStatement.LockTakenSymbol, isDeclaration: false, semanticModel: null, lockedValue.Syntax, 4455public override IOperation? VisitForEachLoop(IForEachLoopOperation operation, int? captureIdForResult) 4480foreach (IOperation op in operation.Collection.DescendantsAndSelf()) 4491IOperation enumerator = getEnumerator(); 4561IOperation applyConversion(IConvertibleConversion? conversionOpt, IOperation operand, ITypeSymbol? targetType) 4572IOperation getEnumerator() 4574IOperation result; 4579IOperation? collection = info.GetEnumeratorMethod.IsStatic ? null : Visit(operation.Collection); 4595IOperation invocation = makeInvocation(operation.Collection.Syntax, 4609result = new InvalidOperation(ImmutableArray<IOperation>.Empty, semanticModel: null, operation.Collection.Syntax, 4617IOperation getCondition(IOperation enumeratorRef) 4635IOperation getCurrent(IOperation enumeratorRef) 4639var instance = info.CurrentProperty.IsStatic ? null : enumeratorRef; 4656IOperation getLoopControlVariableAssignment(IOperation current) 4697InvocationOperation makeInvocationDroppingInstanceForStaticMethods(IMethodSymbol method, IOperation instance, ImmutableArray<IArgumentOperation> arguments) 4702InvocationOperation makeInvocation(SyntaxNode syntax, IMethodSymbol method, IOperation? instanceOpt, ImmutableArray<IArgumentOperation> arguments) 4712ImmutableArray<IArgumentOperation> makeArguments(ImmutableArray<IArgumentOperation> arguments, ref IOperation? instance) 4731public override IOperation? VisitForToLoop(IForToLoopOperation operation, int? captureIdForResult) 4780IOperation tryCallObjectForLoopControlHelper(SyntaxNode syntax, WellKnownMember helper) 4795var builder = ArrayBuilder<IOperation>.GetInstance(--parametersCount, fillWithValue: null!); 4824IOperation value = PopOperand(); 4875IOperation condition = tryCallObjectForLoopControlHelper(operation.LoopControlVariable.Syntax, 4892IOperation stepValue = GetCaptureReference(stepValueId, operation.StepValue); 4903IOperation subtraction = VisitRequired(userDefinedInfo.Subtraction); 4920IOperation? stepValueIsNull = null; 4938IOperation isUp; 4958IOperation literal = new LiteralOperation(semanticModel: null, stepValue.Syntax, stepValue.Type, 4990IOperation initialValue = PopOperand(); 5030IOperation condition = tryCallObjectForLoopControlHelper(operation.LimitValue.Syntax, 5049IOperation controlVariableReferenceForCondition = PopOperand(); 5081IOperation limitReference = GetCaptureReference(limitValueId, operation.LimitValue); 5112IOperation condition; 5149IOperation? eitherLimitOrControlVariableIsNull = null; 5188IOperation controlVariableReferenceforCondition = PopOperand(); 5241IOperation negateIfStepNegative(IOperation operand) 5292IOperation controlVariableReferenceForAssignment = visitLoopControlVariableReference(forceImplicit: true); // Yes we are going to evaluate it again 5301IOperation increment = VisitRequired(userDefinedInfo.Addition); 5321IOperation controlVariableReferenceForAssignment; 5335IOperation condition = new BinaryOperation(BinaryOperatorKind.Or, 5377IOperation controlVariableReferenceForIncrement = visitLoopControlVariableReference(forceImplicit: true); // Yes we are going to evaluate it again 5378IOperation stepValueForIncrement = GetCaptureReference(stepValueId, operation.StepValue); 5387IOperation increment = new BinaryOperation(BinaryOperatorKind.Add, 5425IOperation visitLoopControlVariableReference(bool forceImplicit) 5439IOperation result = VisitRequired(operation.LoopControlVariable); 5446private static FlowCaptureReferenceOperation GetCaptureReference(int id, IOperation underlying) 5451internal override IOperation VisitAggregateQuery(IAggregateQueryOperation operation, int? captureIdForResult) 5455IOperation? previousAggregationGroup = _currentAggregationGroup; 5458IOperation result = VisitRequired(operation.Aggregation); 5464public override IOperation? VisitSwitch(ISwitchOperation operation, int? captureIdForResult) 5469IOperation switchValue = VisitAndCapture(operation.Value); 5511IOperation? condition = ((SwitchCaseOperation)section).Condition; 5543IOperation condition; 5553void handleEqualityCheck(IOperation compareWith) 5561IOperation rightOperand = VisitRequired(compareWith); 5562IOperation leftOperand = PopOperand(); 5664private IOperation MakeNullable(IOperation operand, ITypeSymbol type) 5672public override IOperation VisitSwitchCase(ISwitchCaseOperation operation, int? captureIdForResult) 5677public override IOperation VisitSingleValueCaseClause(ISingleValueCaseClauseOperation operation, int? captureIdForResult) 5682public override IOperation VisitDefaultCaseClause(IDefaultCaseClauseOperation operation, int? captureIdForResult) 5687public override IOperation VisitRelationalCaseClause(IRelationalCaseClauseOperation operation, int? captureIdForResult) 5692public override IOperation VisitRangeCaseClause(IRangeCaseClauseOperation operation, int? captureIdForResult) 5697public override IOperation VisitPatternCaseClause(IPatternCaseClauseOperation operation, int? captureIdForResult) 5702public override IOperation? VisitEnd(IEndOperation operation, int? captureIdForResult) 5715public override IOperation? VisitForLoop(IForLoopOperation operation, int? captureIdForResult) 5739ImmutableArray<IOperation> initialization = operation.Before; 5778internal override IOperation? VisitFixed(IFixedOperation operation, int? captureIdForResult) 5791public override IOperation? VisitVariableDeclarationGroup(IVariableDeclarationGroupOperation operation, int? captureIdForResult) 5844IOperation? initializer = null; 5854IOperation operationInitializer = VisitRequired(declaration.Initializer.Value); 5891public override IOperation VisitVariableDeclaration(IVariableDeclarationOperation operation, int? captureIdForResult) 5897public override IOperation VisitVariableDeclarator(IVariableDeclaratorOperation operation, int? captureIdForResult) 5903public override IOperation VisitVariableInitializer(IVariableInitializerOperation operation, int? captureIdForResult) 5909public override IOperation VisitFlowCapture(IFlowCaptureOperation operation, int? captureIdForResult) 5914public override IOperation VisitFlowCaptureReference(IFlowCaptureReferenceOperation operation, int? captureIdForResult) 5919public override IOperation VisitIsNull(IIsNullOperation operation, int? captureIdForResult) 5924public override IOperation VisitCaughtException(ICaughtExceptionOperation operation, int? captureIdForResult) 5929public override IOperation VisitInvocation(IInvocationOperation operation, int? captureIdForResult) 5932IOperation? instance = operation.TargetMethod.IsStatic ? null : operation.Instance; 5933(IOperation? visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments) = VisitInstanceWithArguments(instance, operation.Arguments); 5939public override IOperation? VisitFunctionPointerInvocation(IFunctionPointerInvocationOperation operation, int? argument) 5942var target = operation.Target; 5948(IOperation visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments) handlePointerAndArguments( 5949IOperation targetPointer, ImmutableArray<IArgumentOperation> arguments) 5954IOperation visitedInstance = PopOperand(); 5960private (IOperation? visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments) VisitInstanceWithArguments(IOperation? instance, ImmutableArray<IArgumentOperation> arguments) 5969IOperation? visitedInstance = hasInstance ? PopOperand() : null; 5974internal override IOperation VisitNoPiaObjectCreation(INoPiaObjectCreationOperation operation, int? argument) 5978IOperation initializedInstance = new NoPiaObjectCreationOperation(initializer: null, semanticModel: null, operation.Syntax, operation.Type, IsImplicit(operation)); 5982public override IOperation VisitObjectCreation(IObjectCreationOperation operation, int? captureIdForResult) 5989IOperation initializedInstance = new ObjectCreationOperation(operation.Constructor, initializer: null, visitedArgs, semanticModel: null, 5995public override IOperation VisitTypeParameterObjectCreation(ITypeParameterObjectCreationOperation operation, int? captureIdForResult) 6002public override IOperation VisitDynamicObjectCreation(IDynamicObjectCreationOperation operation, int? captureIdForResult) 6006ImmutableArray<IOperation> visitedArguments = VisitArray(operation.Arguments); 6010IOperation initializedInstance = new DynamicObjectCreationOperation(initializer: null, visitedArguments, hasDynamicArguments.ArgumentNames, 6017private IOperation HandleObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation? initializer, IOperation objectCreation) 6034void visitInitializer(IObjectOrCollectionInitializerOperation initializerOperation, IOperation initializedInstance) 6039foreach (IOperation innerInitializer in initializerOperation.Initializers) 6047void handleInitializer(IOperation innerInitializer) 6082IOperation result; 6095IOperation right = VisitRequired(assignmentOperation.Value); 6096IOperation left = popTarget(assignmentOperation.Target); 6155IOperation instance = pushSuccess ? popTarget(memberInitializer.InitializedMember) : VisitRequired(memberInitializer.InitializedMember); 6160bool tryPushTarget(IOperation instance) 6227IOperation popTarget(IOperation originalTarget) 6229IOperation? instance; 6251ImmutableArray<IOperation> indices = PopArray(arrayElementReference.Indices); 6257IOperation index = PopOperand(); 6264ImmutableArray<IOperation> arguments = PopArray(dynamicAccess.Arguments); 6301var lhs = memberInitializer.InitializedMember; 6311foreach (var element in array.Initializer.ElementValues) 6328foreach (var index in arrayAccess.Indices) 6335foreach (var argument in dynamicIndexerAccess.Arguments) 6352foreach (var initializer in memberInitializer.Initializer.Initializers) 6359public override IOperation VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation, int? captureIdForResult) 6362return MakeInvalidOperation(operation.Syntax, operation.Type, ImmutableArray<IOperation>.Empty); 6365public override IOperation VisitMemberInitializer(IMemberInitializerOperation operation, int? captureIdForResult) 6368return MakeInvalidOperation(operation.Syntax, operation.Type, ImmutableArray<IOperation>.Empty); 6371public override IOperation VisitAnonymousObjectCreation(IAnonymousObjectCreationOperation operation, int? captureIdForResult) 6375return new AnonymousObjectCreationOperation(initializers: ImmutableArray<IOperation>.Empty, semanticModel: null, 6388var initializerBuilder = ArrayBuilder<IOperation>.GetInstance(operation.Initializers.Length); 6402IOperation visitedTarget = new PropertyReferenceOperation(propertyReference.Property, propertyReference.ConstrainedToType, ImmutableArray<IArgumentOperation>.Empty, visitedPropertyInstance, 6404IOperation visitedValue = visitAndCaptureInitializer(propertyReference.Property, simpleAssignment.Value); 6422IOperation visitAndCaptureInitializer(IPropertySymbol initializedProperty, IOperation initializer) 6426IOperation captured = PeekOperand(); // Keep it on the stack so that we know it is still used. 6438public override IOperation? VisitLocalFunction(ILocalFunctionOperation operation, int? captureIdForResult) 6454private IOperation? VisitLocalFunctionAsRoot(ILocalFunctionOperation operation) 6461public override IOperation VisitAnonymousFunction(IAnonymousFunctionOperation operation, int? captureIdForResult) 6467public override IOperation VisitFlowAnonymousFunction(IFlowAnonymousFunctionOperation operation, int? captureIdForResult) 6472public override IOperation VisitArrayCreation(IArrayCreationOperation operation, int? captureIdForResult) 6491ImmutableArray<IOperation> visitedDimensions = PopArray(operation.DimensionSizes); 6497public override IOperation VisitArrayInitializer(IArrayInitializerOperation operation, int? captureIdForResult) 6505foreach (IOperation elementValue in initializer.ElementValues) 6521var builder = ArrayBuilder<IOperation>.GetInstance(initializer.ElementValues.Length); 6524IOperation elementValue = initializer.ElementValues[i]; 6526IOperation visitedElementValue; 6544public override IOperation? VisitCollectionExpression(ICollectionExpressionOperation operation, int? argument) 6566unwrapper: static (IOperation element) => 6572wrapper: (IOperation operation, int index, ImmutableArray<IOperation> elements) => 6587: ImmutableArray<IOperation>.CastUp(PopArray(arguments, RewriteArgumentFromArray)); 6599public override IOperation? VisitSpread(ISpreadOperation operation, int? argument) 6604public override IOperation VisitInstanceReference(IInstanceReferenceOperation operation, int? captureIdForResult) 6620return MakeInvalidOperation(operation.Syntax, operation.Type, ImmutableArray<IOperation>.Empty); 6632public override IOperation VisitDynamicInvocation(IDynamicInvocationOperation operation, int? captureIdForResult) 6638var instance = ((IDynamicMemberReferenceOperation)operation.Operation).Instance; 6649ImmutableArray<IOperation> rewrittenArguments = VisitArray(operation.Arguments); 6651IOperation rewrittenOperation; 6655IOperation? rewrittenInstance = dynamicMemberReference.Instance != null ? PopOperand() : null; 6669public override IOperation VisitDynamicIndexerAccess(IDynamicIndexerAccessOperation operation, int? captureIdForResult) 6673ImmutableArray<IOperation> rewrittenArguments = VisitArray(operation.Arguments); 6674IOperation rewrittenOperation = PopOperand(); 6680public override IOperation VisitDynamicMemberReference(IDynamicMemberReferenceOperation operation, int? captureIdForResult) 6686public override IOperation VisitDeconstructionAssignment(IDeconstructionAssignmentOperation operation, int? captureIdForResult) 6688(IOperation visitedTarget, IOperation visitedValue) = VisitPreservingTupleOperations(operation.Target, operation.Value); 6695private void PushTargetAndUnwrapTupleIfNecessary(IOperation value) 6701foreach (IOperation element in tuple.Elements) 6715private IOperation PopTargetAndWrapTupleIfNecessary(IOperation value) 6721var elementBuilder = ArrayBuilder<IOperation>.GetInstance(numElements); 6735public override IOperation VisitDeclarationExpression(IDeclarationExpressionOperation operation, int? captureIdForResult) 6740private IOperation VisitPreservingTupleOperations(IOperation operation) 6747private (IOperation visitedLeft, IOperation visitedRight) VisitPreservingTupleOperations(IOperation left, IOperation right) 6758IOperation visitedRight = VisitRequired(right); 6759IOperation visitedLeft = PopTargetAndWrapTupleIfNecessary(left); 6764public override IOperation VisitTuple(ITupleOperation operation, int? captureIdForResult) 6769internal override IOperation VisitNoneOperation(IOperation operation, int? captureIdForResult) 6781private IOperation VisitNoneOperationStatement(IOperation operation) 6785return new NoneOperation(ImmutableArray<IOperation>.Empty, semanticModel: null, operation.Syntax, operation.Type, operation.GetConstantValue(), IsImplicit(operation)); 6788private IOperation VisitNoneOperationExpression(IOperation operation) 6794public override IOperation? VisitInterpolatedStringHandlerCreation(IInterpolatedStringHandlerCreationOperation operation, int? captureIdForResult) 6881IOperation visitedAppendCall = VisitRequired(appendCall.AppendCall); 6978public override IOperation? VisitInterpolatedStringAddition(IInterpolatedStringAdditionOperation operation, int? captureIdForResult) 6983public override IOperation? VisitInterpolatedStringAppend(IInterpolatedStringAppendOperation operation, int? captureIdForResult) 6988public override IOperation? VisitInterpolatedStringHandlerArgumentPlaceholder(IInterpolatedStringHandlerArgumentPlaceholderOperation operation, int? captureIdForResult) 7000if (_currentInterpolatedStringHandlerArgumentContext.HasReceiver && tryGetArgumentOrReceiver(-1) is IOperation receiverCapture) 7007return new InvalidOperation(ImmutableArray<IOperation>.Empty, semanticModel: null, operation.Syntax, operation.Type, operation.GetConstantValue(), isImplicit: true); 7013if (tryGetArgumentOrReceiver(operation.ArgumentIndex) is IOperation argumentCapture) 7020return new InvalidOperation(ImmutableArray<IOperation>.Empty, semanticModel: null, operation.Syntax, operation.Type, operation.GetConstantValue(), isImplicit: true); 7027IOperation? tryGetArgumentOrReceiver(int argumentIndex) 7049public override IOperation VisitInterpolatedString(IInterpolatedStringOperation operation, int? captureIdForResult) 7077IOperation? rewrittenFormatString; 7088var rewrittenAlignment = interpolation.Alignment != null ? PopOperand() : null; 7089var rewrittenExpression = PopOperand(); 7094var rewrittenInterpolationText = VisitRequired(interpolatedStringText.Text, argument: null); 7110public override IOperation VisitInterpolatedStringText(IInterpolatedStringTextOperation operation, int? captureIdForResult) 7115public override IOperation VisitInterpolation(IInterpolationOperation operation, int? captureIdForResult) 7120public override IOperation VisitNameOf(INameOfOperation operation, int? captureIdForResult) 7126public override IOperation VisitLiteral(ILiteralOperation operation, int? captureIdForResult) 7131public override IOperation? VisitUtf8String(IUtf8StringOperation operation, int? captureIdForResult) 7136public override IOperation VisitLocalReference(ILocalReferenceOperation operation, int? captureIdForResult) 7142public override IOperation VisitParameterReference(IParameterReferenceOperation operation, int? captureIdForResult) 7148public override IOperation VisitFieldReference(IFieldReferenceOperation operation, int? captureIdForResult) 7150IOperation? visitedInstance = operation.Field.IsStatic ? null : Visit(operation.Instance); 7155public override IOperation VisitMethodReference(IMethodReferenceOperation operation, int? captureIdForResult) 7157IOperation? visitedInstance = operation.Method.IsStatic ? null : Visit(operation.Instance); 7162public override IOperation VisitPropertyReference(IPropertyReferenceOperation operation, int? captureIdForResult) 7171if (_currentImplicitInstance.AnonymousTypePropertyValues.TryGetValue(operation.Property, out IOperation? captured)) 7179return MakeInvalidOperation(operation.Syntax, operation.Type, ImmutableArray<IOperation>.Empty); 7184IOperation? instance = operation.Property.IsStatic ? null : operation.Instance; 7185(IOperation? visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments) = VisitInstanceWithArguments(instance, operation.Arguments); 7191public override IOperation VisitEventReference(IEventReferenceOperation operation, int? captureIdForResult) 7193IOperation? visitedInstance = operation.Event.IsStatic ? null : Visit(operation.Instance); 7198public override IOperation VisitTypeOf(ITypeOfOperation operation, int? captureIdForResult) 7203public override IOperation VisitParenthesized(IParenthesizedOperation operation, int? captureIdForResult) 7208public override IOperation VisitAwait(IAwaitOperation operation, int? captureIdForResult) 7213public override IOperation VisitSizeOf(ISizeOfOperation operation, int? captureIdForResult) 7218public override IOperation VisitStop(IStopOperation operation, int? captureIdForResult) 7223public override IOperation VisitIsType(IIsTypeOperation operation, int? captureIdForResult) 7228public override IOperation? VisitParameterInitializer(IParameterInitializerOperation operation, int? captureIdForResult) 7238public override IOperation? VisitFieldInitializer(IFieldInitializerOperation operation, int? captureIdForResult) 7256public override IOperation? VisitPropertyInitializer(IPropertyInitializerOperation operation, int? captureIdForResult) 7274var value = new InvalidOperation(ImmutableArray<IOperation>.Empty, semanticModel: null, 7290IOperation propertyRef = new PropertyReferenceOperation(propertySymbol, constrainedToType: null, arguments, instance, 7298private void VisitInitializer(IOperation rewrittenTarget, ISymbolInitializerOperation initializer) 7311public override IOperation VisitEventAssignment(IEventAssignmentOperation operation, int? captureIdForResult) 7314IOperation visitedEventReference, visitedHandler; 7322var eventReferenceInstance = eventReference.Event.IsStatic ? null : eventReference.Instance; 7330IOperation? visitedInstance = eventReferenceInstance == null ? null : PopOperand(); 7349IOperation current = operation.EventReference; 7369public override IOperation VisitRaiseEvent(IRaiseEventOperation operation, int? captureIdForResult) 7375(IOperation? visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments) = 7385public override IOperation VisitAddressOf(IAddressOfOperation operation, int? captureIdForResult) 7390public override IOperation VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation, int? captureIdForResult) 7397public override IOperation VisitDiscardOperation(IDiscardOperation operation, int? captureIdForResult) 7402public override IOperation VisitDiscardPattern(IDiscardPatternOperation pat, int? captureIdForResult) 7407public override IOperation VisitOmittedArgument(IOmittedArgumentOperation operation, int? captureIdForResult) 7412internal override IOperation VisitPlaceholder(IPlaceholderOperation operation, int? captureIdForResult) 7446public override IOperation? VisitCollectionExpressionElementsPlaceholder(ICollectionExpressionElementsPlaceholderOperation operation, int? argument) 7452public override IOperation VisitConversion(IConversionOperation operation, int? captureIdForResult) 7457public override IOperation VisitDefaultValue(IDefaultValueOperation operation, int? captureIdForResult) 7462public override IOperation VisitIsPattern(IIsPatternOperation operation, int? captureIdForResult) 7467IOperation visitedValue = PopOperand(); 7473public override IOperation VisitInvalid(IInvalidOperation operation, int? captureIdForResult) 7475var children = ArrayBuilder<IOperation>.GetInstance(); 7490foreach (var argument in children) 7502IOperation initializedInstance = new InvalidOperation(children.ToImmutableAndFree(), semanticModel: null, operation.Syntax, operation.Type, 7510IOperation result; 7522IOperation visitInvalidOperationStatement(IInvalidOperation invalidOperation) 7526return new InvalidOperation(ImmutableArray<IOperation>.Empty, semanticModel: null, invalidOperation.Syntax, invalidOperation.Type, invalidOperation.GetConstantValue(), IsImplicit(invalidOperation)); 7529IOperation visitInvalidOperationExpression(IInvalidOperation invalidOperation) 7537public override IOperation? VisitReDim(IReDimOperation operation, int? argument) 7563var visitedOperand = PopOperand(); 7568public override IOperation VisitReDimClause(IReDimClauseOperation operation, int? argument) 7573public override IOperation VisitTranslatedQuery(ITranslatedQueryOperation operation, int? captureIdForResult) 7578public override IOperation VisitConstantPattern(IConstantPatternOperation operation, int? captureIdForResult) 7584public override IOperation VisitRelationalPattern(IRelationalPatternOperation operation, int? argument) 7596public override IOperation VisitBinaryPattern(IBinaryPatternOperation operation, int? argument) 7637public override IOperation VisitNegatedPattern(INegatedPatternOperation operation, int? argument) 7648public override IOperation VisitTypePattern(ITypePatternOperation operation, int? argument) 7659public override IOperation VisitDeclarationPattern(IDeclarationPatternOperation operation, int? captureIdForResult) 7672public override IOperation VisitSlicePattern(ISlicePatternOperation operation, int? argument) 7684public override IOperation VisitListPattern(IListPatternOperation operation, int? argument) 7698public override IOperation VisitRecursivePattern(IRecursivePatternOperation operation, int? argument) 7713public override IOperation VisitPropertySubpattern(IPropertySubpatternOperation operation, int? argument) 7723public override IOperation VisitDelegateCreation(IDelegateCreationOperation operation, int? captureIdForResult) 7729public override IOperation VisitRangeOperation(IRangeOperation operation, int? argument) 7736IOperation? visitedRightOperand = null; 7742IOperation? visitedLeftOperand = operation.LeftOperand is null ? null : PopOperand(); 7747public override IOperation VisitSwitchExpression(ISwitchExpressionOperation operation, int? captureIdForResult) 7774var capturedInput = VisitAndCapture(operation.Value); 7824var makeException = (matchFailureCtor is null) 7825? MakeInvalidOperation(operation.Syntax, type: _compilation.GetSpecialType(SpecialType.System_Object), ImmutableArray<IOperation>.Empty) 7839private void VisitUsingVariableDeclarationOperation(IUsingDeclarationOperation operation, ReadOnlySpan<IOperation> statements) 7841IOperation? saveCurrentStatement = _currentStatement; 7848ArrayBuilder<IOperation> statementsBuilder = ArrayBuilder<IOperation>.GetInstance(statements.Length); 7849ArrayBuilder<IOperation>? localFunctionsBuilder = null; 7851foreach (var statement in statements) 7855(localFunctionsBuilder ??= ArrayBuilder<IOperation>.GetInstance()).Add(statement); 7884public IOperation? Visit(IOperation? operation) 7893public IOperation? VisitRequired(IOperation? operation, int? argument = null) 7896var result = Visit(operation, argument); 7903public IOperation? BaseVisitRequired(IOperation? operation, int? argument) 7907var result = base.Visit(operation, argument); 7914public override IOperation? Visit(IOperation? operation, int? argument) 7923var result = PopStackFrame(PushStackFrame(), base.Visit(operation, argument)); 7929public override IOperation DefaultVisit(IOperation operation, int? captureIdForResult) 7935public override IOperation VisitArgument(IArgumentOperation operation, int? captureIdForResult) 7940public override IOperation VisitUsingDeclaration(IUsingDeclarationOperation operation, int? captureIdForResult) 7945public override IOperation VisitWith(IWithOperation operation, int? captureIdForResult) 7954IOperation visitedInstance = VisitRequired(operation.Operand); 7955IOperation cloned; 7972IOperation handleAnonymousTypeWithExpression(WithOperation operation, int? captureIdForResult) 8005var explicitProperties = new Dictionary<IPropertySymbol, IOperation>(SymbolEqualityComparer.IgnoreAll); 8006var initializerBuilder = ArrayBuilder<IOperation>.GetInstance(initializers.Length); 8009foreach (IOperation initializer in initializers) 8054if (explicitProperties.TryGetValue(property, out var assignment)) 8086SimpleAssignmentOperation makeAssignment(IPropertySymbol property, IOperation capturedValue, WithOperation operation) 8101static bool setsAllProperties(ImmutableArray<IOperation> initializers, IEnumerable<IPropertySymbol> properties) 8104foreach (var initializer in initializers) 8125public override IOperation VisitAttribute(IAttributeOperation operation, int? captureIdForResult)
Operations\ControlFlowGraphBuilder.ImplicitInstanceInfo.cs (6)
23public IOperation? ImplicitInstance { get; } 33public PooledDictionary<IPropertySymbol, IOperation>? AnonymousTypePropertyValues { get; } 35public ImplicitInstanceInfo(IOperation currentImplicitInstance) 49AnonymousTypePropertyValues = PooledDictionary<IPropertySymbol, IOperation>.GetInstance(); 66AnonymousTypePropertyValues = PooledDictionary<IPropertySymbol, IOperation>.GetInstance(); 68foreach (KeyValuePair<IPropertySymbol, IOperation> pair in context.AnonymousTypePropertyValues)
Operations\ControlFlowGraphBuilder.InterpolatedStringContext.cs (2)
47private void AssertContainingContextIsForThisCreation(IOperation placeholderOperation, bool assertArgumentContext) 52IOperation? operation = placeholderOperation.Parent;
Operations\ControlFlowGraphBuilder.RegionBuilder.cs (9)
311foreach ((IMethodSymbol method, IOperation _) in LocalFunctions) 387foreach (IOperation o in block.StatementsOpt) 399OperationVisitor<(ImmutableDictionary<IFlowAnonymousFunctionOperation, (ControlFlowRegion region, int ordinal)>.Builder map, ControlFlowRegion region), IOperation> 403public override IOperation? VisitFlowAnonymousFunction( 411internal override IOperation? VisitNoneOperation(IOperation operation, (ImmutableDictionary<IFlowAnonymousFunctionOperation, (ControlFlowRegion region, int ordinal)>.Builder map, ControlFlowRegion region) argument) 416public override IOperation? DefaultVisit( 417IOperation operation, 420foreach (IOperation child in ((Operation)operation).ChildOperations)
Operations\IOperation.cs (2)
25IOperation? Parent { get; } 51IEnumerable<IOperation> Children { get; }
Operations\IOperation.OperationList.cs (14)
24public readonly partial struct OperationList : IReadOnlyCollection<IOperation> 37public ImmutableArray<IOperation> ToImmutableArray() 42return ImmutableArray<IOperation>.Empty; 48var builder = ArrayBuilder<IOperation>.GetInstance(Count); 49foreach (var child in this) 57IEnumerator<IOperation> IEnumerable<IOperation>.GetEnumerator() 61return SpecializedCollections.EmptyEnumerator<IOperation>(); 67IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable<IOperation>)this).GetEnumerator(); 71public IOperation First() 84public IOperation Last() 122public IOperation Current 145private sealed class EnumeratorImpl : IEnumerator<IOperation> 154public IOperation Current => _enumerator.Current;
Operations\IOperation.OperationList.Reversed.cs (15)
26public readonly struct Reversed : IReadOnlyCollection<IOperation> 39public ImmutableArray<IOperation> ToImmutableArray() 45return ImmutableArray<IOperation>.Empty; 51var builder = ArrayBuilder<IOperation>.GetInstance(Count); 52foreach (var child in this) 59static ImmutableArray<IOperation> reverseArray(ImmutableArray<IOperation> input) 61var builder = ArrayBuilder<IOperation>.GetInstance(input.Length); 71IEnumerator<IOperation> IEnumerable<IOperation>.GetEnumerator() 75return SpecializedCollections.EmptyEnumerator<IOperation>(); 81IEnumerator IEnumerable.GetEnumerator() => ((IEnumerable<IOperation>)this).GetEnumerator(); 102public IOperation Current 125private sealed class EnumeratorImpl : IEnumerator<IOperation> 134public IOperation Current => _enumerator.Current;
Operations\Loops\ForToLoopOperationInfo.cs (4)
13public readonly IOperation LessThanOrEqual; 14public readonly IOperation GreaterThanOrEqual; 16public ForToLoopOperationUserDefinedInfo(IBinaryOperation addition, IBinaryOperation subtraction, IOperation lessThanOrEqual, IOperation greaterThanOrEqual)
Operations\Operation.cs (19)
20protected static readonly IOperation s_unset = new EmptyOperation(semanticModel: null, syntax: null!, isImplicit: true); 25private IOperation? _parentDoNotAccessDirectly; 48public IOperation? Parent 107IEnumerable<IOperation> IOperation.Children => this.ChildOperations; 110public IOperation.OperationList ChildOperations => new IOperation.OperationList(this); 113internal abstract IOperation GetCurrent(int slot, int index); 123SemanticModel? IOperation.SemanticModel => _owningSemanticModelOpt?.ContainingPublicModelOrSelf; 127/// Note that this may be different than <see cref="IOperation.SemanticModel"/>, which 137protected void SetParentOperation(IOperation? parent) 148public static T? SetParentOperation<T>(T? operation, IOperation? parent) where T : IOperation 156public static ImmutableArray<T> SetParentOperation<T>(ImmutableArray<T> operations, IOperation? parent) where T : IOperation 174internal static void VerifyParentOperation(IOperation? parent, IOperation child) 183internal static void VerifyParentOperation<T>(IOperation? parent, ImmutableArray<T> children) where T : IOperation
Operations\OperationCloner.cs (14)
11internal sealed partial class OperationCloner : OperationVisitor<object?, IOperation> 14public IOperation? Visit(IOperation? operation) 19internal override IOperation VisitNoneOperation(IOperation operation, object? argument) 24public override IOperation VisitFlowAnonymousFunction(IFlowAnonymousFunctionOperation operation, object? argument) 30public override IOperation VisitDynamicObjectCreation(IDynamicObjectCreationOperation operation, object? argument) 35public override IOperation VisitDynamicInvocation(IDynamicInvocationOperation operation, object? argument) 40public override IOperation VisitDynamicIndexerAccess(IDynamicIndexerAccessOperation operation, object? argument) 45public override IOperation VisitInvalid(IInvalidOperation operation, object? argument) 50public override IOperation VisitFlowCapture(IFlowCaptureOperation operation, object? argument) 55public override IOperation VisitIsNull(IIsNullOperation operation, object? argument) 60public override IOperation VisitCaughtException(ICaughtExceptionOperation operation, object? argument) 65public override IOperation VisitStaticLocalInitializationSemaphore(IStaticLocalInitializationSemaphoreOperation operation, object? argument)
Operations\OperationExtensions.cs (15)
28internal static bool HasErrors(this IOperation operation, Compilation compilation, CancellationToken cancellationToken = default(CancellationToken)) 70public static IEnumerable<IOperation> Descendants(this IOperation? operation) 79public static IEnumerable<IOperation> DescendantsAndSelf(this IOperation? operation) 84private static IEnumerable<IOperation> Descendants(IOperation? operation, bool includeSelf) 96var stack = ArrayBuilder<IOperation.OperationList.Enumerator>.GetInstance(); 108var current = iterator.Current; 329/// Gets the root operation for the <see cref="IOperation"/> tree containing the given <paramref name="operation"/>. 332internal static IOperation GetRootOperation(this IOperation operation) 351public static IOperation? GetCorrespondingOperation(this IBranchOperation operation) 373for (IOperation current = operation; current.Parent != null; current = current.Parent) 388internal static ConstantValue? GetConstantValue(this IOperation operation)
Operations\OperationFactory.cs (1)
11public static IInvalidOperation CreateInvalidOperation(SemanticModel semanticModel, SyntaxNode syntax, ImmutableArray<IOperation> children, bool isImplicit)
Operations\OperationMapBuilder.cs (13)
19internal static void AddToMap(IOperation root, Dictionary<SyntaxNode, IOperation> dictionary) 25private sealed class Walker : OperationWalker<Dictionary<SyntaxNode, IOperation>> 29public override object? DefaultVisit(IOperation operation, Dictionary<SyntaxNode, IOperation> argument) 35public override object? VisitBinaryOperator([DisallowNull] IBinaryOperation? operation, Dictionary<SyntaxNode, IOperation> argument) 57public override object? VisitConditional(IConditionalOperation operation, Dictionary<SyntaxNode, IOperation> argument) 78public override object? VisitBinaryPattern(IBinaryPatternOperation operation, Dictionary<SyntaxNode, IOperation> argument) 100internal override object? VisitNoneOperation(IOperation operation, Dictionary<SyntaxNode, IOperation> argument) 107private static void RecordOperation(IOperation operation, Dictionary<SyntaxNode, IOperation> argument) 114$"Duplicate operation node for {operation.Syntax}. Existing node is {(argument.TryGetValue(operation.Syntax, out var original) ? (OperationKind?)original.Kind : null)}, new node is {operation.Kind}.");
Operations\OperationNodes.cs (26)
18public NoneOperation(ImmutableArray<IOperation> children, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) : 26internal ImmutableArray<IOperation> Children { get; } 28internal override IOperation GetCurrent(int slot, int index) 87public InvalidOperation(ImmutableArray<IOperation> children, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, ConstantValue? constantValue, bool isImplicit) : 97internal ImmutableArray<IOperation> Children { get; } 99internal override IOperation GetCurrent(int slot, int index) 163internal override IOperation GetCurrent(int slot, int index) => throw ExceptionUtilities.UnexpectedValue((slot, index)); 235protected HasDynamicArgumentsExpression(ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 246public ImmutableArray<IOperation> Arguments { get; } 252public DynamicObjectCreationOperation(IObjectOrCollectionInitializerOperation? initializer, ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 264internal override IOperation GetCurrent(int slot, int index) 334public DynamicInvocationOperation(IOperation operation, ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 342internal override IOperation GetCurrent(int slot, int index) 400public IOperation Operation { get; } 416public DynamicIndexerAccessOperation(IOperation operation, ImmutableArray<IOperation> arguments, ImmutableArray<string?> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit) : 422public IOperation Operation { get; } 428internal override IOperation GetCurrent(int slot, int index) 513internal override IOperation GetCurrent(int slot, int index) 517IOperation getCurrentSwitchTop() 529IOperation getCurrentSwitchBottom() 649public FlowCaptureOperation(int id, SyntaxNode syntax, IOperation value) : 658public IsNullOperation(SyntaxNode syntax, IOperation operand, ITypeSymbol type, ConstantValue? constantValue) : 688public static BlockOperation CreateTemporaryBlock(ImmutableArray<IOperation> statements, SemanticModel semanticModel, SyntaxNode syntax) 691private BlockOperation(ImmutableArray<IOperation> statements, SemanticModel semanticModel, SyntaxNode syntax)
Operations\OperationVisitor.cs (2)
8/// Represents a <see cref="IOperation"/> visitor that visits only the single IOperation 21/// Represents a <see cref="IOperation"/> visitor that visits only the single IOperation
Operations\OperationWalker.cs (12)
8/// Represents a <see cref="OperationVisitor"/> that descends an entire <see cref="IOperation"/> tree 15private void VisitChildOperations(IOperation operation) 17foreach (var child in ((Operation)operation).ChildOperations) 23public override void Visit(IOperation? operation) 40public override void DefaultVisit(IOperation operation) 45internal override void VisitNoneOperation(IOperation operation) 52/// Represents a <see cref="OperationVisitor{TArgument, TResult}"/> that descends an entire <see cref="IOperation"/> tree 59private void VisitChildrenOperations(IOperation operation, TArgument argument) 61foreach (var child in ((Operation)operation).ChildOperations) 67public override object? Visit(IOperation? operation, TArgument argument) 86public override object? DefaultVisit(IOperation operation, TArgument argument) 92internal override object? VisitNoneOperation(IOperation operation, TArgument argument)
Microsoft.CodeAnalysis.Analyzers (231)
FixAnalyzers\FixerWithFixAllAnalyzer.cs (1)
203where T : IOperation
MetaAnalyzers\CompareSymbolsCorrectlyAnalyzer.cs (3)
274private static bool IsSymbolType(IOperation? operation, INamedTypeSymbol? symbolType) 294private static bool IsSymbolClassType(IOperation operation) 311private static bool IsExplicitCastToObject(IOperation operation)
MetaAnalyzers\DiagnosticAnalyzerAPIUsageAnalyzer.cs (2)
225var operationBlock = semanticModel.GetOperation(node, cancellationToken); 230foreach (var operation in operationBlock.DescendantsAndSelf())
MetaAnalyzers\DiagnosticAnalyzerFieldsAnalyzer.cs (1)
37private static readonly string s_operationTypeFullName = typeof(IOperation).FullName;
MetaAnalyzers\DiagnosticDescriptorCreationAnalyzer.cs (5)
554IOperation operation, 830var value = argument.Value.WalkDownConversion(); 891IOperation valueOperation; 892var argumentValueOperation = argumentOperation.Value.WalkDownConversion(); 941private static bool TryGetNonEmptyConstantStringValueCore(IOperation operation, [NotNullWhen(returnValue: true)] out string? literalValue)
MetaAnalyzers\Fixers\CompareSymbolsCorrectlyFix.cs (4)
70var rawOperation = semanticModel.GetOperation(expression, cancellationToken); 85var rawOperation = semanticModel.GetOperation(expression, cancellationToken); 201IOperation currentOperation = invocationOperation; 222if (invocationOperation.GetInstance() is not IOperation instance)
MetaAnalyzers\PreferIsKindAnalyzer.cs (1)
78var possibleInvocation = operation.LeftOperand.WalkDownConversion();
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
Microsoft.CodeAnalysis.Analyzers.UnitTests (2)
MetaAnalyzers\DoNotStorePerCompilationDataOntoFieldsRuleTests.cs (2)
34GetCSharpExpectedDiagnostic(25, 29, violatingTypeName: typeof(IOperation).FullName) 90GetBasicExpectedDiagnostic(25, 35, violatingTypeName: typeof(IOperation).FullName)
Microsoft.CodeAnalysis.AnalyzerUtilities (556)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\RoslynAnalyzers\Utilities\FlowAnalysis\BranchWithInfo.cs (3)
47IOperation? branchValue, 68public IOperation? BranchValue { get; } 90IOperation? branchValue,
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\BasicBlockExtensions.cs (1)
133foreach (var operation in finallyRegion.DescendantOperations(cfg))
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\ControlFlowRegionExtensions.cs (2)
15public static IEnumerable<IOperation> DescendantOperations(this ControlFlowRegion controlFlowRegion, ControlFlowGraph cfg) 20foreach (var operation in block.DescendantOperations())
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\IOperationExtensions_FlowAnalysis.cs (2)
14public static bool IsInsideCatchRegion([NotNullWhen(returnValue: true)] this IOperation? operation, ControlFlowGraph cfg) 39foreach (var descendant in block.DescendantOperations())
src\RoslynAnalyzers\Utilities\FlowAnalysis\Extensions\OperationBlocksExtensions.cs (2)
13public static ControlFlowGraph? GetControlFlowGraph(this ImmutableArray<IOperation> operationBlocks) 15foreach (var operationRoot in operationBlocks)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\CopyAnalysis\CopyAnalysis.CopyDataFlowOperationVisitor.cs (9)
39public override CopyAnalysisData Flow(IOperation statement, BasicBlock block, CopyAnalysisData input) 94protected override CopyAbstractValue GetCopyAbstractValue(IOperation operation) => base.GetCachedAbstractValue(operation); 106protected override void SetAbstractValueForAssignment(AnalysisEntity targetAnalysisEntity, IOperation? assignedValueOperation, CopyAbstractValue assignedValue) 118protected override void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, CopyAbstractValue assignedValue) 305protected override CopyAbstractValue ComputeAnalysisValueForReferenceOperation(IOperation operation, CopyAbstractValue defaultValue) 327IOperation leftOperand, 328IOperation rightOperand, 380protected override PredicateValueKind SetValueForIsNullComparisonOperator(IOperation leftOperand, bool equals, CopyAnalysisData targetAnalysisData) => PredicateValueKind.Unknown; 594public override CopyAbstractValue DefaultVisit(IOperation operation, object? argument)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAbstractValue.cs (7)
13/// It contains the set of <see cref="IOperation"/>s that dispose an associated disposable <see cref="AbstractLocation"/> and 24: this(ImmutableHashSet<IOperation>.Empty, kind) 29internal DisposeAbstractValue(ImmutableHashSet<IOperation> disposingOrEscapingOperations, DisposeAbstractValueKind kind) 36internal DisposeAbstractValue WithNewDisposingOperation(IOperation disposingOperation) 43internal DisposeAbstractValue WithNewEscapingOperation(IOperation escapingOperation) 52private static void VerifyArguments(ImmutableHashSet<IOperation> disposingOrEscapingOperations, DisposeAbstractValueKind kind) 71public ImmutableHashSet<IOperation> DisposingOrEscapingOperations { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAbstractValueKind.cs (1)
8/// Abstract dispose value for <see cref="AbstractLocation"/>/<see cref="IOperation"/> tracked by <see cref="DisposeAnalysis"/>.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.cs (1)
18/// Dataflow analysis to track dispose state of <see cref="AbstractLocation"/>/<see cref="IOperation"/> instances.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.DisposeAbstractValueDomain.cs (2)
19private readonly SetAbstractDomain<IOperation> _disposingOperationsDomain = SetAbstractDomain<IOperation>.Default;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysis.DisposeDataFlowOperationVisitor.cs (14)
81protected override DisposeAbstractValue HandleInstanceCreation(IOperation creation, PointsToAbstractValue instanceLocation, DisposeAbstractValue defaultValue) 108private void HandleDisposingOperation(IOperation disposingOperation, IOperation? disposedInstance) 126private void HandlePossibleInvalidatingOperation(IOperation invalidatedInstance) 139private void HandlePossibleEscapingOperation(IOperation escapingOperation, ImmutableHashSet<AbstractLocation> escapedLocations) 152protected override void SetAbstractValueForArrayElementInitializer(IArrayCreationOperation arrayCreation, ImmutableArray<AbstractIndex> indices, ITypeSymbol elementType, IOperation initializer, DisposeAbstractValue value) 158protected override void SetAbstractValueForAssignment(IOperation target, IOperation? assignedValueOperation, DisposeAbstractValue assignedValue, bool mayBeAssignment = false) 164protected override void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, DisposeAbstractValue assignedValue) 220public override DisposeAbstractValue DefaultVisit(IOperation operation, object? argument) 226public override DisposeAbstractValue Visit(IOperation? operation, object? argument) 236protected override void HandlePossibleThrowingOperation(IOperation operation) 259IOperation? visitedInstance, 262IOperation originalOperation,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\DisposeAnalysis\DisposeAnalysisHelper.cs (3)
123ImmutableArray<IOperation> operationBlocks, 158private bool IsDisposableCreation(IOperation operation) 163public bool HasAnyDisposableCreationDescendant(ImmutableArray<IOperation> operationBlocks, IMethodSymbol containingMethod)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateAnalysis.cs (3)
21/// Dataflow analysis to track set of global <see cref="IAbstractAnalysisValue"/>s enabled on each control flow path at each <see cref="IOperation"/> in the <see cref="ControlFlowGraph"/>. 71Func<IOperation, ValueContentAbstractValue>? getValueContentValueForAdditionalSupportedValueTypeOperation = null) 101Func<IOperation, ValueContentAbstractValue>? getValueContentValueForAdditionalSupportedValueTypeOperation = null)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateDataFlowOperationVisitor.cs (5)
30private readonly ImmutableDictionary<IOperation, TAbstractAnalysisValue>.Builder _globalValuesMapBuilder; 37_globalValuesMapBuilder = ImmutableDictionary.CreateBuilder<IOperation, TAbstractAnalysisValue>(); 45internal ImmutableDictionary<IOperation, TAbstractAnalysisValue> GetGlobalValuesMap() 72IOperation statement, BasicBlock block, DictionaryAnalysisData<AnalysisEntity, TAbstractAnalysisValue> input) 159public override TAbstractAnalysisValue Visit(IOperation? operation, object? argument)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\GlobalFlowStateAnalysis\GlobalFlowStateValueSetFlowOperationVisitor.cs (2)
110IOperation? visitedInstance, 113IOperation originalOperation,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAbstractValue.cs (1)
8/// Abstract validation value for <see cref="AbstractLocation"/>/<see cref="IOperation"/> tracked by <see cref="ParameterValidationAnalysis"/>.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysis.cs (1)
19/// Dataflow analysis to track <see cref="ParameterValidationAbstractValue"/> of <see cref="AbstractLocation"/>/<see cref="IOperation"/> instances.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ParameterValidationAnalysis\ParameterValidationAnalysis.ParameterValidationDataFlowOperationVisitor.cs (15)
97protected override void SetAbstractValueForAssignment(IOperation target, IOperation? assignedValueOperation, ParameterValidationAbstractValue assignedValue, bool mayBeAssignment = false) 106protected override void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, ParameterValidationAbstractValue assignedValue) 111protected override void SetAbstractValueForArrayElementInitializer(IArrayCreationOperation arrayCreation, ImmutableArray<AbstractIndex> indices, ITypeSymbol elementType, IOperation initializer, ParameterValidationAbstractValue value) 146private void MarkValidatedLocations(IOperation operation) 149private IEnumerable<AbstractLocation> GetNotValidatedLocations(IOperation operation) 155private static bool IsHazardousIfNull(IOperation operation) 174private void HandlePotentiallyHazardousOperation(IOperation operation, IEnumerable<AbstractLocation> nonValidatedLocations) 220public override ParameterValidationAbstractValue Visit(IOperation? operation, object? argument) 252IOperation? visitedInstance, 255IOperation originalOperation, 266IOperation originalOperation, 277IOperation originalOperation, 285private void ProcessRegularInvocationOrCreation(IMethodSymbol? targetMethod, ImmutableArray<IArgumentOperation> arguments, IOperation operation) 356private void ProcessLambdaOrLocalFunctionInvocation(IMethodSymbol targetMethod, IOperation invocation)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\NullAbstractValue.cs (1)
8/// Abstract null value for <see cref="AnalysisEntity"/>/<see cref="IOperation"/> tracked by <see cref="PointsToAnalysis"/>.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAbstractValue.cs (7)
13/// Abstract PointsTo value for an <see cref="AnalysisEntity"/>/<see cref="IOperation"/> tracked by <see cref="PointsToAnalysis"/>. 41LValueCapturedOperations = ImmutableHashSet<IOperation>.Empty; 46private PointsToAbstractValue(ImmutableHashSet<IOperation> lValueCapturedOperations) 62LValueCapturedOperations = ImmutableHashSet<IOperation>.Empty; 75internal static PointsToAbstractValue Create(IOperation lValueCapturedOperation) 112internal static PointsToAbstractValue Create(ImmutableHashSet<IOperation> lValueCapturedOperations) 182public ImmutableHashSet<IOperation> LValueCapturedOperations { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.cs (1)
19/// Dataflow analysis to track locations pointed to by <see cref="AnalysisEntity"/> and <see cref="IOperation"/> instances.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.PointsToAbstractValueDomain.cs (2)
18private readonly SetAbstractDomain<IOperation> _lValueCapturesDomain = SetAbstractDomain<IOperation>.Default;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysis.PointsToDataFlowOperationVisitor.cs (44)
30private readonly PooledDictionary<IOperation, ImmutableHashSet<AbstractLocation>.Builder> _escapedOperationLocationsBuilder; 31private readonly PooledDictionary<IOperation, ImmutableHashSet<AbstractLocation>.Builder> _escapedReturnValueLocationsBuilder; 44_escapedOperationLocationsBuilder = PooledDictionary<IOperation, ImmutableHashSet<AbstractLocation>.Builder>.GetInstance(); 45_escapedReturnValueLocationsBuilder = PooledDictionary<IOperation, ImmutableHashSet<AbstractLocation>.Builder>.GetInstance(); 53public ImmutableDictionary<IOperation, ImmutableHashSet<AbstractLocation>> GetEscapedLocationsThroughOperationsMap() 56public ImmutableDictionary<IOperation, ImmutableHashSet<AbstractLocation>> GetEscapedLocationsThroughReturnValuesMap() 99public override PointsToAnalysisData Flow(IOperation statement, BasicBlock block, PointsToAnalysisData input) 169protected override PointsToAbstractValue GetPointsToAbstractValue(IOperation operation) => base.GetCachedAbstractValue(operation); 195protected override CopyAbstractValue GetCopyAbstractValue(IOperation operation) 212protected override void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, PointsToAbstractValue assignedValue) 273protected override PointsToAbstractValue ComputeAnalysisValueForReferenceOperation(IOperation operation, PointsToAbstractValue defaultValue) 332protected override void ProcessReturnValue(IOperation? returnValue) 344private protected override PointsToAbstractValue GetAbstractValueForImplicitWrappingTaskCreation(IOperation returnValueOperation, PointsToAbstractValue returnValue, PointsToAbstractValue implicitTaskPointsToValue) 361IOperation leftOperand, 362IOperation rightOperand, 380protected override PredicateValueKind SetValueForIsNullComparisonOperator(IOperation leftOperand, bool equals, PointsToAnalysisData targetAnalysisData) 388IOperation target, 389IOperation assignedValueOperation, 399IOperation target, 627private void HandleEscapingOperation(IOperation escapingOperation, IOperation escapedInstance) 632private void HandleEscapingOperation(IOperation escapingOperation, IOperation escapedInstance, PooledDictionary<IOperation, ImmutableHashSet<AbstractLocation>.Builder> builder) 637foreach (var capturedOperation in escapedInstancePointsToValue.LValueCapturedOperations) 718private void HandlePossibleEscapingForAssignment(IOperation target, IOperation value, IOperation operation) 730protected override void SetAbstractValueForAssignment(IOperation target, IOperation? assignedValueOperation, PointsToAbstractValue assignedValue, bool mayBeAssignment = false) 740protected override void SetAbstractValueForArrayElementInitializer(IArrayCreationOperation arrayCreation, ImmutableArray<AbstractIndex> indices, ITypeSymbol elementType, IOperation initializer, PointsToAbstractValue value) 751public override PointsToAbstractValue DefaultVisit(IOperation operation, object? argument) 787IOperation? currentInstanceOperation = operation.GetInstance(IsInsideAnonymousObjectInitializer); 799where TOperation : IOperation 921private PointsToAbstractValue VisitInvocationCommon(IOperation operation, IOperation? instance) 942IOperation? visitedInstance, 945IOperation originalOperation, 1029IOperation originalOperation, 1039IOperation originalOperation, 1052private NullAbstractValue GetNullStateBasedOnInstanceOrReferenceValue(IOperation? referenceOrInstance, ITypeSymbol? operationType, NullAbstractValue defaultValue) 1068private PointsToAbstractValue GetValueBasedOnInstanceOrReferenceValue(IOperation? referenceOrInstance, IOperation operation, PointsToAbstractValue defaultValue) 1209IOperation operation,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PointsToAnalysis\PointsToAnalysisResult.cs (5)
14private readonly ImmutableDictionary<IOperation, ImmutableHashSet<AbstractLocation>> _escapedLocationsThroughOperationsMap; 15private readonly ImmutableDictionary<IOperation, ImmutableHashSet<AbstractLocation>> _escapedLocationsThroughReturnValuesMap; 22ImmutableDictionary<IOperation, ImmutableHashSet<AbstractLocation>> escapedLocationsThroughOperationsMap, 23ImmutableDictionary<IOperation, ImmutableHashSet<AbstractLocation>> escapedLocationsThroughReturnValuesMap, 37public ImmutableHashSet<AbstractLocation> GetEscapedAbstractLocations(IOperation operation)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysis.cs (4)
25/// Dataflow analysis to track <see cref="PropertySetAbstractValue"/> of <see cref="AbstractLocation"/>/<see cref="IOperation"/> instances. 154IEnumerable<(IOperation Operation, ISymbol ContainingSymbol)> rootOperationsNeedingAnalysis, 190IEnumerable<(IOperation Operation, ISymbol ContainingSymbol)> rootOperationsNeedingAnalysis, 200foreach ((IOperation Operation, ISymbol ContainingSymbol) in rootOperationsNeedingAnalysis)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\PropertySetAnalysis\PropertySetAnalysis.PropertySetDataFlowOperationVisitor.cs (20)
135protected override void SetAbstractValueForArrayElementInitializer(IArrayCreationOperation arrayCreation, ImmutableArray<AbstractIndex> indices, ITypeSymbol elementType, IOperation initializer, PropertySetAbstractValue value) 139protected override void SetAbstractValueForAssignment(IOperation target, IOperation? assignedValueOperation, PropertySetAbstractValue assignedValue, bool mayBeAssignment = false) 143protected override void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, PropertySetAbstractValue assignedValue) 200out IOperation? propertySetInstance)) 232if (this.TryUnwrapFlowCaptureReference(operation.Target, out IOperation? lValueOperation, OperationKind.PropertyReference, OperationKind.FieldReference)) 279this.TryUnwrapFlowCaptureReference(operation.Target, out IOperation? lValue, OperationKind.PropertyReference); 456public override PropertySetAbstractValue VisitInvocation_NonLambdaOrDelegateOrLocalFunction(IMethodSymbol method, IOperation? visitedInstance, ImmutableArray<IArgumentOperation> visitedArguments, bool invokedAsDelegate, IOperation originalOperation, PropertySetAbstractValue defaultValue) 478IOperation? propertySetInstance = visitedInstance; 516[NotNullWhen(returnValue: true)] out IOperation? instance) 532IOperation value = argumentOperation.Value; 597IOperation propertySetInstance, 635public override PropertySetAbstractValue VisitInvocation_LocalFunction(IMethodSymbol localFunction, ImmutableArray<IArgumentOperation> visitedArguments, IOperation originalOperation, PropertySetAbstractValue defaultValue) 643public override PropertySetAbstractValue VisitInvocation_Lambda(IFlowAnonymousFunctionOperation lambda, ImmutableArray<IArgumentOperation> visitedArguments, IOperation originalOperation, PropertySetAbstractValue defaultValue) 651protected override void ProcessReturnValue(IOperation? returnValue) 668private void MergeInterproceduralResults(IOperation originalOperation) 705private bool TryUnwrapFlowCaptureReference(IOperation flowCaptureReferenceOperation, [NotNullWhen(returnValue: true)] out IOperation? unwrappedOperation, params OperationKind[] kinds) 713IOperation lValueOperation = lValuePointsToAbstractValue.LValueCapturedOperations.First();
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\TaintedDataAnalysis\TaintedDataAnalysis.TaintedDataOperationVisitor.cs (12)
176public override TaintedDataAbstractValue DefaultVisit(IOperation operation, object? argument) 185foreach (IOperation childOperation in operation.ChildOperations) 231protected override TaintedDataAbstractValue ComputeAnalysisValueForReferenceOperation(IOperation operation, TaintedDataAbstractValue defaultValue) 263IOperation? visitedInstance, 266IOperation originalOperation, 352IOperation? thenTaintedTargetOperation = visitedInstance != null && thenTaintedTarget == TaintedTargetValue.This 357var operation = visitedInstance != null && ifTaintedParameter == TaintedTargetValue.This 423public override TaintedDataAbstractValue VisitInvocation_LocalFunction(IMethodSymbol localFunction, ImmutableArray<IArgumentOperation> visitedArguments, IOperation originalOperation, TaintedDataAbstractValue defaultValue) 437public override TaintedDataAbstractValue VisitInvocation_Lambda(IFlowAnonymousFunctionOperation lambda, ImmutableArray<IArgumentOperation> visitedArguments, IOperation originalOperation, TaintedDataAbstractValue defaultValue) 491.Select<IOperation, TaintedDataAbstractValue>(this.GetCachedAbstractValue) 561IOperation originalOperation) 763private void SetTaintedForEntity(IOperation operation, TaintedDataAbstractValue value)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContainsNonLiteralState.cs (1)
8/// Value state for presence of non-literal values for <see cref="AnalysisEntity"/>/<see cref="IOperation"/> tracked by <see cref="ValueContentAnalysis"/>.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAbstractValue.cs (1)
19/// Abstract value content data value for <see cref="AnalysisEntity"/>/<see cref="IOperation"/> tracked by <see cref="ValueContentAnalysis"/>.
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.cs (3)
18/// Dataflow analysis to track value content of <see cref="AnalysisEntity"/>/<see cref="IOperation"/>. 57Func<IOperation, ValueContentAbstractValue>? getValueContentValueForAdditionalSupportedValueTypeOperation = null) 91Func<IOperation, ValueContentAbstractValue>? getValueContentValueForAdditionalSupportedValueTypeOperation = null)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysis.ValueContentDataFlowOperationVisitor.cs (9)
78protected override CopyAbstractValue GetCopyAbstractValue(IOperation operation) 93protected override PredicateValueKind SetValueForIsNullComparisonOperator(IOperation leftOperand, bool equals, ValueContentAnalysisData targetAnalysisData) 97IOperation leftOperand, 98IOperation rightOperand, 114private void SetValueForComparisonOperator(IOperation target, IOperation assignedValue, bool equals, ref PredicateValueKind predicateValueKind, ValueContentAnalysisData targetAnalysisData) 184public override ValueContentAbstractValue DefaultVisit(IOperation operation, object? argument) 272IOperation? visitedInstance, 275IOperation originalOperation,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Analysis\ValueContentAnalysis\ValueContentAnalysisContext.cs (3)
36Func<IOperation, ValueContentAbstractValue>? getValueForAdditionalSupportedValueTypeOperation, 50public Func<IOperation, ValueContentAbstractValue>? GetValueForAdditionalSupportedValueTypeOperation { get; } 64Func<IOperation, ValueContentAbstractValue>? getValueContentValueForAdditionalSupportedValueTypeOperation,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractIndex.cs (1)
15public static AbstractIndex Create(IOperation operation) => new OperationBasedIndex(operation);
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractIndex.OperationBasedIndex.cs (2)
13public OperationBasedIndex(IOperation operation) 18public IOperation Operation { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractLocation.cs (23)
22/// 1. An allocation or an object creation operation (<see cref="CreateAllocationLocation(IOperation, ITypeSymbol, PointsToAnalysisContext)"/>). 23/// 2. Location for the implicit 'this' or 'Me' instance being analyzed (<see cref="CreateThisOrMeLocation(INamedTypeSymbol, ImmutableStack{IOperation})"/>). 24/// 3. Location created for certain symbols which do not have a declaration in executable code, i.e. no <see cref="IOperation"/> for declaration (such as parameter symbols, member symbols, etc. - <see cref="CreateSymbolLocation(ISymbol, ImmutableStack{IOperation})"/>/>). 26/// See <see cref="CreateFlowCaptureLocation(InterproceduralCaptureId, ITypeSymbol, ImmutableStack{IOperation})"/> 35private AbstractLocation(IOperation? creation, ImmutableStack<IOperation>? creationCallStack, AnalysisEntity? analysisEntity, ISymbol? symbol, InterproceduralCaptureId? captureId, ITypeSymbol? locationType, bool isSpecialSingleton) 40CreationCallStack = creationCallStack ?? ImmutableStack<IOperation>.Empty; 48private static AbstractLocation Create(IOperation? creation, ImmutableStack<IOperation>? creationCallStack, AnalysisEntity? analysisEntity, ISymbol? symbol, InterproceduralCaptureId? captureId, ITypeSymbol? locationType) 56public static AbstractLocation CreateAllocationLocation(IOperation creation, ITypeSymbol locationType, PointsToAnalysisContext analysisContext) 58internal static AbstractLocation CreateAllocationLocation(IOperation creation, ITypeSymbol locationType, ImmutableStack<IOperation>? callStack) 62public static AbstractLocation CreateThisOrMeLocation(INamedTypeSymbol namedTypeSymbol, ImmutableStack<IOperation>? creationCallStack) 64public static AbstractLocation CreateSymbolLocation(ISymbol symbol, ImmutableStack<IOperation>? creationCallStack) 66public static AbstractLocation CreateFlowCaptureLocation(InterproceduralCaptureId captureId, ITypeSymbol locationType, ImmutableStack<IOperation>? creationCallStack) 69public IOperation? Creation { get; } 70public ImmutableStack<IOperation> CreationCallStack { get; } 76public IOperation? GetTopOfCreationCallStackOrCreation() 134foreach (var creation in CreationCallStack) 154SyntaxNode? TryGetSyntaxNodeToReportDiagnostic(IOperation creation, PointsToAnalysisResult pointsToAnalysisResult) 177SyntaxNode? TryGetSyntaxNodeToReportDiagnosticCore(IOperation operation) 182SyntaxNode? TryGetSyntaxNodeToReportDiagnosticForPointsValue(PointsToAbstractValue pointsToValue, IOperation operation)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AbstractLocationDataFlowOperationVisitor.cs (1)
61protected virtual TAbstractAnalysisValue HandleInstanceCreation(IOperation creation, PointsToAbstractValue instanceLocation, TAbstractAnalysisValue defaultValue)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityDataFlowOperationVisitor.cs (11)
47protected override TAbstractAnalysisValue ComputeAnalysisValueForReferenceOperation(IOperation operation, TAbstractAnalysisValue defaultValue) 191protected override TAnalysisData GetMergedAnalysisDataForPossibleThrowingOperation(TAnalysisData? existingData, IOperation operation) 210protected override void SetAbstractValueForArrayElementInitializer(IArrayCreationOperation arrayCreation, ImmutableArray<AbstractIndex> indices, ITypeSymbol elementType, IOperation initializer, TAbstractAnalysisValue value) 218protected override void SetAbstractValueForAssignment(IOperation target, IOperation? assignedValueOperation, TAbstractAnalysisValue assignedValue, bool mayBeAssignment = false) 238protected override void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, TAbstractAnalysisValue assignedValue) 252protected virtual void SetAbstractValueForAssignment(AnalysisEntity targetAnalysisEntity, IOperation? assignedValueOperation, TAbstractAnalysisValue assignedValue) 264private void SetAbstractValueForAssignment(AnalysisEntity targetAnalysisEntity, AnalysisEntity? assignedValueEntity, IOperation? assignedValueOperation, TAbstractAnalysisValue assignedValue) 360private void TransferValueTypeInstanceAnalysisDataForAssignment(AnalysisEntity targetAnalysisEntity, AnalysisEntity? valueAnalysisEntity, IOperation? assignedValueOperation) 759private void HandleDeconstructionAssignment(IOperation target, ImmutableHashSet<AnalysisEntity> childEntities) 772var element = tupleOperation.Elements[i];
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\AnalysisEntityFactory.cs (20)
30private readonly Dictionary<IOperation, AnalysisEntity?> _analysisEntityMap; 35private readonly Func<IOperation, PointsToAbstractValue>? _getPointsToAbstractValue; 39private readonly ImmutableStack<IOperation>? _interproceduralCallStack; 40private readonly Func<IOperation, AnalysisEntity?>? _interproceduralGetAnalysisEntityForFlowCapture; 41private readonly Func<ISymbol, ImmutableStack<IOperation>?> _getInterproceduralCallStackForOwningSymbol; 46Func<IOperation, PointsToAbstractValue>? getPointsToAbstractValue, 52ImmutableStack<IOperation>? interproceduralCallStack, 54Func<IOperation, AnalysisEntity?>? interproceduralGetAnalysisEntityForFlowCapture, 55Func<ISymbol, ImmutableStack<IOperation>?> getInterproceduralCallStackForOwningSymbol) 93where T : IOperation 109private static AbstractIndex CreateAbstractIndex(IOperation operation) 125public bool TryCreate(IOperation operation, [NotNullWhen(returnValue: true)] out AnalysisEntity? analysisEntity) 135IOperation? instance = null; 316IOperation? instance = null; 349if (tupleOperation.TryGetParentTupleOperation(out var parentTupleOperationOpt, out var elementOfParentTupleContainingTuple) && 410public bool TryGetForInterproceduralAnalysis(IOperation operation, out AnalysisEntity? analysisEntity) 413private AnalysisEntity GetOrCreateForFlowCapture(CaptureId captureId, ITypeSymbol? type, IOperation flowCaptureOrReference, bool isLValueFlowCapture) 440ITypeSymbol type, IOperation? instance, [NotNullWhen(returnValue: true)] out AnalysisEntity? analysisEntity) 532ImmutableStack<IOperation>? interproceduralCallStackForSymbolDeclaration; 540interproceduralCallStackForSymbolDeclaration = ImmutableStack<IOperation>.Empty;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\ArgumentInfo.cs (2)
16IOperation operation, 27public IOperation Operation { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysis.cs (3)
19/// It performs a worklist based approach to flow abstract data values for <see cref="AnalysisEntity"/>/<see cref="IOperation"/> across the basic blocks until a fix point is reached. 27private static readonly BoundedCache<IOperation, SingleThreadedConcurrentDictionary<TAnalysisContext, TAnalysisResult>> s_resultCache = new(); 758foreach (var statement in block.Operations)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResult.cs (11)
26private readonly ImmutableDictionary<IOperation, TAbstractAnalysisValue> _operationStateMap; 27private readonly ImmutableDictionary<IOperation, PredicateValueKind> _predicateValueKindMap; 28private readonly ImmutableDictionary<IOperation, IDataFlowAnalysisResult<TAbstractAnalysisValue>> _interproceduralResultsMap; 35ImmutableDictionary<IOperation, TAbstractAnalysisValue> operationStateMap, 36ImmutableDictionary<IOperation, PredicateValueKind> predicateValueKindMap, 38ImmutableDictionary<IOperation, IDataFlowAnalysisResult<TAbstractAnalysisValue>> interproceduralResultsMap, 87internal DataFlowAnalysisResult<TBlockAnalysisResult, TAbstractAnalysisValue> With(ImmutableDictionary<IOperation, TAbstractAnalysisValue> operationStateMap) 98public TAbstractAnalysisValue this[IOperation operation] 147internal DataFlowAnalysisResult<TBlockAnalysisResult, TAbstractAnalysisValue>? TryGetInterproceduralResult(IOperation operation) 168internal IEnumerable<DataFlowAnalysisResult<TBlockAnalysisResult, TAbstractAnalysisValue>> TryGetLambdaOrLocalFunctionResults(IOperation lambdaOrLocalFunctionOperation) 222public PredicateValueKind GetPredicateKind(IOperation operation) => _predicateValueKindMap.TryGetValue(operation, out var valueKind) ? valueKind : PredicateValueKind.Unknown;
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowAnalysisResultBuilder.cs (3)
46ImmutableDictionary<IOperation, TAbstractAnalysisValue> stateMap, 47ImmutableDictionary<IOperation, PredicateValueKind> predicateValueKindMap, 49ImmutableDictionary<IOperation, IDataFlowAnalysisResult<TAbstractAnalysisValue>> interproceduralResultsMap,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\DataFlowOperationVisitor.cs (91)
47private readonly ImmutableDictionary<IOperation, TAbstractAnalysisValue>.Builder _valueCacheBuilder; 48private readonly ImmutableDictionary<IOperation, PredicateValueKind>.Builder _predicateValueKindCacheBuilder; 51private readonly HashSet<IOperation> _visitedFlowBranchConditions; 53private readonly HashSet<IOperation>? _returnValueOperations; 113private readonly Stack<IOperation> _interproceduralCallStack; 118private readonly ImmutableDictionary<IOperation, IDataFlowAnalysisResult<TAbstractAnalysisValue>>.Builder _interproceduralResultsBuilder; 152public ImmutableDictionary<IOperation, IDataFlowAnalysisResult<TAbstractAnalysisValue>> InterproceduralResultsMap => _interproceduralResultsBuilder.ToImmutable(); 275_valueCacheBuilder = ImmutableDictionary.CreateBuilder<IOperation, TAbstractAnalysisValue>(); 276_predicateValueKindCacheBuilder = ImmutableDictionary.CreateBuilder<IOperation, PredicateValueKind>(); 281_returnValueOperations = OwningSymbol is IMethodSymbol method && !method.ReturnsVoid ? new HashSet<IOperation>() : null; 282_interproceduralResultsBuilder = ImmutableDictionary.CreateBuilder<IOperation, IDataFlowAnalysisResult<TAbstractAnalysisValue>>(); 289_interproceduralCallStack = new Stack<IOperation>(); 298foreach (var operation in analysisContext.InterproceduralAnalysisData.CallStack) 377foreach (var operation in _returnValueOperations) 419public virtual TAnalysisData Flow(IOperation statement, BasicBlock block, TAnalysisData input) 428private void AfterVisitRoot(IOperation operation) 434foreach (var descendant in operation.DescendantsAndSelf()) 806IOperation returnValueOperation, 814protected virtual void ProcessReturnValue(IOperation? returnValue) 829private TAbstractAnalysisValue GetAbstractValueForReturnOperation(IOperation returnValueOperation, out PointsToAbstractValue? implicitTaskPointsToValue) 850protected virtual void HandlePossibleThrowingOperation(IOperation operation) 869IOperation? instance = null; 870IOperation? invocation = null; 930protected virtual TAnalysisData GetMergedAnalysisDataForPossibleThrowingOperation(TAnalysisData? existingData, IOperation operation) 1019internal ImmutableDictionary<IOperation, TAbstractAnalysisValue> GetStateMap() => _valueCacheBuilder.ToImmutable(); 1021internal ImmutableDictionary<IOperation, PredicateValueKind> GetPredicateValueKindMap() => _predicateValueKindCacheBuilder.ToImmutable(); 1045public TAbstractAnalysisValue GetCachedAbstractValue(IOperation operation) 1079protected void CacheAbstractValue(IOperation operation, TAbstractAnalysisValue value) 1089protected NullAbstractValue GetNullAbstractValue(IOperation operation) => GetPointsToAbstractValue(operation).NullState; 1091protected virtual CopyAbstractValue GetCopyAbstractValue(IOperation operation) 1103protected virtual PointsToAbstractValue GetPointsToAbstractValue(IOperation operation) 1115protected virtual ValueContentAbstractValue GetValueContentAbstractValue(IOperation operation) 1127protected ImmutableHashSet<AbstractLocation> GetEscapedLocations(IOperation operation) 1211protected virtual TAbstractAnalysisValue ComputeAnalysisValueForReferenceOperation(IOperation operation, TAbstractAnalysisValue defaultValue) 1247IOperation sourceOperand, 1250IOperation operation, 1386private void PerformPredicateAnalysis(IOperation operation) 1495var current = operation.Parent; 1515var current = operation.Parent; 1544private void PerformPredicateAnalysisCore(IOperation operation, TAnalysisData targetAnalysisData) 1715IOperation? leftOperand = null; 1716IOperation? rightOperand = null; 1788bool IsNotNullWhenFalse(IOperation operation) 1806bool IsNotNullWhenTrue(IOperation operation) 1825protected virtual void SetPredicateValueKind(IOperation operation, TAnalysisData analysisData, PredicateValueKind predicateValueKind) 1894protected virtual PredicateValueKind SetValueForEqualsOrNotEqualsComparisonOperator(IOperation leftOperand, IOperation rightOperand, bool equals, bool isReferenceEquality, TAnalysisData targetAnalysisData) 1900protected virtual PredicateValueKind SetValueForIsNullComparisonOperator(IOperation leftOperand, bool equals, TAnalysisData targetAnalysisData) 1939protected virtual void ProcessThrowValue(IOperation? thrownValue) 1946protected abstract void SetAbstractValueForArrayElementInitializer(IArrayCreationOperation arrayCreation, ImmutableArray<AbstractIndex> indices, ITypeSymbol elementType, IOperation initializer, TAbstractAnalysisValue value); 1947protected abstract void SetAbstractValueForAssignment(IOperation target, IOperation? assignedValueOperation, TAbstractAnalysisValue assignedValue, bool mayBeAssignment = false); 1948protected abstract void SetAbstractValueForTupleElementAssignment(AnalysisEntity tupleElementEntity, IOperation assignedValueOperation, TAbstractAnalysisValue assignedValue); 1949private void HandleFlowCaptureReferenceAssignment(IFlowCaptureReferenceOperation flowCaptureReference, IOperation assignedValueOperation, TAbstractAnalysisValue assignedValue) 1962var target = pointsToValue.LValueCapturedOperations.First(); 1973foreach (var capturedOperation in pointsToValue.LValueCapturedOperations) 1984foreach (var capturedOperation in pointsToValue.LValueCapturedOperations) 2024private void ResetValueTypeInstanceAnalysisData(IOperation operation) 2043private void ResetReferenceTypeInstanceAnalysisData(IOperation operation) 2061private void ResetInstanceAnalysisData(IOperation? operation) 2189protected bool TryGetInterproceduralAnalysisResult(IOperation operation, [NotNullWhen(returnValue: true)] out TAnalysisResult? analysisResult) 2204IOperation? instanceReceiver, 2206IOperation originalOperation, 2347var popped = _interproceduralCallStack.Pop(); 2574AnalysisEntity? GetAnalysisEntityForFlowCapture(IOperation operation) 2760protected TAbstractAnalysisValue VisitArray(IEnumerable<IOperation> operations, object? argument) 2762foreach (var operation in operations) 2770public override TAbstractAnalysisValue Visit(IOperation? operation, object? argument) 2805private TAbstractAnalysisValue VisitCore(IOperation operation, object? argument) 2824public override TAbstractAnalysisValue DefaultVisit(IOperation operation, object? argument) 2905IOperation elementInitializer = operation.ElementValues[index]; 3287using var _1 = PooledHashSet<(IMethodSymbol method, IOperation? instance)>.GetInstance(out var methodTargetsOptBuilder); 3312PooledHashSet<(IMethodSymbol method, IOperation? instance)> methodTargetsOptBuilder, 3317IOperation operation, 3318PooledHashSet<(IMethodSymbol method, IOperation? instance)> methodTargetsOptBuilder, 3323IOperation? operation, 3325PooledHashSet<(IMethodSymbol method, IOperation? instance)> methodTargetsOptBuilder, 3331IOperation? instance; 3379void AddMethodTarget(IMethodSymbol method, IOperation? instance) 3393bool HandleCreationOpt(IOperation? creation) 3438out ImmutableHashSet<(IMethodSymbol method, IOperation? instance)>? resolvedMethodTargets) 3442using var _1 = PooledHashSet<(IMethodSymbol method, IOperation? instance)>.GetInstance(out var methodTargetsOptBuilder); 3535IOperation? visitedInstance, 3538IOperation originalOperation, 3566private ImmutableStack<IOperation>? GetInterproceduralCallStackForOwningSymbol(ISymbol forOwningSymbol) 3579IOperation originalOperation, 3597IOperation originalOperation, 3637public virtual void HandleEnterLockOperation(IOperation lockedObject) 3669foreach (var element in operation.Elements) 3687var assignedValueOperation = operation.Elements[i]; 3695foreach (var element in operation.Elements)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralAnalysisConfiguration.cs (1)
95IOperation operation,
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\InterproceduralAnalysisData.cs (8)
36ImmutableStack<IOperation> callStack, 38Func<IOperation, TAbstractAnalysisValue> getCachedAbstractValueFromCaller, 40Func<IOperation, AnalysisEntity?> getAnalysisEntityForFlowCapture, 41Func<ISymbol, ImmutableStack<IOperation>?> getInterproceduralCallStackForOwningSymbol) 63public ImmutableStack<IOperation> CallStack { get; } 65public Func<IOperation, TAbstractAnalysisValue> GetCachedAbstractValueFromCaller { get; } 67public Func<IOperation, AnalysisEntity?> GetAnalysisEntityForFlowCapture { get; } 68public Func<ISymbol, ImmutableStack<IOperation>?> GetInterproceduralCallStackForOwningSymbol { get; }
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\PredicateAnalysisEntityDataFlowOperationVisitor.cs (1)
54protected override void SetPredicateValueKind(IOperation operation, TAnalysisData analysisData, PredicateValueKind predicateValueKind)
src\RoslynAnalyzers\Utilities\FlowAnalysis\FlowAnalysis\Framework\DataFlow\ThrownExceptionInfo.cs (6)
20ImmutableStack<IOperation>? interproceduralCallStack, 27InterproceduralCallStack = interproceduralCallStack ?? ImmutableStack<IOperation>.Empty; 31internal static ThrownExceptionInfo Create(BasicBlock block, INamedTypeSymbol exceptionType, ImmutableStack<IOperation>? interproceduralCallStack) 36internal static ThrownExceptionInfo CreateDefaultInfoForExceptionsPathAnalysis(BasicBlock block, WellKnownTypeProvider wellKnownTypeProvider, ImmutableStack<IOperation>? interproceduralCallStack) 69internal ThrownExceptionInfo With(BasicBlock block, ImmutableStack<IOperation>? interproceduralCallStack) 91internal ImmutableStack<IOperation> InterproceduralCallStack { get; }
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Microsoft.CodeAnalysis.BannedApiAnalyzers (214)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
Microsoft.CodeAnalysis.CodeStyle (253)
src\Analyzers\Core\Analyzers\ConvertTypeofToNameof\AbstractConvertTypeOfToNameOfDiagnosticAnalyzer.cs (1)
46private static bool IsValidOperation(IOperation operation)
src\Analyzers\Core\Analyzers\Helpers\HashCodeAnalyzer\HashCodeAnalyzer.cs (10)
50public (bool accessesBase, ImmutableArray<ISymbol> members, ImmutableArray<IOperation> statements) GetHashedMembers(ISymbol? owningSymbol, IOperation? operation) 82IMethodSymbol method, ImmutableArray<IOperation> statements) 105IMethodSymbol method, ImmutableArray<IOperation> statements) 134var initializerValue = declaration.Initializer?.Value ?? declarator.Initializer?.Value; 178var statement = statements[i]; 204private static bool IsLocalReference(IOperation value, ILocalSymbol accumulatorVariable) 210private static bool IsLiteralNumber(IOperation value) 218private static IOperation Unwrap(IOperation value)
src\Analyzers\Core\Analyzers\Helpers\HashCodeAnalyzer\HashCodeAnalyzer.OperationDeconstructor.cs (4)
17/// Breaks down complex <see cref="IOperation"/> trees, looking for particular 45public bool TryAddHashedSymbol(IOperation value, bool seenHash) 152foreach (var element in tupleOperation.Elements) 168private static bool TryGetFieldOrProperty(IOperation operation, [NotNullWhen(true)] out ISymbol? symbol)
src\Analyzers\Core\Analyzers\MakeFieldReadonly\AbstractMakeFieldReadonlyDiagnosticAnalyzer.cs (1)
237private static bool IsWrittenTo(IOperation? operation, ISymbol owningSymbol)
src\Analyzers\Core\Analyzers\PopulateSwitch\AbstractPopulateSwitchDiagnosticAnalyzer.cs (3)
20where TSwitchOperation : IOperation 29protected abstract IOperation GetValueOfSwitchOperation(TSwitchOperation operation); 57var value = GetValueOfSwitchOperation(switchOperation);
src\Analyzers\Core\Analyzers\PopulateSwitch\AbstractPopulateSwitchExpressionDiagnosticAnalyzer.cs (1)
22protected override IOperation GetValueOfSwitchOperation(ISwitchExpressionOperation operation)
src\Analyzers\Core\Analyzers\PopulateSwitch\AbstractPopulateSwitchStatementDiagnosticAnalyzer.cs (1)
22protected override IOperation GetValueOfSwitchOperation(ISwitchOperation operation)
src\Analyzers\Core\Analyzers\PopulateSwitch\PopulateSwitchExpressionHelpers.cs (2)
18var switchExpression = operation.Value; 76private static void RemoveIfConstantPatternHasValue(IOperation operation, Dictionary<long, ISymbol> enumMembers)
src\Analyzers\Core\Analyzers\PopulateSwitch\PopulateSwitchStatementHelpers.cs (2)
57var switchExpression = switchStatement.Value; 118var value = ((ISingleValueCaseClauseOperation)clause).Value;
src\Analyzers\Core\Analyzers\QualifyMemberAccess\AbstractQualifyMemberAccessDiagnosticAnalyzer.cs (4)
49protected abstract Location GetLocation(IOperation operation); 74private void AnalyzeOperation(OperationAnalysisContext context, IOperation operation, IOperation? instanceOperation) 135private static bool IsStaticMemberOrIsLocalFunction(IOperation operation)
src\Analyzers\Core\Analyzers\RemoveRedundantEquality\AbstractRemoveRedundantEqualityDiagnosticAnalyzer.cs (3)
80IOperation leftOperand, 81IOperation rightOperand, 119static bool? TryGetLiteralValue(IOperation? operand)
src\Analyzers\Core\Analyzers\RemoveUnnecessarySuppressions\AbstractRemoveUnnecessaryAttributeSuppressionsDiagnosticAnalyzer.cs (1)
87out var targetSymbolString, out var targetValueOperation, out var resolvedSymbols))
src\Analyzers\Core\Analyzers\RemoveUnnecessarySuppressions\SuppressMessageAttributeState.cs (9)
46out ImmutableArray<(string name, IOperation value)> namedAttributeArguments) 48var operation = (model.GetOperation(attributeSyntax, cancellationToken) as IAttributeOperation)?.Operation; 55using var _ = ArrayBuilder<(string name, IOperation value)>.GetInstance(out var builder); 56foreach (var initializer in initializerOperation.Initializers) 70public static bool HasValidScope(ImmutableArray<(string name, IOperation value)> namedAttributeArguments, out TargetScope targetScope) 88ImmutableArray<(string name, IOperation value)> namedAttributeArguments, 92out IOperation? targetValueOperation, 128ImmutableArray<(string name, IOperation value)> namedAttributeArguments, 131[NotNullWhen(returnValue: true)] out IOperation? argumentValueOperation)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (5)
258var operation = context.Operation; 363var operation = operationContext.Operation; 455var value = parameterInitializer.Value; 535var operation = operationContext.Operation; 572var nameofArgument = ((INameOfOperation)operationContext.Operation).Argument;
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs (2)
108protected abstract Location GetDefinitionLocationToFade(IOperation unusedDefinition); 122protected virtual bool ShouldBailOutFromRemovableAssignmentAnalysis(IOperation unusedSymbolWriteOperation)
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (17)
32/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not. 45/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not. 51/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not. 98var firstBlock = context.OperationBlocks[0]; 138foreach (var operationBlock in context.OperationBlocks) 149foreach (var operationBlock in context.OperationBlocks) 170var value = expressionStatement.Operation; 253/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>. 257private static bool IsHandledDelegateCreationOrAnonymousFunctionTreeShape(IOperation operation) 301/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>. 306private static bool IsHandledLocalOrParameterReferenceTreeShape(IOperation operation) 366private bool ShouldAnalyze(IOperation operationBlock, ISymbol owningSymbol, ref bool hasUnknownOperationNoneDescendant) 377foreach (var operation in operationBlock.Descendants()) 490foreach (var operationBlock in context.OperationBlocks) 590IOperation unreadWriteOperation, 633bool IsRemovableAssignmentWithoutSideEffects(IOperation unusedSymbolWriteOperation) 657static bool IsRemovableAssignmentValueWithoutSideEffects(IOperation assignmentValue)
src\Analyzers\Core\Analyzers\SimplifyInterpolation\AbstractSimplifyInterpolationHelpers.cs (17)
29protected abstract SyntaxNode GetPreservedInterpolationExpressionSyntax(IOperation operation); 82var expression = Unwrap(interpolation.Expression); 97private static IOperation? Unwrap(IOperation? expression, bool towardsParent = false) 121IOperation expression, 125out IOperation unwrapped, 132HasNonImplicitInstance(invocation, out var instance) && 210private static bool IsInvariantCultureReference(IOperation operation) 229private static bool IsInsideFormattableStringInvariant(IOperation operation) 250private static IEnumerable<IOperation> AncestorsAndSelf(IOperation operation) 252for (var current = operation; current is not null; current = current.Parent) 265IOperation expression, 266out IOperation unwrapped, 272HasNonImplicitInstance(invocation, out var instance)) 283var alignmentOp = invocation.Arguments[0].Value; 310private static bool HasNonImplicitInstance(IInvocationOperation invocation, [NotNullWhen(true)] out IOperation? instance)
src\Analyzers\Core\Analyzers\UseAutoProperty\AbstractUseAutoPropertyAnalyzer.cs (1)
518var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForAssignment\AbstractUseConditionalExpressionForAssignmentDiagnosticAnalyzer.cs (2)
29out var isRef, out var trueStatement, out var falseStatement, out var trueAssignment, out var falseAssignment))
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForAssignment\UseConditionalExpressionForAssignmentHelpers.cs (13)
23[NotNullWhen(true)] out IOperation trueStatement, 24[NotNullWhen(true)] out IOperation? falseStatement, 89foreach (var nullCheckedExpression in GetNullCheckedExpressions(ifOperation.Condition)) 115static bool ReferencesDeclaredVariableInAssignment(IOperation condition, IOperation? trueTarget, IOperation? falseTarget) 120foreach (var operation in condition.DescendantsAndSelf()) 141static bool ContainsLocalReference(HashSet<ILocalSymbol> declaredPatternSymbols, IOperation? target) 145foreach (var operation in target.DescendantsAndSelf()) 158static IEnumerable<IOperation> GetNullCheckedExpressions(IOperation operation) 160foreach (var current in operation.DescendantsAndSelf()) 194[NotNullWhen(true)] IOperation? statement,
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\AbstractUseConditionalExpressionForReturnDiagnosticAnalyzer.cs (3)
29out var isRef, out var trueStatement, out var falseStatement, out var trueReturn, out var falseReturn)) 49protected virtual bool IsStatementSupported(IOperation statement)
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\UseConditionalExpressionForReturnHelpers.cs (3)
20[NotNullWhen(true)] out IOperation? trueStatement, 21[NotNullWhen(true)] out IOperation? falseStatement, 135private static bool IsReturnExprOrThrow(IOperation? statement)
src\Analyzers\Core\Analyzers\UseConditionalExpression\UseConditionalExpressionHelpers.cs (7)
25IOperation whenTrue, IOperation whenFalse, CancellationToken cancellationToken) 72public static IOperation? UnwrapSingleStatementBlock(IOperation? statement) 117public static bool IsBooleanLiteral(IOperation trueValue, bool val) 120public static bool CanSimplify(IOperation trueValue, IOperation falseValue, bool isRef, out bool negate)
src\Analyzers\Core\Analyzers\UseSystemHashCode\UseSystemHashCodeDiagnosticAnalyzer.cs (1)
50var operation = context.OperationBlocks[0];
src\Analyzers\Core\Analyzers\UseThrowExpression\AbstractUseThrowExpressionDiagnosticAnalyzer.cs (4)
213var condition = ifStatement.Condition; 240IOperation operation, 262private static bool IsNull(IOperation operation) 273var containingOperation = semanticModel.GetOperation(throwStatement.GetRequiredParent(), cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Microsoft.CodeAnalysis.CodeStyle.Fixes (45)
src\Analyzers\Core\CodeFixes\PopulateSwitch\AbstractPopulateSwitchCodeFixProvider.cs (1)
27where TSwitchOperation : IOperation
src\Analyzers\Core\CodeFixes\UseConditionalExpression\AbstractUseConditionalExpressionCodeFixProvider.cs (7)
88IOperation trueStatement, IOperation falseStatement, 89IOperation trueValue, IOperation falseValue, 145protected virtual TExpressionSyntax WrapReturnExpressionIfNecessary(TExpressionSyntax returnExpression, IOperation returnOperation) 175SyntaxGenerator generator, IOperation statement, IOperation value)
src\Analyzers\Core\CodeFixes\UseConditionalExpression\ForAssignment\AbstractUseConditionalExpressionForAssignmentCodeFixProvider.cs (5)
71out var trueStatement, out var falseStatement, 239var unwrapped = variableInitializer.Value.UnwrapImplicitConversion(); 254private static bool ReferencesLocalVariable(IOperation operation, ILocalSymbol variable) 262foreach (var child in operation.ChildOperations)
src\Analyzers\Core\CodeFixes\UseConditionalExpression\ForReturn\AbstractUseConditionalExpressionForReturnCodeFixProvider.cs (2)
59out var trueStatement, out var falseStatement,
src\Analyzers\Core\CodeFixes\UseSystemHashCode\UseSystemHashCodeCodeFixProvider.cs (1)
55var operation = semanticModel.GetOperation(operationLocation, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
Microsoft.CodeAnalysis.CSharp (258)
Compilation\CSharpCompilation.cs (1)
2413internal override IConvertibleConversion ClassifyConvertibleConversion(IOperation source, ITypeSymbol? destination, out ConstantValue? constantValue)
Compilation\CSharpSemanticModel.cs (2)
478protected override IOperation GetOperationCore(SyntaxNode node, CancellationToken cancellationToken) 486internal virtual IOperation GetOperationWorker(CSharpSyntaxNode node, CancellationToken cancellationToken)
Compilation\MemberSemanticModel.cs (8)
34private readonly Dictionary<SyntaxNode, IOperation> _guardedIOperationNodeMap = new Dictionary<SyntaxNode, IOperation>(); 1195internal override IOperation? GetOperationWorker(CSharpSyntaxNode node, CancellationToken cancellationToken) 1205IOperation rootOperation = GetRootOperation(); 1217IOperation? guardedGetIOperation() 1220return _guardedIOperationNodeMap.TryGetValue(node, out var operation) ? operation : null; 1224private IOperation GetRootOperation() 1240IOperation operation = _operationFactory.Value.Create(highestBoundNode);
Compilation\SpeculativeSemanticModelWithMemberModel.cs (1)
455internal override IOperation? GetOperationWorker(CSharpSyntaxNode node, CancellationToken cancellationToken)
Compilation\SyntaxTreeSemanticModel.cs (1)
169internal override IOperation GetOperationWorker(CSharpSyntaxNode node, CancellationToken cancellationToken)
Operations\CSharpOperationFactory.cs (232)
27public IOperation? Create(BoundNode? boundNode) 318ImmutableArray<IOperation> children = GetIOperationChildren(boundNode); 344public ImmutableArray<TOperation> CreateFromArray<TBoundNode, TOperation>(ImmutableArray<TBoundNode> boundNodes) where TBoundNode : BoundNode where TOperation : class, IOperation 380internal ImmutableArray<IOperation> GetIOperationChildren(IBoundNodeWithIOperationChildren boundNodeWithChildren) 385return ImmutableArray<IOperation>.Empty; 388var builder = ArrayBuilder<IOperation>.GetInstance(children.Length); 396IOperation operation = Create(childNode); 437IOperation target = Create(boundDeconstructionAssignmentOperator.Left); 440IOperation value = Create(boundDeconstructionAssignmentOperator.Right.Operand); 447private IOperation CreateBoundCallOperation(BoundCall boundCall) 457ImmutableArray<IOperation> children = CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundCall).InvalidNodeChildren); 463IOperation? receiver = CreateReceiverOperation(boundCall.ReceiverOpt, targetMethod); 479private IOperation CreateBoundFunctionPointerInvocationOperation(BoundFunctionPointerInvocation boundFunctionPointerInvocation) 487ImmutableArray<IOperation> children = CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundFunctionPointerInvocation).InvalidNodeChildren); 491var pointer = Create(boundFunctionPointerInvocation.InvokedExpression); 496private IOperation CreateBoundUnconvertedAddressOfOperatorOperation(BoundUnconvertedAddressOfOperator boundUnconvertedAddressOf) 506private IOperation CreateBoundAttributeOperation(BoundAttribute boundAttribute) 518var namedArguments = CreateFromArray<BoundAssignmentOperator, IOperation>(boundAttribute.NamedArguments); 527internal ImmutableArray<IOperation> CreateIgnoredDimensions(BoundNode declaration) 535return CreateFromArray<BoundExpression, IOperation>(declaredTypeOpt.BoundDimensionsOpt); 552return CreateFromArray<BoundExpression, IOperation>(dimensions); 559internal IOperation CreateBoundLocalOperation(BoundLocal boundLocal, bool createDeclaration = true) 572IOperation localReference = CreateBoundLocalOperation(boundLocal, createDeclaration: false); 579internal IOperation CreateBoundFieldAccessOperation(BoundFieldAccess boundFieldAccess, bool createDeclaration = true) 593IOperation fieldAccess = CreateBoundFieldAccessOperation(boundFieldAccess, createDeclaration: false); 598IOperation? instance = CreateReceiverOperation(boundFieldAccess.ReceiverOpt, boundFieldAccess.FieldSymbol); 602internal IOperation? CreateBoundPropertyReferenceInstance(BoundNode boundNode) 621IOperation? instance = CreateReceiverOperation(boundPropertyAccess.ReceiverOpt, boundPropertyAccess.PropertySymbol); 631private IOperation CreateBoundIndexerAccessOperation(BoundIndexerAccess boundIndexerAccess) 640var children = CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundIndexerAccess).InvalidNodeChildren); 645IOperation? instance = CreateReceiverOperation(boundIndexerAccess.ReceiverOpt, boundIndexerAccess.ExpressionSymbol); 653IOperation? instance = CreateReceiverOperation(boundEventAccess.ReceiverOpt, boundEventAccess.EventSymbol); 663IOperation eventReference = CreateBoundEventAccessOperation(boundEventAssignmentOperator); 664IOperation handlerValue = Create(boundEventAssignmentOperator.Argument); 704ImmutableArray<IOperation> initializers = GetAnonymousObjectCreationInitializers(boundAnonymousObjectCreationExpression.Arguments, boundAnonymousObjectCreationExpression.Declarations, syntax, type, isImplicit); 711private IOperation CreateBoundObjectCreationExpressionOperation(BoundObjectCreationExpression boundObjectCreationExpression) 720var children = CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundObjectCreationExpression).InvalidNodeChildren); 728ImmutableArray<IOperation> initializers = GetAnonymousObjectCreationInitializers( 751private IOperation CreateBoundWithExpressionOperation(BoundWithExpression boundWithExpression) 753IOperation operand = Create(boundWithExpression.Receiver); 765ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicObjectCreationExpression.Arguments); 774internal IOperation CreateBoundDynamicInvocationExpressionReceiver(BoundNode receiver) 793IOperation operation = CreateBoundDynamicInvocationExpressionReceiver(boundDynamicInvocation.Expression); 794ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundDynamicInvocation.Arguments); 803internal IOperation CreateBoundDynamicIndexerAccessExpressionReceiver(BoundExpression indexer) 818internal ImmutableArray<IOperation> CreateBoundDynamicIndexerAccessArguments(BoundExpression indexer) 823return CreateFromArray<BoundExpression, IOperation>(boundDynamicAccess.Arguments); 827return CreateFromArray<BoundExpression, IOperation>(boundObjectInitializerMember.Arguments); 836IOperation operation = CreateBoundDynamicIndexerAccessExpressionReceiver(boundDynamicIndexerAccess); 837ImmutableArray<IOperation> arguments = CreateBoundDynamicIndexerAccessArguments(boundDynamicIndexerAccess); 848ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundObjectInitializerExpression)); 857ImmutableArray<IOperation> initializers = CreateFromArray<BoundExpression, IOperation>(BoundObjectCreationExpression.GetChildInitializers(boundCollectionInitializerExpression)); 864private IOperation CreateBoundObjectInitializerMemberOperation(BoundObjectInitializerMember boundObjectInitializerMember, bool isObjectOrCollectionInitializer = false) 875IOperation operation = CreateBoundDynamicIndexerAccessExpressionReceiver(boundObjectInitializerMember); 876ImmutableArray<IOperation> arguments = CreateBoundDynamicIndexerAccessArguments(boundObjectInitializerMember); 904var children = CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundObjectInitializerMember).InvalidNodeChildren); 920IOperation? createReceiver() => memberSymbol?.IsStatic == true ? 925private IOperation CreateBoundDynamicObjectInitializerMemberOperation(BoundDynamicObjectInitializerMember boundDynamicObjectInitializerMember) 927IOperation instanceReceiver = CreateImplicitReceiver(boundDynamicObjectInitializerMember.Syntax, boundDynamicObjectInitializerMember.ReceiverType); 938private IOperation CreateBoundCollectionElementInitializerOperation(BoundCollectionElementInitializer boundCollectionElementInitializer) 941IOperation? receiver = CreateReceiverOperation(boundCollectionElementInitializer.ImplicitReceiverOpt, addMethod); 950var children = CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundCollectionElementInitializer).InvalidNodeChildren); 985IOperation? instance = Create(receiver); 991IOperation operation = CreateBoundDynamicInvocationExpressionReceiver(boundCollectionElementInitializer.Expression); 992ImmutableArray<IOperation> arguments = CreateFromArray<BoundExpression, IOperation>(boundCollectionElementInitializer.Arguments); 999private IOperation CreateUnboundLambdaOperation(UnboundLambda unboundLambda) 1030private IOperation CreateBoundConversionOperation(BoundConversion boundConversion, bool forceOperandImplicitLiteral = false) 1060IOperation target = CreateDelegateTargetOperation(boundConversion); 1138IOperation target = CreateDelegateTargetOperation(correctedConversionNode); 1146IOperation operand = forceOperandImplicitLiteral 1156IOperation operand = Create(boundAsOperator.Operand); 1168IOperation target = CreateDelegateTargetOperation(boundDelegateCreationExpression); 1179IOperation? instance = CreateReceiverOperation(boundMethodGroup.ReceiverOpt, methodSymbol); 1188IOperation value = Create(boundIsOperator.Operand); 1221ImmutableArray<IOperation> dimensionSizes = CreateFromArray<BoundExpression, IOperation>(boundArrayCreation.Bounds); 1232ImmutableArray<IOperation> elementValues = CreateFromArray<BoundExpression, IOperation>(boundArrayInitialization.Initializers); 1268static ImmutableArray<IOperation> getConstructArguments( 1281? @this.CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)objectCreation).InvalidNodeChildren) 1282: ImmutableArray<IOperation>.CastUp(@this.DeriveArguments(collectionCreation)); 1290? @this.CreateFromArray<BoundNode, IOperation>(((IBoundInvalidNode)boundCall).InvalidNodeChildren) 1291: ImmutableArray<IOperation>.CastUp(@this.DeriveArguments(collectionCreation)); 1298return @this.CreateFromArray<BoundExpression, IOperation>(boundBad.ChildBoundNodes); 1308private IOperation CreateBoundCollectionExpressionElement(BoundCollectionExpression expr, BoundNode element) 1320var collection = Create(element.Expression); 1369private IOperation CreateBoundAssignmentOperatorOrMemberInitializerOperation(BoundAssignmentOperator boundAssignmentOperator) 1372(IOperation)CreateBoundMemberInitializerOperation(boundAssignmentOperator) : 1384IOperation target = Create(boundAssignmentOperator.Left); 1385IOperation value = Create(boundAssignmentOperator.Right); 1397IOperation initializedMember = CreateMemberInitializerInitializedMember(boundAssignmentOperator.Left); 1407IOperation target = Create(boundCompoundAssignmentOperator.Left); 1408IOperation value = Create(boundCompoundAssignmentOperator.Right); 1441IOperation target = Create(boundIncrementOperator.Operand); 1459var children = CreateFromArray<BoundExpression, IOperation>(boundBadExpression.ChildBoundNodes); 1484IOperation operand = Create(boundUnaryOperator.Operand); 1496private IOperation CreateBoundBinaryOperatorBase(BoundBinaryOperatorBase boundBinaryOperatorBase) 1515IOperation? left = null; 1520IOperation right = Create(currentBinary.Right); 1533IBinaryOperation createBoundUserDefinedConditionalLogicalOperator(BoundUserDefinedConditionalLogicalOperator boundBinaryOperator, IOperation left, IOperation right) 1557private IBinaryOperation CreateBoundBinaryOperatorOperation(BoundBinaryOperator boundBinaryOperator, IOperation left, IOperation right) 1577private IOperation CreateBoundInterpolatedStringBinaryOperator(BoundBinaryOperator boundBinaryOperator) 1580Func<BoundInterpolatedString, int, (CSharpOperationFactory, InterpolatedStringHandlerData), IOperation> createInterpolatedString 1583Func<BoundBinaryOperator, IOperation, IOperation, (CSharpOperationFactory, InterpolatedStringHandlerData), IOperation> createBinaryOperator 1596IOperation left, 1597IOperation right, 1604IOperation left = Create(boundTupleBinaryOperator.Left); 1605IOperation right = Create(boundTupleBinaryOperator.Right); 1615IOperation condition = Create(boundConditionalOperator.Condition); 1616IOperation whenTrue = Create(boundConditionalOperator.Consequence); 1617IOperation whenFalse = Create(boundConditionalOperator.Alternative); 1628IOperation value = Create(boundNullCoalescingOperator.LeftOperand); 1629IOperation whenNull = Create(boundNullCoalescingOperator.RightOperand); 1645private IOperation CreateBoundNullCoalescingAssignmentOperatorOperation(BoundNullCoalescingAssignmentOperator boundNode) 1647IOperation target = Create(boundNode.LeftOperand); 1648IOperation value = Create(boundNode.RightOperand); 1658IOperation awaitedValue = Create(boundAwaitExpression.Expression); 1667IOperation arrayReference = Create(boundArrayAccess.Expression); 1668ImmutableArray<IOperation> indices = CreateFromArray<BoundExpression, IOperation>(boundArrayAccess.Indices); 1676private IOperation CreateBoundImplicitIndexerAccessOperation(BoundImplicitIndexerAccess boundIndexerAccess) 1678IOperation instance = Create(boundIndexerAccess.Receiver); 1679IOperation argument = Create(boundIndexerAccess.Argument); 1700IOperation arrayReference = Create(boundInlineArrayAccess.Expression); 1701IOperation argument = Create(boundInlineArrayAccess.Argument); 1711IOperation argument = Create(boundNameOfOperator.Argument); 1721IOperation expression = Create(boundThrowExpression.Expression); 1730IOperation reference = Create(boundAddressOfOperator.Operand); 1748IOperation operation = Create(boundConditionalAccess.Receiver); 1749IOperation whenNotNull = Create(boundConditionalAccess.AccessExpression); 1768IOperation value = Create(boundFieldEqualsValue.Value); 1777IOperation value = Create(boundPropertyEqualsValue.Value); 1786IOperation value = Create(boundParameterEqualsValue.Value); 1794ImmutableArray<IOperation> operations = CreateFromArray<BoundStatement, IOperation>(boundBlock.Statements); 1821IOperation? returnedValue = null; 1847IOperation? whenFalse; 1869IOperation condition = Create(boundIfStatement.Condition); 1870IOperation whenTrue = Create(boundIfStatement.Consequence); 1887IOperation condition = Create(boundWhileStatement.Condition); 1888IOperation body = Create(boundWhileStatement.Body); 1901IOperation condition = Create(boundDoStatement.Condition); 1902IOperation body = Create(boundDoStatement.Body); 1915ImmutableArray<IOperation> before = CreateFromArray<BoundStatement, IOperation>(ToStatements(boundForStatement.Initializer)); 1916IOperation? condition = Create(boundForStatement.Condition); 1917ImmutableArray<IOperation> atLoopBottom = CreateFromArray<BoundStatement, IOperation>(ToStatements(boundForStatement.Increment)); 1918IOperation body = Create(boundForStatement.Body); 1994internal IOperation CreateBoundForEachStatementLoopControlVariable(BoundForEachStatement boundForEachStatement) 2010return new VariableDeclaratorOperation(local.GetPublicSymbol(), initializer: null, ignoredArguments: ImmutableArray<IOperation>.Empty, semanticModel: _semanticModel, syntax: declaratorSyntax, isImplicit: false); 2016IOperation loopControlVariable = CreateBoundForEachStatementLoopControlVariable(boundForEachStatement); 2018IOperation collection = Create(boundForEachStatement.EnumeratorInfoOpt?.InlineArraySpanType is null or WellKnownType.Unknown || 2022var nextVariables = ImmutableArray<IOperation>.Empty; 2023IOperation body = Create(boundForEachStatement.Body); 2048IOperation? exceptionDeclarationOrExpression = CreateVariableDeclarator((BoundLocal?)boundCatchBlock.ExceptionSourceOpt); 2051IOperation? filter = Create(boundCatchBlock.ExceptionFilterOpt); 2063IOperation body = Create(boundFixedStatement.Body); 2074IOperation resources = Create(boundUsingStatement.DeclarationsOpt ?? (BoundNode)boundUsingStatement.ExpressionOpt!); 2075IOperation body = Create(boundUsingStatement.Body); 2090IOperation? thrownObject = Create(boundThrowStatement.ExpressionOpt); 2099IOperation? returnedValue = Create(boundReturnStatement.ExpressionOpt); 2107IOperation returnedValue = Create(boundYieldReturnStatement.Expression); 2122IOperation lockedValue = Create(boundLockStatement.Argument); 2123IOperation body = Create(boundLockStatement.Body); 2136var children = CreateFromArray<BoundNode, IOperation>(boundBadStatement.ChildBoundNodes); 2140private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration boundLocalDeclaration) 2183ImmutableArray<IOperation> ignoredDimensions = CreateIgnoredDimensions(boundLocalDeclaration); 2191private IOperation CreateBoundMultipleLocalDeclarationsBaseOperation(BoundMultipleLocalDeclarationsBase boundMultipleLocalDeclarations) 2203ImmutableArray<IOperation> ignoredDimensions = CreateIgnoredDimensions(boundMultipleLocalDeclarations); 2241IOperation labeledStatement = Create(boundLabeledStatement.Body); 2257IOperation expression = Create(boundExpressionStatement.Expression); 2267internal IOperation CreateBoundTupleOperation(BoundTupleExpression boundTupleExpression, bool createDeclaration = true) 2278var tupleOperation = CreateBoundTupleOperation(boundTupleExpression, createDeclaration: false); 2291ImmutableArray<IOperation> elements = CreateFromArray<BoundExpression, IOperation>(boundTupleExpression.Arguments); 2393IOperation valueOperation = value switch 2406IOperation valueOperation = Create(value); 2407IOperation? alignmentOperation = Create(alignment); 2408IOperation? formatOperation = Create(format); 2442IOperation expression = Create(boundStringInsert.Value); 2443IOperation? alignment = Create(boundStringInsert.Alignment); 2444IOperation? formatString = Create(boundStringInsert.Format); 2452IOperation text = CreateBoundLiteralOperation(boundNode, @implicit: true); 2463var construction = Create(interpolationData.Construction); 2464var content = createContent(conversion.Operand); 2476IOperation createContent(BoundExpression current) 2481var left = createContent(binaryOperator.Left); 2482var right = createContent(binaryOperator.Right); 2522private IOperation CreateBoundInterpolatedStringArgumentPlaceholder(BoundInterpolatedStringArgumentPlaceholder placeholder) 2530return new InvalidOperation(ImmutableArray<IOperation>.Empty, _semanticModel, syntax, type, placeholder.ConstantValueOpt, isImplicit); 2546private IOperation CreateBoundInterpolatedStringHandlerPlaceholder(BoundInterpolatedStringHandlerPlaceholder placeholder) 2558IOperation value = Create(boundConstantPattern.Value); 2566private IOperation CreateBoundRelationalPatternOperation(BoundRelationalPattern boundRelationalPattern) 2569IOperation value = Create(boundRelationalPattern.Value); 2635private IOperation CreateBoundTypePatternOperation(BoundTypePattern boundTypePattern) 2646private IOperation CreateBoundSlicePatternOperation(BoundSlicePattern boundNode) 2659private IOperation CreateBoundListPatternOperation(BoundListPattern boundNode) 2673private IOperation CreateBoundNegatedPatternOperation(BoundNegatedPattern boundNegatedPattern) 2684private IOperation CreateBoundBinaryPatternOperation(BoundBinaryPattern boundBinaryPattern) 2727IOperation value = Create(boundSwitchStatement.Expression); 2739ImmutableArray<IOperation> body = CreateFromArray<BoundStatement, IOperation>(boundSwitchSection.Statements); 2747IOperation value = Create(boundSwitchExpression.Expression); 2774IOperation? guard = Create(boundSwitchExpressionArm.WhenClause); 2775IOperation value = Create(boundSwitchExpressionArm.Value); 2807IOperation? guard = Create(boundSwitchLabel.WhenClause); 2814IOperation value = Create(boundIsPatternExpression.Expression); 2822private IOperation CreateBoundQueryClauseOperation(BoundQueryClause boundQueryClause) 2830IOperation operation = Create(boundQueryClause.Value); 2837private IOperation CreateBoundRangeVariableOperation(BoundRangeVariable boundRangeVariable) 2843private IOperation CreateBoundDiscardExpressionOperation(BoundDiscardExpression boundNode) 2853private IOperation CreateFromEndIndexExpressionOperation(BoundFromEndIndexExpression boundIndex) 2869private IOperation CreateRangeExpressionOperation(BoundRangeExpression boundRange) 2871IOperation? left = Create(boundRange.LeftOperandOpt); 2872IOperation? right = Create(boundRange.RightOperandOpt); 2883private IOperation CreateBoundDiscardPatternOperation(BoundDiscardPattern boundNode) 2902var reference = OperationFactory.CreateInvalidOperation(_semanticModel, subpatternSyntax, ImmutableArray<IOperation>.Empty, isImplicit: true); 2936IOperation reference; 2956reference = OperationFactory.CreateInvalidOperation(_semanticModel, nameSyntax, ImmutableArray<IOperation>.Empty, isImplicit: false); 2964IOperation? createReceiver()
Operations\CSharpOperationFactory_Methods.cs (13)
39IOperation value = Create(expression is BoundConversion { IsParamsArrayOrCollection: true } conversion ? conversion.Operand : expression); 74IOperation value = Create(boundLocalDeclaration.InitializerOpt); 87ImmutableArray<IOperation> ignoredDimensions = CreateFromArray<BoundExpression, IOperation>(boundLocalDeclaration.ArgumentsOpt); 95return boundLocal == null ? null : new VariableDeclaratorOperation(boundLocal.LocalSymbol.GetPublicSymbol(), initializer: null, ignoredArguments: ImmutableArray<IOperation>.Empty, semanticModel: _semanticModel, syntax: boundLocal.Syntax, isImplicit: false); 98internal IOperation? CreateReceiverOperation(BoundNode? instance, Symbol? symbol) 133IOperation? instance = CreateReceiverOperation(boundEventAssignmentOperator.ReceiverOpt, boundEventAssignmentOperator.Event); 141internal IOperation CreateDelegateTargetOperation(BoundNode delegateNode) 180internal IOperation CreateMemberInitializerInitializedMember(BoundNode initializedMember) 407internal ImmutableArray<IOperation> GetAnonymousObjectCreationInitializers( 417var builder = ArrayBuilder<IOperation>.GetInstance(arguments.Length); 421IOperation value = Create(arguments[i]); 423IOperation target;
Microsoft.CodeAnalysis.CSharp.CodeStyle (69)
src\Analyzers\CSharp\Analyzers\HiddenExplicitCast\CSharpHiddenExplicitCastDiagnosticAnalyzer.cs (2)
53var innerOperation = semanticModel.GetOperation(currentExpression, cancellationToken); 60for (var current = innerOperation.Parent;
src\Analyzers\CSharp\Analyzers\MakeStructMemberReadOnly\CSharpMakeStructMemberReadOnlyAnalyzer.cs (8)
144foreach (var blockOperation in context.OperationBlocks) 215IOperation blockOperation, 220foreach (var operation in blockOperation.DescendantsAndSelf()) 235static bool ReferencesThisInstance(IOperation operation, CancellationToken cancellationToken) 252private static bool IsPotentiallyValueType(IOperation? instance) 263IOperation instanceOperation, 281for (var operation = instanceOperation.Parent; operation != null; operation = operation.Parent) 378IOperation? instance,
src\Analyzers\CSharp\Analyzers\QualifyMemberAccess\CSharpQualifyMemberAccessDiagnosticAnalyzer.cs (1)
67protected override Location GetLocation(IOperation operation) => operation.Syntax.GetLocation();
src\Analyzers\CSharp\Analyzers\RemoveUnusedParametersAndValues\CSharpRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs (2)
59protected override bool ShouldBailOutFromRemovableAssignmentAnalysis(IOperation unusedSymbolWriteOperation) 81protected override Location GetDefinitionLocationToFade(IOperation unusedDefinition)
src\Analyzers\CSharp\Analyzers\SimplifyInterpolation\CSharpSimplifyInterpolationHelpers.cs (1)
19protected override SyntaxNode GetPreservedInterpolationExpressionSyntax(IOperation operation)
src\Analyzers\CSharp\Analyzers\UseCollectionExpression\UseCollectionExpressionHelpers.cs (1)
137var operation = semanticModel.GetOperation(topMostExpression, cancellationToken);
src\Analyzers\CSharp\Analyzers\UseConditionalExpression\CSharpUseConditionalExpressionForReturnDiagnosticAnalyzer.cs (2)
26protected override bool IsStatementSupported(IOperation statement) 34private static bool IsWrappedByCheckedOrUnsafe(IOperation statement)
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\CSharpUseIndexOperatorDiagnosticAnalyzer.cs (2)
159IOperation? instance, 161IOperation argumentValue,
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\CSharpUseRangeOperatorDiagnosticAnalyzer.cs (7)
77var operation = context.Operation; 125var startOperation = invocation.Arguments[0].Value; 167var startOperation = invocation.Arguments[0].Value; 168var lengthOperation = invocation.Arguments[1].Value; 243var startOperation = invocation.Arguments[0].Value; 282var startOperation = invocation.Arguments[0].Value; 331private static bool IsConstantInt32(IOperation operation, int? value = null)
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\CSharpUseRangeOperatorDiagnosticAnalyzer.Result.cs (4)
31IOperation op1, 32IOperation? op2) 43public readonly IOperation Op1 = op1; 48public readonly IOperation? Op2 = op2;
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\Helpers.cs (3)
44public static bool IsInstanceLengthCheck(IPropertySymbol lengthLikeProperty, IOperation instance, IOperation operation) 53public static bool IsSubtraction(IOperation operation, [NotNullWhen(true)] out IBinaryOperation? subtraction)
src\Analyzers\CSharp\Analyzers\UseIsNullCheck\CSharpUseNullCheckOverTypeCheckDiagnosticAnalyzer.cs (1)
86var operation = context.Operation;
src\Analyzers\CSharp\Analyzers\UsePatternCombinators\AnalyzedPattern.cs (12)
19public readonly IOperation Target; 21private AnalyzedPattern(IOperation target) 77private Type(TypeSyntax type, IOperation target) : base(target) 84internal sealed class Source(PatternSyntax patternSyntax, IOperation target) : AnalyzedPattern(target) 92internal sealed class Constant(ExpressionSyntax expression, IOperation target) : AnalyzedPattern(target) 100internal sealed class Relational(BinaryOperatorKind operatorKind, ExpressionSyntax value, IOperation target) : AnalyzedPattern(target) 116private Binary(AnalyzedPattern leftPattern, AnalyzedPattern rightPattern, bool isDisjunctive, SyntaxToken token, IOperation target) : base(target) 126var leftTarget = leftPattern.Target; 127var rightTarget = rightPattern.Target; 132var target = (leftConv, rightConv) switch 153var compareTarget = target == leftTarget ? rightTarget : leftTarget; 181private Not(AnalyzedPattern pattern, IOperation target) : base(target)
src\Analyzers\CSharp\Analyzers\UsePatternCombinators\CSharpUsePatternCombinatorsAnalyzer.cs (3)
15public static AnalyzedPattern? Analyze(IOperation operation) 39private static AnalyzedPattern? ParsePattern(IOperation operation) 158private static bool IsConstant(IOperation operation)
src\Analyzers\CSharp\Analyzers\UsePatternCombinators\CSharpUsePatternCombinatorsDiagnosticAnalyzer.cs (1)
72var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Analyzers\CSharp\Analyzers\UsePrimaryConstructor\CSharpUsePrimaryConstructorDiagnosticAnalyzer.cs (3)
502var rightOperation = semanticModel.GetOperation(assignmentExpression.Right.WalkDownSuppressions()); 506foreach (var operation in rightOperation.DescendantsAndSelf()) 549var instance = operation.Instance;
src\Analyzers\CSharp\Analyzers\UseSystemThreadingLock\CSharpUseSystemThreadingLockDiagnosticAnalyzer.cs (1)
244private static bool IsObjectCreationOperation(IOperation value)
src\Analyzers\CSharp\Analyzers\UseUtf8StringLiteral\UseUtf8StringLiteralDiagnosticAnalyzer.cs (4)
117private void ReportParameterArrayDiagnostic(OperationAnalysisContext context, SyntaxNode syntaxNode, ImmutableArray<IOperation> elements, NotificationOption2 notificationOption, ArrayCreationOperationLocation operationLocation) 149internal static bool TryConvertToUtf8String(StringBuilder? builder, ImmutableArray<IOperation> arrayCreationElements) 192private static bool TryGetNextRune(ImmutableArray<IOperation> arrayCreationElements, int startIndex, out Rune rune, out int bytesConsumed) 203var element = arrayCreationElements[startIndex + i];
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (11)
88var castExpressionOperation = semanticModel.GetOperation(cast.Expression, cancellationToken); 96var current = castExpressionOperation.Parent.Parent; 204var originalOperation = originalSemanticModel.GetOperation(castNode, cancellationToken); 263var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenExpression.WalkDownParentheses(), cancellationToken); 805var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenBitwiseNotExpression, cancellationToken); 958var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenConditionalOrSwitchExpression, cancellationToken); 1048var operation = semanticModel.GetOperation(parentBinary, cancellationToken); 1071private static bool ConvertedHasUserDefinedEquals(BinaryOperatorKind operatorKind, IOperation operation) 1110private static bool IsConstantNull(IOperation operation) 1245var operation = semanticModel.GetOperation(expression.WalkDownParentheses(), cancellationToken); 1540var operation = semanticModel.GetOperation(expression, cancellationToken);
Microsoft.CodeAnalysis.CSharp.CodeStyle.Fixes (58)
src\Analyzers\CSharp\CodeFixes\ConvertToRecord\ConvertToRecordEngine.cs (1)
509var operation = documentEditor.SemanticModel.GetRequiredOperation(objectCreationExpression, cancellationToken);
src\Analyzers\CSharp\CodeFixes\ConvertToRecord\ConvertToRecordHelpers.cs (44)
46Arguments: [IArgumentOperation { Value: IOperation arg }] 117Operations: [IReturnOperation { ReturnedValue: IOperation returnedValue }] 140Operand: IOperation operand 159LeftOperand: IOperation leftOperand, 160RightOperand: IOperation rightOperand, 380foreach (var assignment in initializer.Initializers) 385Value: IOperation { Syntax: ExpressionSyntax syntax } 421Func<IOperation, T?> captureAssignedSymbol) 433foreach (var operation in body.Operations) 439Target: IOperation assignee, 440Value: IOperation assignment 476private static bool IsSafeAssignment(IOperation operation) 507IEnumerable<IOperation>? statementsToCheck = null; 530if (bodyOps is [IReturnOperation { ReturnedValue: IOperation value }] && 567IOperation? operation, 606private static IParameterSymbol? GetParamFromArgument(IOperation operation) 609private static ISymbol? GetReferencedSymbolObject(IOperation reference) 625private static bool IsDotEqualsInvocation(IOperation operation) 631Instance: IOperation instance, 632Arguments: [IArgumentOperation { Value: IOperation arg }] 655IOperation operation, 699private static bool ReturnsFalseImmediately(IEnumerable<IOperation> operation) 724IOperation condition, 734(_, IUnaryOperation { OperatorKind: UnaryOperatorKind.Not, Operand: IOperation newCondition }) 783IOperation condition, 788IEnumerable<IOperation>? additionalConditions = null) 794(_, IUnaryOperation { OperatorKind: UnaryOperatorKind.Not, Operand: IOperation newCondition }) 805LeftOperand: IOperation leftOperation, 806RightOperand: IOperation rightOperation, 817LeftOperand: IOperation leftOperation, 818RightOperand: IOperation rightOperation, 879IEnumerable<IOperation> statementsToCheck, 895IReturnOperation { ReturnedValue: IOperation value } => TryAddEqualizedFieldsForCondition( 899Condition: IOperation condition, 900WhenTrue: IOperation whenTrue, 956ImmutableArray<IOperation> bodyOps, 961[NotNullWhen(true)] out IEnumerable<IOperation>? statementsToCheck) 969Condition: IOperation condition, 970WhenTrue: IOperation whenTrue, 1050IOperation whenTrue, 1051IOperation? whenFalse, 1052IEnumerable<IOperation> otherOps, 1054out IEnumerable<IOperation> remainingStatements) 1069: ImmutableArray<IOperation>.Empty))
src\Analyzers\CSharp\CodeFixes\MakeLocalFunctionStatic\MakeLocalFunctionStaticCodeFixHelper.cs (2)
150var localFunctionBodyOperation = semanticModel.GetOperation(localFunction.Body ?? (SyntaxNode)localFunction.ExpressionBody!.Expression, cancellationToken); 151foreach (var descendent in localFunctionBodyOperation.DescendantsAndSelf())
src\Analyzers\CSharp\CodeFixes\UseConditionalExpression\CSharpUseConditionalExpressionForReturnCodeFixProvider.cs (1)
52protected override ExpressionSyntax WrapReturnExpressionIfNecessary(ExpressionSyntax returnExpression, IOperation returnOperation)
src\Analyzers\CSharp\CodeFixes\UseIndexOrRangeOperator\CSharpUseRangeOperatorCodeFixProvider.cs (6)
139var instance = result.InvocationOperation.Instance; 194var startOperation = result.Op1; 195var endOperation = result.Op2; 269private static int GetInt32Value(IOperation operation) 277IPropertySymbol lengthLikeProperty, IOperation instance, ref IOperation rangeOperation)
src\Analyzers\CSharp\CodeFixes\UsePatternCombinators\CSharpUsePatternCombinatorsCodeFixProvider.cs (1)
79var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Analyzers\CSharp\CodeFixes\UseUtf8StringLiteral\UseUtf8StringLiteralCodeFixProvider.cs (2)
97var operation = semanticModel.GetRequiredOperation(node, cancellationToken); 125static IArrayCreationOperation FindArrayCreationOperationAncestor(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\InitializeParameter\CSharpInitializeParameterService.cs (1)
102foreach (var operation in blockOperation.Operations)
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (1)
CodeGen\CodeGenLocalFunctionTests.cs (1)
149var objectCreationOperation = model.GetOperation(creation);
Microsoft.CodeAnalysis.CSharp.Emit3.UnitTests (57)
Attributes\AttributeTests.cs (6)
714var operation = semanticModel.GetOperation(attrSyntax); 756var speculativeOperation = speculativeModel.GetOperation(newAttrSyntax); 821var speculativeOperation = speculativeModel.GetOperation(newAttrSyntax); 862var speculativeOperation = speculativeModel.GetOperation(newAttrSyntax); 903var speculativeOperation = speculativeModel.GetOperation(newAttrSyntax); 942var speculativeOperation = speculativeModel.GetOperation(newAttrSyntax);
Diagnostics\DiagnosticAnalyzerTests.cs (1)
2347private void ReportOperationDiagnostics(IOperation operation, string name, Action<Diagnostic> addDiagnostic)
Diagnostics\GetDiagnosticsTests.cs (1)
1113foreach (var operationBlock in blockEndContext.OperationBlocks)
FieldKeywordTests.cs (3)
12955foreach (var block in context.OperationBlocks) 12972public IOperation FieldReference = null; 12973public IOperation Invalid = null;
Semantics\CollectionExpressionTests.cs (20)
29115var operation = VerifyOperationTreeForTest<ReturnStatementSyntax>(comp, """ 29182var operation = VerifyOperationTreeForTest<ReturnStatementSyntax>(comp, """ 29442(IOperation operation, _) = GetOperationAndSyntaxForTest<SpreadElementSyntax>(comp); 29464(IOperation operation, _) = GetOperationAndSyntaxForTest<SpreadElementSyntax>(comp); 29485IOperation ISpreadOperation.Operand => throw null; 29491IOperation IOperation.Parent => throw null; 29493OperationKind IOperation.Kind => throw null; 29495SyntaxNode IOperation.Syntax => throw null; 29497ITypeSymbol IOperation.Type => throw null; 29499Optional<object> IOperation.ConstantValue => throw null; 29501IEnumerable<IOperation> IOperation.Children => throw null; 29503IOperation.OperationList IOperation.ChildOperations => throw null; 29505string IOperation.Language => ""; 29507bool IOperation.IsImplicit => throw null; 29509SemanticModel IOperation.SemanticModel => throw null; 29511void IOperation.Accept(OperationVisitor visitor) { } 29513TResult IOperation.Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument) where TResult : default => throw null;
Semantics\CollectionExpressionTests_WithElement_Constructor.cs (1)
393var operation = semanticModel.GetOperation(root.DescendantNodes().OfType<CollectionExpressionSyntax>().ToArray()[1]);
Semantics\CollectionExpressionTests_WithElement_Extra.cs (3)
1573var operation1 = semanticModel.GetOperation(arrowExpressions[0]); 1590var operation2 = semanticModel.GetOperation(arrowExpressions[1]); 1643var operation = semanticModel.GetOperation(root.DescendantNodes().OfType<BlockSyntax>().Single());
Semantics\ExtensionTests.cs (2)
21810var opRoot = model.GetOperation(compRoot); 21973var opRoot = model.GetOperation(compRoot);
Semantics\OutVarTests.cs (5)
3512var initializerOperation = model.GetOperation(initializer); 35986IOperation initializerOperation = model.GetOperation(initializerSyntax); 36009IOperation blockBodyOperation = model.GetOperation(blockBodySyntax); 36130IOperation expressionBodyOperation = model.GetOperation(expressionBodySyntax); 36155IOperation blockBodyOperation = model.GetOperation(blockBodySyntax);
Semantics\PatternMatchingTests.cs (2)
11440var operation = model.GetOperation(syntax); 11497var operation = model.GetOperation(syntax);
Semantics\PrimaryConstructorTests.cs (1)
1240var operation = model.GetOperation(baseWithargs);
Semantics\RecordTests.cs (1)
21269var operation = model.GetOperation(baseWithargs);
Symbols\UserDefinedCompoundAssignmentOperatorsTests.cs (11)
3145var iOp = model.GetOperation(opNode); 3693var iOp = model.GetOperation(opNode); 4227var iOp = model.GetOperation(opNode); 12060var iOp = model.GetOperation(opNode); 12436var iOp = model.GetOperation(opNode); 13024var iOp = model.GetOperation(opNode); 13329var iOp = model.GetOperation(opNode); 13895var iOp = model.GetOperation(opNode); 14308var iOp = model.GetOperation(opNode); 14993var iOp = model.GetOperation(opNode); 15343var iOp = model.GetOperation(opNode);
Microsoft.CodeAnalysis.CSharp.EndToEnd.UnitTests (3)
EndToEndTests.cs (3)
882var operation = model.GetOperation(isPattern); 956var operation = model.GetOperation(node1); 1024var operation = model.GetOperation(node1);
Microsoft.CodeAnalysis.CSharp.Features (130)
ConvertIfToSwitch\CSharpConvertIfToSwitchCodeRefactoringProvider.Analyzer.cs (1)
18public override bool HasUnreachableEndPoint(IOperation operation)
ConvertIfToSwitch\CSharpConvertIfToSwitchCodeRefactoringProvider.Rewriting.cs (2)
58private static ExpressionSyntax AsExpressionSyntax(IOperation operation) 122public override IEnumerable<SyntaxNode> AsSwitchSectionStatements(IOperation operation)
ConvertLinq\CSharpConvertLinqQueryToForEachProvider.cs (1)
907private static bool IsLocalOrParameterSymbol(IOperation operation)
Copilot\CSharpImplementNotImplementedExceptionDiagnosticAnalyzer.cs (5)
42foreach (var block in context.OperationBlocks) 45void AnalyzeBlock(IOperation block) 47foreach (var operation in block.DescendantsAndSelf()) 87private static bool ShouldReportAsTopLevel(IOperation block, IOperation operation)
ExtractMethod\CSharpMethodExtractor.CSharpCodeGenerator.cs (1)
1094var methodOperation = semanticModel.GetOperation(node, cancellationToken);
ImplementInterface\CSharpImplementExplicitlyCodeRefactoringProvider.cs (2)
104var operation = semanticModel.GetOperation(node, cancellationToken); 105var instance = operation switch
InitializeParameter\CSharpInitializeMemberFromPrimaryConstructorParameterCodeRefactoringProvider.cs (3)
269private static (IOperation? initializer, ISymbol? fieldOrProperty) TryFindFieldOrPropertyInitializerValue( 285var operation = semanticModel.GetOperation(propertyInitializer, cancellationToken); 295var operation = semanticModel.GetOperation(fieldInitializer, cancellationToken);
src\Analyzers\CSharp\Analyzers\HiddenExplicitCast\CSharpHiddenExplicitCastDiagnosticAnalyzer.cs (2)
53var innerOperation = semanticModel.GetOperation(currentExpression, cancellationToken); 60for (var current = innerOperation.Parent;
src\Analyzers\CSharp\Analyzers\MakeStructMemberReadOnly\CSharpMakeStructMemberReadOnlyAnalyzer.cs (8)
144foreach (var blockOperation in context.OperationBlocks) 215IOperation blockOperation, 220foreach (var operation in blockOperation.DescendantsAndSelf()) 235static bool ReferencesThisInstance(IOperation operation, CancellationToken cancellationToken) 252private static bool IsPotentiallyValueType(IOperation? instance) 263IOperation instanceOperation, 281for (var operation = instanceOperation.Parent; operation != null; operation = operation.Parent) 378IOperation? instance,
src\Analyzers\CSharp\Analyzers\QualifyMemberAccess\CSharpQualifyMemberAccessDiagnosticAnalyzer.cs (1)
67protected override Location GetLocation(IOperation operation) => operation.Syntax.GetLocation();
src\Analyzers\CSharp\Analyzers\RemoveUnusedParametersAndValues\CSharpRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs (2)
59protected override bool ShouldBailOutFromRemovableAssignmentAnalysis(IOperation unusedSymbolWriteOperation) 81protected override Location GetDefinitionLocationToFade(IOperation unusedDefinition)
src\Analyzers\CSharp\Analyzers\SimplifyInterpolation\CSharpSimplifyInterpolationHelpers.cs (1)
19protected override SyntaxNode GetPreservedInterpolationExpressionSyntax(IOperation operation)
src\Analyzers\CSharp\Analyzers\UseCollectionExpression\UseCollectionExpressionHelpers.cs (1)
137var operation = semanticModel.GetOperation(topMostExpression, cancellationToken);
src\Analyzers\CSharp\Analyzers\UseConditionalExpression\CSharpUseConditionalExpressionForReturnDiagnosticAnalyzer.cs (2)
26protected override bool IsStatementSupported(IOperation statement) 34private static bool IsWrappedByCheckedOrUnsafe(IOperation statement)
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\CSharpUseIndexOperatorDiagnosticAnalyzer.cs (2)
159IOperation? instance, 161IOperation argumentValue,
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\CSharpUseRangeOperatorDiagnosticAnalyzer.cs (7)
77var operation = context.Operation; 125var startOperation = invocation.Arguments[0].Value; 167var startOperation = invocation.Arguments[0].Value; 168var lengthOperation = invocation.Arguments[1].Value; 243var startOperation = invocation.Arguments[0].Value; 282var startOperation = invocation.Arguments[0].Value; 331private static bool IsConstantInt32(IOperation operation, int? value = null)
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\CSharpUseRangeOperatorDiagnosticAnalyzer.Result.cs (4)
31IOperation op1, 32IOperation? op2) 43public readonly IOperation Op1 = op1; 48public readonly IOperation? Op2 = op2;
src\Analyzers\CSharp\Analyzers\UseIndexOrRangeOperator\Helpers.cs (3)
44public static bool IsInstanceLengthCheck(IPropertySymbol lengthLikeProperty, IOperation instance, IOperation operation) 53public static bool IsSubtraction(IOperation operation, [NotNullWhen(true)] out IBinaryOperation? subtraction)
src\Analyzers\CSharp\Analyzers\UseIsNullCheck\CSharpUseNullCheckOverTypeCheckDiagnosticAnalyzer.cs (1)
86var operation = context.Operation;
src\Analyzers\CSharp\Analyzers\UsePatternCombinators\AnalyzedPattern.cs (12)
19public readonly IOperation Target; 21private AnalyzedPattern(IOperation target) 77private Type(TypeSyntax type, IOperation target) : base(target) 84internal sealed class Source(PatternSyntax patternSyntax, IOperation target) : AnalyzedPattern(target) 92internal sealed class Constant(ExpressionSyntax expression, IOperation target) : AnalyzedPattern(target) 100internal sealed class Relational(BinaryOperatorKind operatorKind, ExpressionSyntax value, IOperation target) : AnalyzedPattern(target) 116private Binary(AnalyzedPattern leftPattern, AnalyzedPattern rightPattern, bool isDisjunctive, SyntaxToken token, IOperation target) : base(target) 126var leftTarget = leftPattern.Target; 127var rightTarget = rightPattern.Target; 132var target = (leftConv, rightConv) switch 153var compareTarget = target == leftTarget ? rightTarget : leftTarget; 181private Not(AnalyzedPattern pattern, IOperation target) : base(target)
src\Analyzers\CSharp\Analyzers\UsePatternCombinators\CSharpUsePatternCombinatorsAnalyzer.cs (3)
15public static AnalyzedPattern? Analyze(IOperation operation) 39private static AnalyzedPattern? ParsePattern(IOperation operation) 158private static bool IsConstant(IOperation operation)
src\Analyzers\CSharp\Analyzers\UsePatternCombinators\CSharpUsePatternCombinatorsDiagnosticAnalyzer.cs (1)
72var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Analyzers\CSharp\Analyzers\UsePrimaryConstructor\CSharpUsePrimaryConstructorDiagnosticAnalyzer.cs (3)
502var rightOperation = semanticModel.GetOperation(assignmentExpression.Right.WalkDownSuppressions()); 506foreach (var operation in rightOperation.DescendantsAndSelf()) 549var instance = operation.Instance;
src\Analyzers\CSharp\Analyzers\UseSystemThreadingLock\CSharpUseSystemThreadingLockDiagnosticAnalyzer.cs (1)
244private static bool IsObjectCreationOperation(IOperation value)
src\Analyzers\CSharp\Analyzers\UseUtf8StringLiteral\UseUtf8StringLiteralDiagnosticAnalyzer.cs (4)
117private void ReportParameterArrayDiagnostic(OperationAnalysisContext context, SyntaxNode syntaxNode, ImmutableArray<IOperation> elements, NotificationOption2 notificationOption, ArrayCreationOperationLocation operationLocation) 149internal static bool TryConvertToUtf8String(StringBuilder? builder, ImmutableArray<IOperation> arrayCreationElements) 192private static bool TryGetNextRune(ImmutableArray<IOperation> arrayCreationElements, int startIndex, out Rune rune, out int bytesConsumed) 203var element = arrayCreationElements[startIndex + i];
src\Analyzers\CSharp\CodeFixes\ConvertToRecord\ConvertToRecordEngine.cs (1)
509var operation = documentEditor.SemanticModel.GetRequiredOperation(objectCreationExpression, cancellationToken);
src\Analyzers\CSharp\CodeFixes\ConvertToRecord\ConvertToRecordHelpers.cs (44)
46Arguments: [IArgumentOperation { Value: IOperation arg }] 117Operations: [IReturnOperation { ReturnedValue: IOperation returnedValue }] 140Operand: IOperation operand 159LeftOperand: IOperation leftOperand, 160RightOperand: IOperation rightOperand, 380foreach (var assignment in initializer.Initializers) 385Value: IOperation { Syntax: ExpressionSyntax syntax } 421Func<IOperation, T?> captureAssignedSymbol) 433foreach (var operation in body.Operations) 439Target: IOperation assignee, 440Value: IOperation assignment 476private static bool IsSafeAssignment(IOperation operation) 507IEnumerable<IOperation>? statementsToCheck = null; 530if (bodyOps is [IReturnOperation { ReturnedValue: IOperation value }] && 567IOperation? operation, 606private static IParameterSymbol? GetParamFromArgument(IOperation operation) 609private static ISymbol? GetReferencedSymbolObject(IOperation reference) 625private static bool IsDotEqualsInvocation(IOperation operation) 631Instance: IOperation instance, 632Arguments: [IArgumentOperation { Value: IOperation arg }] 655IOperation operation, 699private static bool ReturnsFalseImmediately(IEnumerable<IOperation> operation) 724IOperation condition, 734(_, IUnaryOperation { OperatorKind: UnaryOperatorKind.Not, Operand: IOperation newCondition }) 783IOperation condition, 788IEnumerable<IOperation>? additionalConditions = null) 794(_, IUnaryOperation { OperatorKind: UnaryOperatorKind.Not, Operand: IOperation newCondition }) 805LeftOperand: IOperation leftOperation, 806RightOperand: IOperation rightOperation, 817LeftOperand: IOperation leftOperation, 818RightOperand: IOperation rightOperation, 879IEnumerable<IOperation> statementsToCheck, 895IReturnOperation { ReturnedValue: IOperation value } => TryAddEqualizedFieldsForCondition( 899Condition: IOperation condition, 900WhenTrue: IOperation whenTrue, 956ImmutableArray<IOperation> bodyOps, 961[NotNullWhen(true)] out IEnumerable<IOperation>? statementsToCheck) 969Condition: IOperation condition, 970WhenTrue: IOperation whenTrue, 1050IOperation whenTrue, 1051IOperation? whenFalse, 1052IEnumerable<IOperation> otherOps, 1054out IEnumerable<IOperation> remainingStatements) 1069: ImmutableArray<IOperation>.Empty))
src\Analyzers\CSharp\CodeFixes\MakeLocalFunctionStatic\MakeLocalFunctionStaticCodeFixHelper.cs (2)
150var localFunctionBodyOperation = semanticModel.GetOperation(localFunction.Body ?? (SyntaxNode)localFunction.ExpressionBody!.Expression, cancellationToken); 151foreach (var descendent in localFunctionBodyOperation.DescendantsAndSelf())
src\Analyzers\CSharp\CodeFixes\UseConditionalExpression\CSharpUseConditionalExpressionForReturnCodeFixProvider.cs (1)
52protected override ExpressionSyntax WrapReturnExpressionIfNecessary(ExpressionSyntax returnExpression, IOperation returnOperation)
src\Analyzers\CSharp\CodeFixes\UseIndexOrRangeOperator\CSharpUseRangeOperatorCodeFixProvider.cs (6)
139var instance = result.InvocationOperation.Instance; 194var startOperation = result.Op1; 195var endOperation = result.Op2; 269private static int GetInt32Value(IOperation operation) 277IPropertySymbol lengthLikeProperty, IOperation instance, ref IOperation rangeOperation)
src\Analyzers\CSharp\CodeFixes\UsePatternCombinators\CSharpUsePatternCombinatorsCodeFixProvider.cs (1)
79var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Analyzers\CSharp\CodeFixes\UseUtf8StringLiteral\UseUtf8StringLiteralCodeFixProvider.cs (2)
97var operation = semanticModel.GetRequiredOperation(node, cancellationToken); 125static IArrayCreationOperation FindArrayCreationOperationAncestor(IOperation operation)
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (57)
IOperation\IOperationTests.cs (9)
465IOperation operation1 = model.GetOperation(assignments[0]); 471IOperation operation2 = model.GetOperation(assignments[1]); 477IOperation operation3 = model.GetOperation(assignments[2]); 511var operation = model.GetOperation(statement); 560var operation = model.GetOperation(expr); 591IOperation operation = model.GetOperation(literal); 626IOperation operation = speculativeModel.GetOperation(localDecl); 670var blockOperation = semanticModel.GetOperation(exceptionBlock); 676IOperation operation,
IOperation\IOperationTests_IAnonymousFunctionExpression.cs (2)
413var variableTreeLambdaOperation = ((IDelegateCreationOperation)variableDeclarationGroupOperation.Declarations.Single().Declarators.Single().Initializer.Value).Target; 421var variableTreeLambdaOperationSecondRequest = ((IDelegateCreationOperation)variableDeclarationGroupOperationSecondRequest.Declarations.Single().Declarators.Single().Initializer.Value).Target;
IOperation\IOperationTests_IArgument.cs (2)
4095var operation = VerifyOperationTreeForTest<StatementSyntax>(comp, expectedOperationTree); 4143public static void Verify(IOperation operation, Compilation compilation, SyntaxNode syntaxNode)
IOperation\IOperationTests_IBranchOperation.Extensions.cs (4)
373private (IOperation outer, IOperation corresponding) GetOuterOperationAndCorrespondingInnerOperation<TOuterSyntax, TInnerSyntax>(string source) 379var outer = GetOperationAndSyntaxForTest<TOuterSyntax>(compilation).operation; 381var correspondingOfInner = inner?.GetCorrespondingOperation();
IOperation\IOperationTests_ICollectionExpressionOperation.cs (9)
86var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 150var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 216var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 281var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 346var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 413var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 478var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 546var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!); 616var operation = semanticModel.GetOperation(comp.SyntaxTrees.Single().FindNodeOrTokenByKind(SyntaxKind.WithElement).AsNode()!);
IOperation\IOperationTests_ICompoundAssignmentOperation.cs (2)
45(IOperation operation, _) = GetOperationAndSyntaxForTest<AssignmentExpressionSyntax>(compilation); 81(IOperation operation, SyntaxNode node) = GetOperationAndSyntaxForTest<AssignmentExpressionSyntax>(compilation);
IOperation\IOperationTests_IConversionExpression.cs (22)
182var initializerOperation = ((IVariableDeclaratorOperation)operation).Initializer.Value; 380var initializer = ((IVariableDeclaratorOperation)operation).Initializer.Value; 5334public static IOperation IVariableDeclarationStatementSelector(IOperation operation) => 5337public static IOperation IVariableDeclarationSelector(IOperation operation) => 5340public static IOperation IVariableDeclaratorSelector(IOperation operation) => 5343public static IOperation IReturnDeclarationStatementSelector(IOperation operation) => 5346public static IOperation NestedConversionChildSelector(IOperation operation) => 5349private static IOperation ConversionOrDelegateChildSelector(IOperation operation) 5361public Func<IOperation, IConversionOperation> OperationSelector { get; set; } 5363public Func<IOperation, IOperation> ConversionChildSelector { get; set; } = ConversionOrDelegateChildSelector; 5377public void Verify(IOperation variableDeclaration, Compilation compilation, SyntaxNode syntaxNode) 5383var initializer = GetAndInvokeOperationSelector(variableDeclaration); 5385var conversion = initializer; 5412private IOperation GetAndInvokeOperationSelector(IOperation operation)
IOperation\IOperationTests_IFieldReferenceExpression.cs (1)
712var methodBlockOperation = model.GetOperation(methodDecl);
IOperation\IOperationTests_IVariableDeclaration.cs (6)
611(var operation, _) = GetOperationAndSyntaxForTest<VariableDeclaratorSyntax>(compilation); 633(var operation, _) = GetOperationAndSyntaxForTest<VariableDeclaratorSyntax>(compilation); 654(var operation, _) = GetOperationAndSyntaxForTest<VariableDeclaratorSyntax>(compilation); 675(var operation, _) = GetOperationAndSyntaxForTest<VariableDeclaratorSyntax>(compilation); 849(var operation, _) = GetOperationAndSyntaxForTest<VariableDeclarationSyntax>(compilation); 871(var operation, _) = GetOperationAndSyntaxForTest<VariableDeclarationSyntax>(compilation);
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (19)
Semantics\ConstantTests.cs (1)
3522var literalOperation = model.GetOperation(initializer);
Semantics\DelegateTypeTests.cs (1)
14828var value = ((IConversionOperation)operation.Initializer!.Value).Operand;
Semantics\OperatorTests.cs (3)
12474foreach (var initializerOp in fieldInitializerOperations) 12481void enumerateChildren(IOperation iop) 12485foreach (var child in iop.ChildOperations)
Semantics\RecordStructTests.cs (2)
7001var operation = model.GetOperation(with); 8884var operation = model.GetOperation(withExpr);
Semantics\StackAllocInitializerTests.cs (1)
2718var operation = model.GetOperation(tree.GetRoot());
Semantics\StructConstructorTests.cs (3)
1051var operation = model.GetOperation(syntax); 1146var operation = model.GetOperation(syntax); 1243var operation = model.GetOperation(syntax);
Semantics\TopLevelStatementsTests.cs (8)
201var operation1 = model1.GetOperation(localRef.Parent); 244var operation2 = model1.GetOperation(localDecl); 329var operation1 = model1.GetOperation(localRef.Parent); 367var operation2 = model2.GetOperation(localDecl); 489var operation1 = model1.GetOperation(localDecl); 509var operation2 = model2.GetOperation(localRef); 581var operation1 = model1.GetOperation(localDecl); 598var operation2 = model1.GetOperation(localRef);
Microsoft.CodeAnalysis.CSharp.Symbol.UnitTests (2)
Symbols\Source\NullablePublicAPITests.cs (1)
4964var operation = model.GetOperation(ternary);
Symbols\SymbolEqualityTests.cs (1)
963var operation = model.GetOperation(syntaxNode);
Microsoft.CodeAnalysis.CSharp.Test.Utilities (14)
CompilationTestUtils.cs (3)
356var iop = getOperation(model, expression); 392static IOperation getOperation(SemanticModel model, SyntaxNode expression) 419static void assertTypeInfoNull(IOperation iop, TypeInfo typeInfo)
CSharpTestBase.cs (11)
2596protected static (IOperation? operation, SyntaxNode? node) GetOperationAndSyntaxForTest<TSyntaxNode>(CSharpCompilation compilation) 2607var operation = model.GetOperation(syntaxNode); 2622protected static string? GetOperationTreeForTest(CSharpCompilation compilation, IOperation? operation) 2639protected static IOperation? VerifyOperationTreeForTest<TSyntaxNode>(CSharpCompilation compilation, string expectedOperationTree, Action<IOperation?, Compilation, SyntaxNode?>? additionalOperationTreeVerifier = null) 2655protected static void VerifyOperationTree(CSharpCompilation compilation, IOperation? operation, string expectedOperationTree) 2694Action<IOperation?, Compilation, SyntaxNode?>? additionalOperationTreeVerifier = null) 2720Action<IOperation?, Compilation, SyntaxNode?>? additionalOperationTreeVerifier = null, 2741Action<IOperation?, Compilation, SyntaxNode?>? additionalOperationTreeVerifier = null) 2759Action<IOperation?, Compilation, SyntaxNode?>? additionalOperationTreeVerifier = null, 2817Action<IOperation?, Compilation, SyntaxNode?>? additionalOperationTreeVerifier = null,
Microsoft.CodeAnalysis.CSharp.Workspaces (12)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (11)
88var castExpressionOperation = semanticModel.GetOperation(cast.Expression, cancellationToken); 96var current = castExpressionOperation.Parent.Parent; 204var originalOperation = originalSemanticModel.GetOperation(castNode, cancellationToken); 263var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenExpression.WalkDownParentheses(), cancellationToken); 805var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenBitwiseNotExpression, cancellationToken); 958var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenConditionalOrSwitchExpression, cancellationToken); 1048var operation = semanticModel.GetOperation(parentBinary, cancellationToken); 1071private static bool ConvertedHasUserDefinedEquals(BinaryOperatorKind operatorKind, IOperation operation) 1110private static bool IsConstantNull(IOperation operation) 1245var operation = semanticModel.GetOperation(expression.WalkDownParentheses(), cancellationToken); 1540var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\InitializeParameter\CSharpInitializeParameterService.cs (1)
102foreach (var operation in blockOperation.Operations)
Microsoft.CodeAnalysis.Features (225)
ConvertForEachToFor\AbstractConvertForEachToForCodeRefactoringProvider.cs (5)
173var foreachCollection = RemoveImplicitConversion(operation.Collection); 193SemanticModel model, ILocalSymbol foreachVariable, IOperation foreachCollection, 361private static bool CheckRequireCollectionStatement(IOperation operation) 387private static IOperation RemoveImplicitConversion(IOperation collection)
ConvertIfToSwitch\AbstractConvertIfToSwitchCodeRefactoringProvider.AnalyzedNodes.cs (2)
24internal sealed class AnalyzedSwitchSection(ImmutableArray<AnalyzedSwitchLabel> labels, IOperation body, SyntaxNode syntaxToRemove) 27public readonly IOperation Body = body;
ConvertIfToSwitch\AbstractConvertIfToSwitchCodeRefactoringProvider.Analyzer.cs (20)
51public abstract bool HasUnreachableEndPoint(IOperation operation); 73public (ImmutableArray<AnalyzedSwitchSection>, TExpressionSyntax TargetExpression) AnalyzeIfStatementSequence(ReadOnlySpan<IOperation> operations) 76if (!ParseIfStatementSequence(operations, sections, topLevel: true, out var defaultBodyOpt)) 98ReadOnlySpan<IOperation> operations, 101out IOperation? defaultBodyOpt) 134var nextStatement = operations[current]; 154private bool ParseIfStatement(IOperation operation, ArrayBuilder<AnalyzedSwitchSection> sections, out IOperation? defaultBodyOpt) 183private bool ParseIfStatementOrBlock(IOperation op, ArrayBuilder<AnalyzedSwitchSection> sections, out IOperation? defaultBodyOpt) 207private bool ParseSwitchLabels(IOperation operation, ArrayBuilder<AnalyzedSwitchLabel> labels) 229private AnalyzedSwitchLabel? ParseSwitchLabel(IOperation operation) 278private AnalyzedPattern? ParsePattern(IOperation operation, ArrayBuilder<TExpressionSyntax> guards) 393bool CheckTargetExpression(IOperation left, IOperation right) 397private static (BoundKind Kind, IOperation Expression, IOperation Value) GetRangeBound(IBinaryOperation op) 443private static bool IsConstant(IOperation operation) 451private bool CheckTargetExpression(IOperation operation, [NotNullWhen(true)] out ITypeSymbol? switchTargetType) 474private bool CheckConstantType(IOperation operation, ITypeSymbol switchTargetType)
ConvertIfToSwitch\AbstractConvertIfToSwitchCodeRefactoringProvider.cs (2)
88var ifOperation = semanticModel.GetOperation(ifStatement); 140static OperationKind GetSwitchArmKind(IOperation op)
ConvertIfToSwitch\AbstractConvertIfToSwitchCodeRefactoringProvider.Rewriting.cs (1)
23public abstract IEnumerable<SyntaxNode> AsSwitchSectionStatements(IOperation operation);
ExtractMethod\MethodExtractor.Analyzer.cs (1)
435var selectionOperation = this.SemanticModel.GetOperation(containingScope);
InitializeParameter\AbstractAddParameterCheckCodeRefactoringProvider.cs (24)
237IOperation statement, IParameterSymbol parameter, 246var operation = semanticModel.GetOperation(coalesceNode, cancellationToken); 260private static bool IsIfNullCheck(IOperation statement, IParameterSymbol parameter) 264var condition = ifStatement.Condition; 293private static bool IsIfNumericCheck(IOperation statement, IParameterSymbol parameter) 297var condition = ifStatement.Condition.UnwrapImplicitConversion(); 331static bool IsNumericCheckOperands(IOperation operand1, IOperation operand2, IParameterSymbol parameter) 371foreach (var statement in blockStatement.Operations) 407foreach (var statement in blockStatement.Operations) 453foreach (var statement in blockStatement.Operations) 463private static bool IsEnumIsDefinedCheck(IOperation statement, IParameterSymbol parameter, IMethodSymbol? enumIsDefinedGenericMethod, IMethodSymbol? enumIsDefinedNonGenericMethod) 467var condition = ifStatement.Condition; 491private static bool IsAnyThrowInvocation(IOperation statement, IParameterSymbol? parameter, ReadOnlySpan<string> possibleTypeNames, Func<string, bool> methodNamePredicate) 515private static bool IsAnyThrowIfNullInvocation(IOperation statement, IParameterSymbol? parameter) 520private static bool IsAnyThrowIfNumericCheckInvocation(IOperation statement, IParameterSymbol? parameter) 525private static bool IsStringCheck(IOperation condition, IParameterSymbol parameter) 538private static bool IsNullCheck(IOperation operand1, IOperation operand2, IParameterSymbol parameter) 807var checkStatement = TryFindParameterCheckStatement( 817var checkStatement = TryFindParameterCheckStatement( 837private static IOperation? TryFindParameterCheckStatement( 847foreach (var statement in blockStatement.Operations) 911foreach (var statement in blockStatement.Operations)
InitializeParameter\AbstractInitializeMemberFromParameterCodeRefactoringProviderMemberCreation.cs (8)
76var assignmentStatement = InitializeParameterHelpersCore.TryFindFieldOrPropertyAssignmentStatement(parameter, blockStatement); 226var assignmentOp = InitializeParameterHelpersCore.TryFindFieldOrPropertyAssignmentStatement(parameter, blockStatement); 545var statement = TryFindFieldOrPropertyAssignmentStatement( 573private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 579foreach (var statement in blockStatement.Operations) 593var target = targetTuple.Elements[i]; 594var value = valueTuple.Elements[i]; 672foreach (var statement in blockStatement.Operations)
InitializeParameter\AbstractInitializeParameterCodeRefactoringProvider.cs (3)
158var operation = semanticModel.GetOperation( 182IOperation condition, 188var childOperation = semanticModel.GetOperation(child, cancellationToken);
InlineMethod\AbstractInlineMethodRefactoringProvider.InlineContext.cs (2)
394var operation = semanticModel.GetOperation(methodDeclarationSyntax, cancellationToken); 400public override void Visit(IOperation? operation)
InlineMethod\AbstractInlineMethodRefactoringProvider.MethodParametersInfo.cs (1)
499var argumentExpressionOperation = argumentOperation.Value;
IntroduceParameter\AbstractIntroduceParameterCodeRefactoringProvider.cs (1)
238var operation = semanticModel.GetOperation(expression, cancellationToken);
IntroduceUsingStatement\AbstractIntroduceUsingStatementCodeRefactoringProvider.cs (1)
123var initializer = (localDeclaration.Initializer ?? declarator.Initializer)?.Value;
src\Analyzers\Core\Analyzers\ConvertTypeofToNameof\AbstractConvertTypeOfToNameOfDiagnosticAnalyzer.cs (1)
46private static bool IsValidOperation(IOperation operation)
src\Analyzers\Core\Analyzers\Helpers\HashCodeAnalyzer\HashCodeAnalyzer.cs (10)
50public (bool accessesBase, ImmutableArray<ISymbol> members, ImmutableArray<IOperation> statements) GetHashedMembers(ISymbol? owningSymbol, IOperation? operation) 82IMethodSymbol method, ImmutableArray<IOperation> statements) 105IMethodSymbol method, ImmutableArray<IOperation> statements) 134var initializerValue = declaration.Initializer?.Value ?? declarator.Initializer?.Value; 178var statement = statements[i]; 204private static bool IsLocalReference(IOperation value, ILocalSymbol accumulatorVariable) 210private static bool IsLiteralNumber(IOperation value) 218private static IOperation Unwrap(IOperation value)
src\Analyzers\Core\Analyzers\Helpers\HashCodeAnalyzer\HashCodeAnalyzer.OperationDeconstructor.cs (4)
17/// Breaks down complex <see cref="IOperation"/> trees, looking for particular 45public bool TryAddHashedSymbol(IOperation value, bool seenHash) 152foreach (var element in tupleOperation.Elements) 168private static bool TryGetFieldOrProperty(IOperation operation, [NotNullWhen(true)] out ISymbol? symbol)
src\Analyzers\Core\Analyzers\MakeFieldReadonly\AbstractMakeFieldReadonlyDiagnosticAnalyzer.cs (1)
237private static bool IsWrittenTo(IOperation? operation, ISymbol owningSymbol)
src\Analyzers\Core\Analyzers\PopulateSwitch\AbstractPopulateSwitchDiagnosticAnalyzer.cs (3)
20where TSwitchOperation : IOperation 29protected abstract IOperation GetValueOfSwitchOperation(TSwitchOperation operation); 57var value = GetValueOfSwitchOperation(switchOperation);
src\Analyzers\Core\Analyzers\PopulateSwitch\AbstractPopulateSwitchExpressionDiagnosticAnalyzer.cs (1)
22protected override IOperation GetValueOfSwitchOperation(ISwitchExpressionOperation operation)
src\Analyzers\Core\Analyzers\PopulateSwitch\AbstractPopulateSwitchStatementDiagnosticAnalyzer.cs (1)
22protected override IOperation GetValueOfSwitchOperation(ISwitchOperation operation)
src\Analyzers\Core\Analyzers\PopulateSwitch\PopulateSwitchExpressionHelpers.cs (2)
18var switchExpression = operation.Value; 76private static void RemoveIfConstantPatternHasValue(IOperation operation, Dictionary<long, ISymbol> enumMembers)
src\Analyzers\Core\Analyzers\PopulateSwitch\PopulateSwitchStatementHelpers.cs (2)
57var switchExpression = switchStatement.Value; 118var value = ((ISingleValueCaseClauseOperation)clause).Value;
src\Analyzers\Core\Analyzers\QualifyMemberAccess\AbstractQualifyMemberAccessDiagnosticAnalyzer.cs (4)
49protected abstract Location GetLocation(IOperation operation); 74private void AnalyzeOperation(OperationAnalysisContext context, IOperation operation, IOperation? instanceOperation) 135private static bool IsStaticMemberOrIsLocalFunction(IOperation operation)
src\Analyzers\Core\Analyzers\RemoveRedundantEquality\AbstractRemoveRedundantEqualityDiagnosticAnalyzer.cs (3)
80IOperation leftOperand, 81IOperation rightOperand, 119static bool? TryGetLiteralValue(IOperation? operand)
src\Analyzers\Core\Analyzers\RemoveUnnecessarySuppressions\AbstractRemoveUnnecessaryAttributeSuppressionsDiagnosticAnalyzer.cs (1)
87out var targetSymbolString, out var targetValueOperation, out var resolvedSymbols))
src\Analyzers\Core\Analyzers\RemoveUnnecessarySuppressions\SuppressMessageAttributeState.cs (9)
46out ImmutableArray<(string name, IOperation value)> namedAttributeArguments) 48var operation = (model.GetOperation(attributeSyntax, cancellationToken) as IAttributeOperation)?.Operation; 55using var _ = ArrayBuilder<(string name, IOperation value)>.GetInstance(out var builder); 56foreach (var initializer in initializerOperation.Initializers) 70public static bool HasValidScope(ImmutableArray<(string name, IOperation value)> namedAttributeArguments, out TargetScope targetScope) 88ImmutableArray<(string name, IOperation value)> namedAttributeArguments, 92out IOperation? targetValueOperation, 128ImmutableArray<(string name, IOperation value)> namedAttributeArguments, 131[NotNullWhen(returnValue: true)] out IOperation? argumentValueOperation)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (5)
258var operation = context.Operation; 363var operation = operationContext.Operation; 455var value = parameterInitializer.Value; 535var operation = operationContext.Operation; 572var nameofArgument = ((INameOfOperation)operationContext.Operation).Argument;
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.cs (2)
108protected abstract Location GetDefinitionLocationToFade(IOperation unusedDefinition); 122protected virtual bool ShouldBailOutFromRemovableAssignmentAnalysis(IOperation unusedSymbolWriteOperation)
src\Analyzers\Core\Analyzers\RemoveUnusedParametersAndValues\AbstractRemoveUnusedParametersAndValuesDiagnosticAnalyzer.SymbolStartAnalyzer.BlockAnalyzer.cs (17)
32/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not. 45/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not. 51/// We use this value in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/> to determine whether to bail from analysis or not. 98var firstBlock = context.OperationBlocks[0]; 138foreach (var operationBlock in context.OperationBlocks) 149foreach (var operationBlock in context.OperationBlocks) 170var value = expressionStatement.Operation; 253/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>. 257private static bool IsHandledDelegateCreationOrAnonymousFunctionTreeShape(IOperation operation) 301/// delegate escape, and corresponding bail out from flow analysis in <see cref="ShouldAnalyze(IOperation, ISymbol, ref bool)"/>. 306private static bool IsHandledLocalOrParameterReferenceTreeShape(IOperation operation) 366private bool ShouldAnalyze(IOperation operationBlock, ISymbol owningSymbol, ref bool hasUnknownOperationNoneDescendant) 377foreach (var operation in operationBlock.Descendants()) 490foreach (var operationBlock in context.OperationBlocks) 590IOperation unreadWriteOperation, 633bool IsRemovableAssignmentWithoutSideEffects(IOperation unusedSymbolWriteOperation) 657static bool IsRemovableAssignmentValueWithoutSideEffects(IOperation assignmentValue)
src\Analyzers\Core\Analyzers\SimplifyInterpolation\AbstractSimplifyInterpolationHelpers.cs (17)
29protected abstract SyntaxNode GetPreservedInterpolationExpressionSyntax(IOperation operation); 82var expression = Unwrap(interpolation.Expression); 97private static IOperation? Unwrap(IOperation? expression, bool towardsParent = false) 121IOperation expression, 125out IOperation unwrapped, 132HasNonImplicitInstance(invocation, out var instance) && 210private static bool IsInvariantCultureReference(IOperation operation) 229private static bool IsInsideFormattableStringInvariant(IOperation operation) 250private static IEnumerable<IOperation> AncestorsAndSelf(IOperation operation) 252for (var current = operation; current is not null; current = current.Parent) 265IOperation expression, 266out IOperation unwrapped, 272HasNonImplicitInstance(invocation, out var instance)) 283var alignmentOp = invocation.Arguments[0].Value; 310private static bool HasNonImplicitInstance(IInvocationOperation invocation, [NotNullWhen(true)] out IOperation? instance)
src\Analyzers\Core\Analyzers\UseAutoProperty\AbstractUseAutoPropertyAnalyzer.cs (1)
518var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForAssignment\AbstractUseConditionalExpressionForAssignmentDiagnosticAnalyzer.cs (2)
29out var isRef, out var trueStatement, out var falseStatement, out var trueAssignment, out var falseAssignment))
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForAssignment\UseConditionalExpressionForAssignmentHelpers.cs (13)
23[NotNullWhen(true)] out IOperation trueStatement, 24[NotNullWhen(true)] out IOperation? falseStatement, 89foreach (var nullCheckedExpression in GetNullCheckedExpressions(ifOperation.Condition)) 115static bool ReferencesDeclaredVariableInAssignment(IOperation condition, IOperation? trueTarget, IOperation? falseTarget) 120foreach (var operation in condition.DescendantsAndSelf()) 141static bool ContainsLocalReference(HashSet<ILocalSymbol> declaredPatternSymbols, IOperation? target) 145foreach (var operation in target.DescendantsAndSelf()) 158static IEnumerable<IOperation> GetNullCheckedExpressions(IOperation operation) 160foreach (var current in operation.DescendantsAndSelf()) 194[NotNullWhen(true)] IOperation? statement,
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\AbstractUseConditionalExpressionForReturnDiagnosticAnalyzer.cs (3)
29out var isRef, out var trueStatement, out var falseStatement, out var trueReturn, out var falseReturn)) 49protected virtual bool IsStatementSupported(IOperation statement)
src\Analyzers\Core\Analyzers\UseConditionalExpression\ForReturn\UseConditionalExpressionForReturnHelpers.cs (3)
20[NotNullWhen(true)] out IOperation? trueStatement, 21[NotNullWhen(true)] out IOperation? falseStatement, 135private static bool IsReturnExprOrThrow(IOperation? statement)
src\Analyzers\Core\Analyzers\UseConditionalExpression\UseConditionalExpressionHelpers.cs (7)
25IOperation whenTrue, IOperation whenFalse, CancellationToken cancellationToken) 72public static IOperation? UnwrapSingleStatementBlock(IOperation? statement) 117public static bool IsBooleanLiteral(IOperation trueValue, bool val) 120public static bool CanSimplify(IOperation trueValue, IOperation falseValue, bool isRef, out bool negate)
src\Analyzers\Core\Analyzers\UseSystemHashCode\UseSystemHashCodeDiagnosticAnalyzer.cs (1)
50var operation = context.OperationBlocks[0];
src\Analyzers\Core\Analyzers\UseThrowExpression\AbstractUseThrowExpressionDiagnosticAnalyzer.cs (4)
213var condition = ifStatement.Condition; 240IOperation operation, 262private static bool IsNull(IOperation operation) 273var containingOperation = semanticModel.GetOperation(throwStatement.GetRequiredParent(), cancellationToken);
src\Analyzers\Core\CodeFixes\PopulateSwitch\AbstractPopulateSwitchCodeFixProvider.cs (1)
27where TSwitchOperation : IOperation
src\Analyzers\Core\CodeFixes\UseConditionalExpression\AbstractUseConditionalExpressionCodeFixProvider.cs (7)
88IOperation trueStatement, IOperation falseStatement, 89IOperation trueValue, IOperation falseValue, 145protected virtual TExpressionSyntax WrapReturnExpressionIfNecessary(TExpressionSyntax returnExpression, IOperation returnOperation) 175SyntaxGenerator generator, IOperation statement, IOperation value)
src\Analyzers\Core\CodeFixes\UseConditionalExpression\ForAssignment\AbstractUseConditionalExpressionForAssignmentCodeFixProvider.cs (5)
71out var trueStatement, out var falseStatement, 239var unwrapped = variableInitializer.Value.UnwrapImplicitConversion(); 254private static bool ReferencesLocalVariable(IOperation operation, ILocalSymbol variable) 262foreach (var child in operation.ChildOperations)
src\Analyzers\Core\CodeFixes\UseConditionalExpression\ForReturn\AbstractUseConditionalExpressionForReturnCodeFixProvider.cs (2)
59out var trueStatement, out var falseStatement,
src\Analyzers\Core\CodeFixes\UseSystemHashCode\UseSystemHashCodeCodeFixProvider.cs (1)
55var operation = semanticModel.GetOperation(operationLocation, cancellationToken);
ValueTracking\ValueTracker.cs (3)
141var operation = semanticModel.GetOperation(lhsNode, cancellationToken); 212var operation = semanticModel.GetOperation(node, cancellationToken); 299var operation = semanticModel.GetOperation(node, cancellationToken);
ValueTracking\ValueTracker.FindReferencesProgress.cs (5)
84var operation = semanticModel.GetOperation(node, cancellationToken); 115var argumentOperation = semanticModel.GetOperation(argument, cancellationToken); 133var expressionOperation = semanticModel.GetOperation(expression, cancellationToken); 158var operation = semanticModel.GetOperation(originalNode.Parent, cancellationToken); 184var operation = semanticModel.GetOperation(invocationSyntax, cancellationToken);
ValueTracking\ValueTracker.OperationCollector.cs (13)
25public Task VisitAsync(IOperation operation, CancellationToken cancellationToken) 46private async Task VisitReturnDescendentsAsync(IOperation operation, bool allowImplicit, CancellationToken cancellationToken) 49foreach (var returnOperation in returnOperations) 56private async Task VisitDefaultAsync(IOperation operation, CancellationToken cancellationToken) 89private async Task<bool> TryVisitChildrenAsync(IOperation operation, CancellationToken cancellationToken) 91foreach (var child in operation.ChildOperations) 111private Task VisitReferenceAsync(IOperation operation, CancellationToken cancellationToken) 142Task AddReferenceAsync(IOperation operation, CancellationToken cancellationToken) 173private async Task AddOperationAsync(IOperation operation, ISymbol symbol, CancellationToken cancellationToken) 275private static bool IsContainedIn<TContainingOperation>(IOperation? operation) where TContainingOperation : IOperation 278private static bool IsContainedIn<TContainingOperation>(IOperation? operation, [NotNullWhen(returnValue: true)] out TContainingOperation? containingOperation) where TContainingOperation : IOperation
Microsoft.CodeAnalysis.PerformanceSensitiveAnalyzers (214)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
Microsoft.CodeAnalysis.PublicApiAnalyzers (185)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Microsoft.CodeAnalysis.ResxSourceGenerator (185)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Microsoft.CodeAnalysis.Test.Utilities (152)
CommonTestBase.cs (21)
594private static Dictionary<IOperation, IOperation?> GetParentOperationsMap(SemanticModel model) 597var topOperations = new HashSet<IOperation>(); 603var map = new Dictionary<IOperation, IOperation?>(); 604foreach (var topOperation in topOperations) 615private static void CollectParentOperations(IOperation operation, Dictionary<IOperation, IOperation?> map) 618foreach (var child in operation.ChildOperations) 626private static void CollectTopOperations(SemanticModel model, SyntaxNode node, HashSet<IOperation> topOperations) 630var operation = model.GetOperation(child); 649var operation = model.GetOperation(node); 655var clonedOperation = OperationCloner.CloneOperation(operation); 669var originalSet = new HashSet<IOperation>(operation.DescendantsAndSelf()); 670var clonedSet = new HashSet<IOperation>(clonedOperation.DescendantsAndSelf()); 677private static void VerifyOperationTreeContracts(IOperation root) 681var set = new HashSet<IOperation>(root.DescendantsAndSelf()); 683foreach (var child in root.DescendantsAndSelf()) 695SemanticModel semanticModel, HashSet<IOperation> set, SyntaxNode node) 699var operation = semanticModel.GetOperation(node);
Compilation\CompilationExtensions.cs (5)
281var roots = ArrayBuilder<(IOperation operation, ISymbol associatedSymbol)>.GetInstance(); 300var operation = semanticModel.GetOperation(node); 324var explicitNodeMap = new Dictionary<SyntaxNode, IOperation>(); 329foreach (var operation in root.DescendantsAndSelf()) 365void checkControlFlowGraph(IOperation root, ISymbol associatedSymbol)
Compilation\ControlFlowGraphVerifier.cs (19)
30IOperation operationRoot = model.GetOperation(syntaxNode); 235foreach (var statement in statements) 262IOperation value = block.BranchValue; 301IOperation value = block.ConditionKind == ControlFlowConditionKind.None ? block.BranchValue : null; 412var operation = block.Operations[j]; 485IOperation lastOperation = null; 681bool isAggregateGroupCapture(IOperation operation, ControlFlowRegion region, BasicBlock block, CaptureId id) 770PooledHashSet<CaptureId> state, IOperation operation, BasicBlock block, int operationIndex, 896IOperation containingArgument = reference; 1038bool isConditionalAccessCaptureUsedAfterNullCheck(IOperation operation, ControlFlowRegion region, BasicBlock block, CaptureId id) 1324foreach (IOperation operation in block.Operations) 1628void validateRoot(IOperation root) 1636foreach (var operation in root.Descendants()) 1651foreach (IOperation operation in block.Operations) 1695void recordReferences(IOperation operation) 1697foreach (IOperation node in operation.DescendantsAndSelf()) 1779string getOperationTree(IOperation operation) 1805Compilation compilation, IOperation root, int initialIndent, ISymbol associatedSymbol) : 1833private static bool CanBeInControlFlowGraph(IOperation n)
Compilation\OperationTreeVerifier.cs (15)
26protected readonly IOperation _root; 28private readonly Dictionary<SyntaxNode, IOperation> _explicitNodeMap; 36public OperationTreeVerifier(Compilation compilation, IOperation root, int initialIndent) 45_explicitNodeMap = new Dictionary<SyntaxNode, IOperation>(); 49public static string GetOperationTree(Compilation compilation, IOperation operation, int initialIndent = 0) 55foreach (var op in operation.DescendantsAndSelf()) 92private void LogCommonPropertiesAndNewLine(IOperation operation) 98private void LogCommonProperties(IOperation operation) 285public override void Visit(IOperation operation) 324private void Visit(IOperation operation, string header) 382private void VisitChildren(IOperation operation) 394where T : IOperation 409private void VisitInstance(IOperation instance) 414internal override void VisitNoneOperation(IOperation operation) 1444foreach (var initializer in operation.Initializers)
Compilation\SemanticModelExtensions.cs (1)
22IOperation operation = model.GetOperation(node);
Compilation\TestOperationVisitor.cs (41)
30public override void DefaultVisit(IOperation operation) 35internal override void VisitNoneOperation(IOperation operation) 43public override void Visit(IOperation operation) 67var builder = count == 0 ? null : ArrayBuilder<IOperation>.GetInstance(count); 68foreach (IOperation child in operation.ChildOperations) 83var first = forwards.Current; 90var last = reversed.Current; 101foreach (IOperation child in operation.ChildOperations.Reverse()) 136IEnumerable<IOperation> children = operation.IgnoredArguments; 150IEnumerable<IOperation> children = operation.IgnoredDimensions.Concat(operation.Declarators); 178internal static void VerifySubTree(IOperation root, bool hasNonNullParent = false) 193var explicitNodeMap = new Dictionary<SyntaxNode, IOperation>(); 195foreach (IOperation descendant in root.DescendantsAndSelf()) 259IEnumerable<IOperation> children; 296IEnumerable<IOperation> children = operation.Before; 324IEnumerable<IOperation> children; 335IEnumerable<IOperation> children = new[] { operation.Collection, operation.LoopControlVariable, operation.Body }.Concat(operation.NextVariables); 429IEnumerable<IOperation> children = new[] { operation.Body }; 446IEnumerable<IOperation> children = Array.Empty<IOperation>(); 542IEnumerable<IOperation> children; 568IEnumerable<IOperation> children = new[] { operation.Target }.Concat(operation.Arguments); 650VisitMemberReference(operation, Array.Empty<IOperation>()); 653private void VisitMemberReference(IMemberReferenceOperation operation, IEnumerable<IOperation> additionalChildren) 658IEnumerable<IOperation> children; 1043IEnumerable<IOperation> children = operation.Arguments; 1056foreach (var initializer in operation.Initializers) 1070IEnumerable<IOperation> children = operation.Arguments; 1147IEnumerable<IOperation> children = operation.DimensionSizes; 1307IEnumerable<IOperation> children = new[] { operation.Expression }; 1328IEnumerable<IOperation> children = new[] { operation.HandlerCreation, operation.Content }; 1480IEnumerable<IOperation> children = operation.Patterns.Cast<IOperation>(); 1522IEnumerable<IOperation> children = operation.DeconstructionSubpatterns.Cast<IOperation>(); 1531var children = new IOperation[] { operation.Member, operation.Pattern }; 1560var children = operation.Arms.Cast<IOperation>().Prepend(operation.Value); 1627AssertEx.Equal(new IOperation[] { operation.EventReference }.Concat(operation.Arguments), operation.ChildOperations); 1643var builder = ArrayBuilder<IOperation>.GetInstance(); 1772IOperation[] children = operation.ChildOperations.ToArray(); 1827IEnumerable<IOperation> children = SpecializedCollections.SingletonEnumerable(operation.Operand).Concat(operation.Initializer);
Diagnostics\BoxingOperationAnalyzer.cs (1)
43IOperation operation = operationContext.Operation;
Diagnostics\CommonDiagnosticAnalyzers.cs (10)
1230private readonly ConcurrentDictionary<IOperation, (ControlFlowGraph Graph, ISymbol AssociatedSymbol)> _controlFlowGraphMapOpt; 1252_controlFlowGraphMapOpt = verifyGetControlFlowGraph ? new ConcurrentDictionary<IOperation, (ControlFlowGraph, ISymbol)>() : null; 1267private void CacheAndVerifyControlFlowGraph(ImmutableArray<IOperation> operationBlocks, Func<IOperation, (ControlFlowGraph Graph, ISymbol AssociatedSymbol)> getControlFlowGraph) 1271foreach (var operationBlock in operationBlocks) 1314var rootOperation = operationContext.Operation.GetRootOperation(); 1390foreach (var operationRoot in c.OperationBlocks) 1423foreach (var operationBlock in operationBlockAnalysisContext.OperationBlocks) 2990public readonly List<IOperation> AnalyzedOperations = new(); 2992public readonly List<IOperation> AnalyzedOperationsInsideOperationBlock = new();
Diagnostics\CouldHaveMoreSpecificTypeAnalyzer.cs (5)
232private static void AssignTo(IOperation target, Dictionary<ILocalSymbol, HashSet<INamedTypeSymbol>> localsSourceTypes, Dictionary<IFieldSymbol, HashSet<INamedTypeSymbol>> fieldsSourceTypes, IOperation sourceValue) 237private static void AssignTo(IOperation target, Dictionary<ILocalSymbol, HashSet<INamedTypeSymbol>> localsSourceTypes, Dictionary<IFieldSymbol, HashSet<INamedTypeSymbol>> fieldsSourceTypes, ITypeSymbol sourceType) 252private static void AssignTo<SymbolType>(SymbolType target, ITypeSymbol targetType, Dictionary<SymbolType, HashSet<INamedTypeSymbol>> sourceTypes, IOperation sourceValue) 279private static ITypeSymbol OriginalType(IOperation value)
Diagnostics\FieldCouldBeReadOnlyAnalyzer.cs (1)
111private static void AssignTo(IOperation target, bool inConstructor, ITypeSymbol staticConstructorType, HashSet<IFieldSymbol> assignedToFields, HashSet<IFieldSymbol> mightBecomeReadOnlyFields)
Diagnostics\LocalCouldBeConstAnalyzer.cs (1)
114private static void AssignTo(IOperation target, HashSet<ILocalSymbol> assignedToLocals, HashSet<ILocalSymbol> mightBecomeConstLocals)
Diagnostics\OperationTestAnalyzer.cs (31)
150IOperation forCondition = forLoop.Condition; 155IOperation conditionLeft = condition.LeftOperand; 156IOperation conditionRight = condition.RightOperand; 169IOperation setup = forLoop.Before[0]; 184IOperation advance = forLoop.AtLoopBottom[0]; 187IOperation advanceExpression = ((IExpressionStatementOperation)advance).Operation; 228ILocalSymbol testVariable, IOperation advanceExpression, 354IOperation singleValueExpression = singleValueClause.Value; 373IOperation rangeMinExpression = rangeClause.MinimumValue; 374IOperation rangeMaxExpression = rangeClause.MaximumValue; 397IOperation relationalValueExpression = relationalClause.Value; 572foreach (IOperation element in initializer.ElementValues) 584private static void TestAscendingArgument(OperationAnalysisContext operationContext, IOperation argument, ref long priorArgumentValue) 715var initializer = operationContext.Operation; 1326foreach (var statement in block.Operations) 1378var operation = operationContext.Operation; 1380IOperation receiver; 1609var left = binary.LeftOperand; 1610var right = binary.RightOperand; 1641var operand = unary.Operand; 1693var nullList = new List<IOperation>(); 1694var paramsList = new List<IOperation>(); 1698foreach (var nullSyntaxOperation in nullList) 1703foreach (var paramsarrayArgumentOperation in paramsList) 1718private readonly List<IOperation> _nullList; 1719private readonly List<IOperation> _paramsList; 1721public Walker(List<IOperation> nullList, List<IOperation> paramsList) 1727public override void Visit(IOperation operation) 1785var operation = operationContext.Operation; 1930var forCondition = forLoop.LimitValue;
Extensions\OperationExtensions.cs (1)
11public static bool MustHaveNullType(this IOperation operation)
Microsoft.CodeAnalysis.UnitTests (13)
Diagnostics\OperationTests.cs (13)
26private static void TestCore(Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression) 29ImmutableArray<IOperation> arguments = ImmutableArray<IOperation>.Empty; 37arguments = ImmutableArray.Create((IOperation)null); 45arguments = ImmutableArray.Create((IOperation)null); 55arguments = ImmutableArray.Create((IOperation)null); 80Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression = 95Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression = 110Func<ImmutableArray<IOperation>, ImmutableArray<string>, ImmutableArray<RefKind>, HasDynamicArgumentsExpression> createDynamicExpression = 132IOperation parent = new BlockOperation(ImmutableArray<IOperation>.Empty, ImmutableArray<ILocalSymbol>.Empty, 145private void TestGetFlowGraphInvalidArgumentCore(string argumentExceptionMessage, IOperation parent) 151ImmutableArray<IOperation>.Empty, ImmutableArray<ILocalSymbol>.Empty,
Microsoft.CodeAnalysis.VisualBasic (172)
Binding\MemberSemanticModel.vb (4)
838Friend Overrides Function GetOperationWorker(node As VisualBasicSyntaxNode, cancellationToken As CancellationToken) As IOperation 840Dim result As IOperation = Nothing 852Dim rootOperation As IOperation = _operationFactory.Value.Create(rootNode) 1209Private ReadOnly _guardedIOperationNodeMap As New Dictionary(Of SyntaxNode, IOperation)
Compilation\SemanticModel.vb (2)
140Protected Overrides Function GetOperationCore(node As SyntaxNode, cancellationToken As CancellationToken) As IOperation 147Friend Overridable Function GetOperationWorker(node As VisualBasicSyntaxNode, cancellationToken As CancellationToken) As IOperation
Compilation\SpeculativeSemanticModelWithMemberModel.vb (1)
233Friend Overrides Function GetOperationWorker(node As VisualBasicSyntaxNode, cancellationToken As CancellationToken) As IOperation
Compilation\SyntaxTreeSemanticModel.vb (1)
355Friend Overrides Function GetOperationWorker(node As VisualBasicSyntaxNode, cancellationToken As CancellationToken) As IOperation
Compilation\VisualBasicCompilation.vb (1)
1899Friend Overrides Function ClassifyConvertibleConversion(source As IOperation, destination As ITypeSymbol, ByRef constantValue As ConstantValue) As IConvertibleConversion
Operations\VisualBasicOperationFactory.vb (141)
55Public Function Create(boundNode As BoundNode) As IOperation 321Dim children As ImmutableArray(Of IOperation) = GetIOperationChildren(boundNode) 331Public Function CreateFromArray(Of TBoundNode As BoundNode, TOperation As {Class, IOperation})(nodeArray As ImmutableArray(Of TBoundNode)) As ImmutableArray(Of TOperation) 340Friend Function GetIOperationChildren(boundNode As BoundNode) As ImmutableArray(Of IOperation) 343Return ImmutableArray(Of IOperation).Empty 346Dim builder = ArrayBuilder(Of IOperation).GetInstance(boundNodeWithChildren.Children.Length) 359Private Function CreateBoundAssignmentOperatorOperation(boundAssignmentOperator As BoundAssignmentOperator) As IOperation 365Dim children As ImmutableArray(Of IOperation) = GetIOperationChildren(boundAssignmentOperator) 370Dim target As IOperation = Create(boundAssignmentOperator.Left) 371Dim value As IOperation = Create(boundAssignmentOperator.Right) 414Dim awaitedValue As IOperation = Create(boundAwaitOperator.Operand) 422Dim argument As IOperation = Create(boundNameOfOperator.Argument) 448Dim receiver As IOperation = CreateReceiverOperation(boundReceiver, targetMethod) 465Dim operand As IOperation = Create(boundParenthesized.Expression) 474Dim arrayReference As IOperation = Create(boundArrayAccess.Expression) 475Dim indices = CreateFromArray(Of BoundExpression, IOperation)(boundArrayAccess.Indices) 482Friend Function CreateBoundUnaryOperatorChild(boundOperator As BoundExpression) As IOperation 499Dim operand As IOperation = CreateBoundUnaryOperatorChild(boundUnaryOperator) 512Dim operand As IOperation = CreateBoundUnaryOperatorChild(boundUserDefinedUnaryOperator) 528Friend Function CreateBoundBinaryOperatorChild(binaryOperator As BoundExpression, isLeft As Boolean) As IOperation 549Private Function CreateBoundBinaryOperatorOperation(boundBinaryOperator As BoundBinaryOperator) As IOperation 561Dim left As IOperation = Nothing 565Dim right As IOperation = Create(currentBinary.Right) 584Dim left As IOperation = CreateBoundBinaryOperatorChild(boundUserDefinedBinaryOperator, isLeft:=True) 585Dim right As IOperation = CreateBoundBinaryOperatorChild(boundUserDefinedBinaryOperator, isLeft:=False) 597Dim value As IOperation = Create(boundBinaryConditionalExpression.TestExpression) 598Dim whenFalse As IOperation = Create(boundBinaryConditionalExpression.ElseExpression) 622Dim left As IOperation = CreateBoundBinaryOperatorChild(boundUserDefinedShortCircuitingOperator, isLeft:=True) 623Dim right As IOperation = CreateBoundBinaryOperatorChild(boundUserDefinedShortCircuitingOperator, isLeft:=False) 656Dim children = CreateFromArray(Of BoundExpression, IOperation)(boundBadExpression.ChildBoundNodes) 671Dim children As ImmutableArray(Of IOperation) = ImmutableArray(Of IOperation).Empty 685Dim namedArguments = CreateFromArray(Of BoundExpression, IOperation)(boundAttribute.NamedArguments) 693Private Function CreateBoundTryCastOperation(boundTryCast As BoundTryCast) As IOperation 697Private Function CreateBoundDirectCastOperation(boundDirectCast As BoundDirectCast) As IOperation 701Private Function CreateBoundConversionOperation(boundConversion As BoundConversion) As IOperation 719Private Function CreateBoundConversionOrCastOperation(boundConversionOrCast As BoundConversionOrCast, isTryCast As Boolean) As IOperation 749Dim target As IOperation = CreateBoundDelegateCreationExpressionChildOperation(boundDelegateCreationExpression) 765Dim receiverOpt As IOperation = CreateReceiverOperation( 778Dim condition As IOperation = Create(boundTernaryConditionalExpression.Condition) 779Dim whenTrue As IOperation = Create(boundTernaryConditionalExpression.WhenTrue) 780Dim whenFalse As IOperation = Create(boundTernaryConditionalExpression.WhenFalse) 807Private Function CreateBoundLateInvocationOperation(boundLateInvocation As BoundLateInvocation) As IOperation 808Dim operation As IOperation = Create(boundLateInvocation.Member) 809Dim arguments As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundLateInvocation.ArgumentsOpt) 832Dim initializers As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundObjectInitializerExpression.Initializers) 840Dim initializers As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundCollectionInitializerExpression.Initializers) 864Dim dimensionSizes As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundArrayCreation.Bounds) 873Dim elementValues As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundArrayInitialization.Initializers) 881Dim instance As IOperation = CreateReceiverOperation( 910Dim instance As IOperation = CreateReceiverOperation(boundEventAccess.ReceiverOpt, [event]) 921Dim instance As IOperation = CreateReceiverOperation(boundFieldAccess.ReceiverOpt, field) 932Dim operation As IOperation = Create(boundConditionalAccess.Receiver) 933Dim whenNotNull As IOperation = Create(boundConditionalAccess.AccessExpression) 955Private Function CreateBoundLocalOperation(boundLocal As BoundLocal) As IOperation 968Dim instance As IOperation = Create(boundLateMemberAccess.ReceiverOpt) 992Dim value As IOperation = Create(boundFieldInitializer.InitialValue) 1000Dim value As IOperation = Create(boundPropertyInitializer.InitialValue) 1008Dim value As IOperation = Create(boundParameterEqualsValue.Value) 1014Private Function CreateBoundLValueToRValueWrapper(boundNode As BoundLValueToRValueWrapper) As IOperation 1021Private Function CreateBoundRValuePlaceholderOperation(boundRValuePlaceholder As BoundRValuePlaceholder) As IOperation 1061Dim condition As IOperation = Create(boundIfStatement.Condition) 1062Dim whenTrue As IOperation = Create(boundIfStatement.Consequence) 1063Dim whenFalse As IOperation = Create(boundIfStatement.AlternativeOpt) 1074Dim value As IOperation = Create(boundSelectStatement.ExpressionStatement.Expression) 1098Friend Function CreateBoundCaseBlockBody(boundCaseBlock As BoundCaseBlock) As ImmutableArray(Of IOperation) 1102Friend Function CreateBoundCaseBlockCondition(boundCaseBlock As BoundCaseBlock) As IOperation 1108Dim body As ImmutableArray(Of IOperation) = ImmutableArray.Create(Create(boundCaseBlock.Body)) 1109Dim condition As IOperation = CreateBoundCaseBlockCondition(boundCaseBlock) 1117Dim clauseValue As IOperation = Create(GetSingleValueCaseClauseValue(boundSimpleCaseClause)) 1124Dim minimumValue As IOperation = Create(GetCaseClauseValue(boundRangeCaseClause.LowerBoundOpt, boundRangeCaseClause.LowerBoundConditionOpt)) 1125Dim maximumValue As IOperation = Create(GetCaseClauseValue(boundRangeCaseClause.UpperBoundOpt, boundRangeCaseClause.UpperBoundConditionOpt)) 1133Dim valueExpression As IOperation = Create(GetSingleValueCaseClauseValue(boundRelationalCaseClause)) 1141Dim condition As IOperation = Create(boundDoLoopStatement.ConditionOpt) 1142Dim body As IOperation = Create(boundDoLoopStatement.Body) 1143Dim ignoredCondition As IOperation = If(boundDoLoopStatement.TopConditionOpt IsNot Nothing AndAlso boundDoLoopStatement.BottomConditionOpt IsNot Nothing, 1156Dim loopControlVariable As IOperation = CreateBoundControlVariableOperation(boundForToStatement) 1157Dim initialValue As IOperation = Create(boundForToStatement.InitialValue) 1158Dim limitValue As IOperation = Create(boundForToStatement.LimitValue) 1159Dim stepValue As IOperation = Create(boundForToStatement.StepValue) 1160Dim body As IOperation = Create(boundForToStatement.Body) 1161Dim nextVariables As ImmutableArray(Of IOperation) = If(boundForToStatement.NextVariablesOpt.IsDefault, 1162ImmutableArray(Of IOperation).Empty, 1163CreateFromArray(Of BoundExpression, IOperation)(boundForToStatement.NextVariablesOpt)) 1239Dim controlVariable As IOperation = CreateBoundControlVariableOperation(boundForEachStatement) 1240Dim collection As IOperation = Create(boundForEachStatement.Collection) 1242ImmutableArray(Of IOperation).Empty, 1243CreateFromArray(Of BoundExpression, IOperation)(boundForEachStatement.NextVariablesOpt)) 1244Dim body As IOperation = Create(boundForEachStatement.Body) 1255Friend Function CreateBoundControlVariableOperation(boundForStatement As BoundForStatement) As IOperation 1259New VariableDeclaratorOperation(localOpt, initializer:=Nothing, ignoredArguments:=ImmutableArray(Of IOperation).Empty, semanticModel:=_semanticModel, syntax:=controlVariable.Syntax, isImplicit:=boundForStatement.WasCompilerGenerated), 1273Friend Function CreateBoundCatchBlockExceptionDeclarationOrExpression(boundCatchBlock As BoundCatchBlock) As IOperation 1277Return New VariableDeclaratorOperation(boundCatchBlock.LocalOpt, initializer:=Nothing, ignoredArguments:=ImmutableArray(Of IOperation).Empty, semanticModel:=_semanticModel, syntax:=boundCatchBlock.ExceptionSourceOpt.Syntax, isImplicit:=False) 1284Dim exceptionDeclarationOrExpression As IOperation = CreateBoundCatchBlockExceptionDeclarationOrExpression(boundCatchBlock) 1285Dim filter As IOperation = Create(boundCatchBlock.ExceptionFilterOpt) 1297Dim operations As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundStatement, IOperation)(boundBlock.Statements) 1318Dim children = CreateFromArray(Of BoundNode, IOperation)(boundBadStatement.ChildBoundNodes) 1324Dim returnedValue As IOperation = Create(boundReturnStatement.ExpressionOpt) 1336Dim thrownObject As IOperation = Create(boundThrowStatement.ExpressionOpt) 1344Dim condition As IOperation = Create(boundWhileStatement.Condition) 1345Dim body As IOperation = Create(boundWhileStatement.Body) 1346Dim ignoredCondition As IOperation = Nothing 1374Dim returnedValue As IOperation = Create(boundYieldStatement.Expression) 1382Dim statement As IOperation = Nothing 1420Dim lockedValue As IOperation = Create(boundSyncLockStatement.LockExpression) 1421Dim body As IOperation = Create(boundSyncLockStatement.Body) 1448Dim value As IOperation = Create(boundWithStatement.OriginalExpression) 1449Dim body As IOperation = Create(boundWithStatement.Body) 1455Friend Function CreateBoundUsingStatementResources(boundUsingStatement As BoundUsingStatement) As IOperation 1464Dim resources As IOperation = CreateBoundUsingStatementResources(boundUsingStatement) 1465Dim body As IOperation = Create(boundUsingStatement.Body) 1473Dim expression As IOperation = Create(boundExpressionStatement.Expression) 1508Private Function CreateBoundRaiseEventStatementOperation(boundRaiseEventStatement As BoundRaiseEventStatement) As IOperation 1518Dim children = CreateFromArray(Of BoundNode, IOperation)(DirectCast(boundRaiseEventStatement, IBoundInvalidNode).InvalidNodeChildren) 1529Dim expression As IOperation = GetAddRemoveHandlerStatementExpression(boundAddHandlerStatement) 1536Dim expression As IOperation = GetAddRemoveHandlerStatementExpression(boundRemoveHandlerStatement) 1553Dim elements As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundTupleExpression.Arguments) 1582Dim expression As IOperation = Create(boundInterpolation.Expression) 1583Dim alignment As IOperation = Create(boundInterpolation.AlignmentOpt) 1584Dim formatString As IOperation = Create(boundInterpolation.FormatStringOpt) 1591Dim text As IOperation = CreateBoundLiteralOperation(boundLiteral, implicit:=True) 1598Dim initializers As ImmutableArray(Of IOperation) = GetAnonymousTypeCreationInitializers(boundAnonymousTypeCreationExpression) 1611Dim instance As IOperation = CreateAnonymousTypePropertyAccessImplicitReceiverOperation([property], boundAnonymousTypePropertyAccess.Syntax.FirstAncestorOrSelf(Of AnonymousObjectCreationExpressionSyntax)) 1630Private Function CreateBoundQueryExpressionOperation(boundQueryExpression As BoundQueryExpression) As IOperation 1631Dim operation As IOperation = Create(boundQueryExpression.LastOperator) 1638Private Function CreateBoundAggregateClauseOperation(boundAggregateClause As BoundAggregateClause) As IOperation 1647Dim group As IOperation = Create(boundAggregateClause.CapturedGroupOpt) 1648Dim aggregation As IOperation = Create(boundAggregateClause.UnderlyingExpression) 1655Private Function CreateBoundNullableIsTrueOperator(boundNullableIsTrueOperator As BoundNullableIsTrueOperator) As IOperation 1667Dim receiver As IOperation = CreateReceiverOperation(boundNullableIsTrueOperator.Operand, method) 1677Dim children = CreateFromArray(Of BoundNode, IOperation)(DirectCast(boundNullableIsTrueOperator, IBoundInvalidNode).InvalidNodeChildren) 1696Dim operand As IOperation = Create(boundRedimClause.Operand) 1697Dim dimensionSizes As ImmutableArray(Of IOperation) = CreateFromArray(Of BoundExpression, IOperation)(boundRedimClause.Indices)
Operations\VisualBasicOperationFactory_Methods.vb (22)
26Friend Function CreateCompoundAssignmentRightOperand(boundAssignment As BoundAssignmentOperator) As IOperation 88Dim target As IOperation = Create(boundAssignment.Left) 89Dim value As IOperation = CreateCompoundAssignmentRightOperand(boundAssignment) 147Private Function GetUserDefinedBinaryOperatorChild([operator] As BoundUserDefinedBinaryOperator, child As BoundExpression) As IOperation 152Return OperationFactory.CreateInvalidOperation(_semanticModel, [operator].UnderlyingExpression.Syntax, ImmutableArray(Of IOperation).Empty, isImplicit) 275Friend Function CreateReceiverOperation(node As BoundNode, symbol As ISymbol) As IOperation 292Private Function GetChildOfBadExpression(parent As BoundNode, index As Integer) As IOperation 298Return OperationFactory.CreateInvalidOperation(_semanticModel, parent.Syntax, ImmutableArray(Of IOperation).Empty, isImplicit) 310Friend Function GetAnonymousTypeCreationInitializers(expression As BoundAnonymousTypeCreationExpression) As ImmutableArray(Of IOperation) 317Dim builder = ArrayBuilder(Of IOperation).GetInstance(expression.Arguments.Length) 321Dim value As IOperation = Create(expression.Arguments(i)) 323Dim target As IOperation 438Dim initializerValue As IOperation = Create(asNewDeclarations.Initializer) 446ImmutableArray(Of IOperation).Empty, 459Dim initializerValue As IOperation = Create(boundLocalDeclaration.IdentifierInitializerOpt) 463Dim ignoredArguments = ImmutableArray(Of IOperation).Empty 476Friend Function GetAddRemoveHandlerStatementExpression(statement As BoundAddRemoveHandlerStatement) As IOperation 477Dim eventReference As IOperation = Create(statement.EventAccess) 478Dim handlerValue As IOperation = Create(statement.Handler) 490) As (Operation As IOperation, Conversion As Conversion, IsDelegateCreation As Boolean) 510) As (Operation As IOperation, Conversion As Conversion, IsDelegateCreation As Boolean) 560Private Function CreateDelegateCreationConversionOperand(operand As BoundExpression) As IOperation
Microsoft.CodeAnalysis.Workspaces (165)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
Microsoft.Extensions.Validation.ValidationsGenerator (6)
Parsers\ValidationsGenerator.EndpointsParser.cs (1)
35var operation = context.SemanticModel.GetOperation(node, cancellationToken);
src\Http\Http.Extensions\gen\Microsoft.AspNetCore.Http.RequestDelegateGenerator\StaticRouteHandlerModel\InvocationOperationExtensions.cs (5)
26public static bool IsValidOperation(this IOperation? operation, WellKnownTypes wellKnownTypes, [NotNullWhen(true)] out IInvocationOperation? invocationOperation) 83private static IMethodSymbol? ResolveMethodFromOperation(IOperation operation, SemanticModel semanticModel) => operation switch 88IFieldReferenceOperation { Field.IsReadOnly: true } f when ResolveDeclarationOperation(f.Field, semanticModel) is IOperation op => 97private static IOperation? ResolveDeclarationOperation(ISymbol symbol, SemanticModel? semanticModel) 113var operation = targetSemanticModel?.GetOperation(expr);
Microsoft.Interop.ComInterfaceGenerator (4)
Analyzers\RuntimeComApiUsageWithSourceGeneratedComAnalyzer.cs (3)
145IOperation operand = operation.Operand; 173IOperation operand = operation.Operand; 203IOperation op => (op.Type, op.Syntax.GetLocation())
src\libraries\System.Runtime.InteropServices\gen\Common\OperationExtensions.cs (1)
45public static bool IsNullLiteralOperation(this IOperation operation)
Microsoft.Interop.LibraryImportGenerator (1)
src\libraries\System.Runtime.InteropServices\gen\Common\OperationExtensions.cs (1)
45public static bool IsNullLiteralOperation(this IOperation operation)
Microsoft.Interop.LibraryImportGenerator.Downlevel (1)
src\libraries\System.Runtime.InteropServices\gen\Common\OperationExtensions.cs (1)
45public static bool IsNullLiteralOperation(this IOperation operation)
Microsoft.VisualStudio.LanguageServices (1)
PullMemberUp\SymbolDependentsBuilder.cs (1)
69public override void Visit(IOperation operation)
Roslyn.Diagnostics.Analyzers (242)
AbstractDoNotCopyValue.cs (25)
175foreach (var operation in context.OperationBlocks) 361private readonly HashSet<IOperation> _handledOperations = []; 371protected abstract bool CheckForEachGetEnumerator(IForEachLoopOperation operation, [DisallowNull] ref IConversionOperation? conversion, [DisallowNull] ref IOperation? instance); 398var value = operation.Value; 508var handledWhenTrue = currentIsHandled ? operation.WhenTrue : null; 509var handledWhenFalse = currentIsHandled ? operation.WhenFalse : null; 761var instance2 = (operation.Collection as IConversionOperation)?.Operand; 860var instance = operation.Instance; 1028var instance = operation.Instance; 1096var returnedValue = operation.ReturnedValue; 1121var target = operation.Target; 1122var value = operation.Value; 1264var resource = operation.Resources; 1361protected RefKind Acquire(IOperation? operation) 1463private void CheckEventSymbolInUnsupportedContext(IOperation operation, IEventSymbol? @event) 1474private void CheckFieldSymbolInUnsupportedContext(IOperation operation, IFieldSymbol? field) 1482private void CheckPropertySymbolInUnsupportedContext(IOperation operation, IPropertySymbol? property) 1497private void CheckSymbolInUnsupportedContext(IOperation operation, ISymbol? symbol) 1559private void CheckTypeSymbolInUnsupportedContext(IOperation operation, ITypeSymbol? type) 1577private void CheckParameterSymbolInUnsupportedContext(IOperation operation, IParameterSymbol? parameter) 1585private void CheckTypeParameterSymbolInUnsupportedContext(IOperation operation, ITypeParameterSymbol? typeParameter) 1596private void CheckConversionInUnsupportedContext(IOperation operation, CommonConversion conversion) 1601private void CheckLocalSymbolInUnsupportedContext(IOperation operation, ILocalSymbol? local) 1609protected void CheckMethodSymbolInUnsupportedContext(IOperation operation, IMethodSymbol? symbol) 1638private void CheckTypeInUnsupportedContext(IOperation operation)
NamedTypeFullNameNotNullSuppressor.cs (1)
49var operation = semanticModel.GetOperation(node, context.CancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)
TemporaryArrayAsRefAnalyzer.cs (2)
62var instance = invocation.Instance ?? invocation.Arguments.FirstOrDefault()?.Value; 69var declaration = invocation.SemanticModel!.GetOperation(localReference.Local.DeclaringSyntaxReferences.Single().GetSyntax(context.CancellationToken), context.CancellationToken);
Roslyn.Diagnostics.CSharp.Analyzers (14)
CSharpDoNotCapturePrimaryContructorParameters.cs (1)
48IOperation rootOperation = operation;
CSharpDoNotCopyValue.cs (1)
33protected override bool CheckForEachGetEnumerator(IForEachLoopOperation operation, [DisallowNull] ref IConversionOperation? conversion, [DisallowNull] ref IOperation? instance)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\CSharp\Simplification\Simplifiers\CastSimplifier.cs (11)
88var castExpressionOperation = semanticModel.GetOperation(cast.Expression, cancellationToken); 96var current = castExpressionOperation.Parent.Parent; 204var originalOperation = originalSemanticModel.GetOperation(castNode, cancellationToken); 263var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenExpression.WalkDownParentheses(), cancellationToken); 805var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenBitwiseNotExpression, cancellationToken); 958var rewrittenOperation = rewrittenSemanticModel.GetOperation(rewrittenConditionalOrSwitchExpression, cancellationToken); 1048var operation = semanticModel.GetOperation(parentBinary, cancellationToken); 1071private static bool ConvertedHasUserDefinedEquals(BinaryOperatorKind operatorKind, IOperation operation) 1110private static bool IsConstantNull(IOperation operation) 1245var operation = semanticModel.GetOperation(expression.WalkDownParentheses(), cancellationToken); 1540var operation = semanticModel.GetOperation(expression, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\CSharp\LanguageServices\InitializeParameter\CSharpInitializeParameterService.cs (1)
102foreach (var operation in blockOperation.Operations)
System.Private.CoreLib.Generators (3)
IntrinsicsInSystemPrivateCoreLibAnalyzer.cs (3)
190private static ISymbol? GetOperationSymbol(IOperation operation) 451private static void AnalyzeOperation(IOperation operation, IMethodSymbol methodSymbol, OperationAnalysisContext context, IntrinsicsAnalyzerOnLoadData onLoadData) 490IOperation operationSearch = operation;
System.Text.RegularExpressions.Generator (3)
UpgradeToGeneratedRegexCodeFixer.cs (3)
100semanticModel.GetOperation(nodeToFix, cancellationToken) is not IOperation operation || 183semanticModel.GetOperation(nodeToFix, cancellationToken) is not IOperation operation || 233semanticModel.GetOperation(nodeToFix, cancellationToken) is not IOperation operation ||
Test.Utilities (174)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
Text.Analyzers (214)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\CodeAnalysisMetricData.cs (1)
88/// The count is based on the executable <see cref="IOperation"/>s in code and is therefore not the exact number of lines in the source code file.
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\ComputationalComplexityMetrics.cs (7)
87public static ComputationalComplexityMetrics Compute(IOperation operationBlock) 108foreach (var operation in operationBlock.Descendants()) 296static int getExecutableLinesOfCode(IOperation operation, ref bool hasSymbolInitializer) 325static bool hasAnyExplicitExpression(IOperation operation) 331void countOperator(IOperation operation) 348void countBinaryOperator(IOperation operation, BinaryOperatorKind operatorKind) 355void countUnaryOperator(IOperation operation, UnaryOperatorKind operatorKind)
src\RoslynAnalyzers\Utilities\Compiler\CodeMetrics\MetricsHelper.cs (3)
257var operationBlock = model.GetOperation(node, context.CancellationToken); 282foreach (var operation in operationBlock.DescendantsAndSelf()) 324static bool hasConditionalLogic(IOperation operation)
src\RoslynAnalyzers\Utilities\Compiler\DoNotCatchGeneralUnlessRethrown.cs (1)
75foreach (var operation in operationBlockAnalysisContext.OperationBlocks)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\DiagnosticExtensions.cs (3)
46this IOperation operation, 52this IOperation operation, 61this IOperation operation,
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IMethodSymbolExtensions.cs (1)
453var operation = semanticModel.GetOperation(descendant, cancellationToken);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (33)
61public static bool HasNullConstantValue(this IOperation operation) 66public static bool TryGetBoolConstantValue(this IOperation operation, out bool constantValue) 83public static ImmutableArray<IOperation> GetTopmostExplicitDescendants(this IOperation operation) 90var builder = ImmutableArray.CreateBuilder<IOperation>(); 91var operationsToProcess = new Queue<IOperation>(); 104foreach (var child in operation.Children) 120public static bool IsOperationNoneRoot(this IOperation operation) 131public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null) 132where TOperation : class, IOperation 139var ancestor = root; 166public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null) 173var ancestor = root; 208public static IOperation? GetInstance(this IInstanceReferenceOperation operation, bool isInsideAnonymousObjectInitializer) 215for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent) 258public static IOperation GetRoot(this IOperation operation) 273private static readonly BoundedCache<Compilation, ConcurrentDictionary<IOperation, ControlFlowGraph?>> s_operationToCfgCache 276public static bool TryGetEnclosingControlFlowGraph(this IOperation operation, [NotNullWhen(returnValue: true)] out ControlFlowGraph? cfg) 293private static ControlFlowGraph? CreateControlFlowGraph(IOperation operation) 331this IOperation operation, IMethodSymbol lambdaOrLocalFunction, out PooledHashSet<ISymbol> builder) 342foreach (var child in operation.Descendants()) 384public static bool IsWithinLambdaOrLocalFunction(this IOperation operation, [NotNullWhen(true)] out IOperation? containingLambdaOrLocalFunctionOperation) 410[NotNullWhen(returnValue: true)] out IOperation? elementOfParentTupleContainingTuple) 415IOperation previousOperation = tupleOperation; 416var currentOperation = tupleOperation.Parent; 448public static IOperation? GetInstance(this IInvocationOperation invocationOperation) 451public static IOperation? GetThrownException(this IThrowOperation operation) 453var thrownObject = operation.Exception; 477IOperation potentialLeftSide = operation;
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\AnalysisContextExtensions.cs (2)
185public static SyntaxNode GetAnalysisRoot(this OperationBlockStartAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false) 191public static SyntaxNode GetAnalysisRoot(this OperationBlockAnalysisContext context, IOperation operationBlock, bool findInTrivia, bool getInnermostNodeForTie = false)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\BasicBlockExtensions.cs (4)
12public static IEnumerable<IOperation> DescendantOperations(this BasicBlock basicBlock) 14foreach (var statement in basicBlock.Operations) 16foreach (var operation in statement.DescendantsAndSelf()) 24foreach (var operation in basicBlock.BranchValue.DescendantsAndSelf())
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\ControlFlowGraphExtensions.cs (2)
27public static IEnumerable<IOperation> DescendantOperations(this ControlFlowGraph cfg) 31where T : IOperation
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\OperationExtensions.cs (32)
18public static bool IsTargetOfObjectMemberInitializer(this IOperation operation) 34public static ValueUsageInfo GetValueUsageInfo(this IOperation operation, ISymbol containingSymbol) 239public static IMethodSymbol? TryGetContainingAnonymousFunctionOrLocalFunction(this IOperation? operation) 259public static bool IsInLeftOfDeconstructionAssignment(this IOperation operation, [NotNullWhen(true)] out IDeconstructionAssignmentOperation? deconstructionAssignment) 263var previousOperation = operation; 264var current = operation.Parent; 295public static bool IsAnyCompoundAssignment(this IOperation operation) 308public static bool IsInsideCatchRegion(this IOperation operation, ControlFlowGraph cfg) 328foreach (var descendant in block.DescendantOperations()) 341public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, Func<IOperation, bool> predicate) 343foreach (var operationBlock in operationBlocks) 354public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate) 357public static bool HasAnyOperationDescendant(this IOperation operationBlock, Func<IOperation, bool> predicate, [NotNullWhen(true)] out IOperation? foundOperation) 361foreach (var descendant in operationBlock.DescendantsAndSelf()) 374public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind) 377public static bool IsNumericLiteral(this IOperation operation) 380public static bool IsNullLiteral(this IOperation operand) 389public static IOperation? WalkDownConversion(this IOperation? operation) 399public static bool IsSingleThrowNotImplementedOperation([NotNullWhen(true)] this IOperation? firstBlock) 415var firstOp = block.Operations.Length == 1 437static IOperation? TryGetSingleExplicitStatement(ImmutableArray<IOperation> operations) 439IOperation? firstOp = null; 440foreach (var operation in operations) 454static bool IsThrowNotImplementedOperation(INamedTypeSymbol notImplementedExceptionType, IOperation? operation) 461public static IOperation? UnwrapImplicitConversion(this IOperation? value)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticEquivalence.cs (3)
86var originalOperation = semanticModel1.GetOperation(node1); 89var currentOperation = semanticModel2.GetOperation(node2); 125private static bool IsInstanceMemberReference(IOperation operation)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SemanticModelExtensions.cs (1)
54public static IOperation GetRequiredOperation(this SemanticModel semanticModel, SyntaxNode node, CancellationToken cancellationToken)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\Extensions\SymbolUsageInfo.cs (2)
138var operation = semanticModel.GetOperation(node, cancellationToken); 200var operation = semanticModel.GetOperation(node, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.AnalysisData.cs (14)
61protected abstract PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 132public abstract void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId); 137public abstract void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol); 138public abstract void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget); 139public abstract void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget); 140public abstract void SetEmptyInvocationTargetsForDelegate(IOperation write); 141public abstract bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets); 143protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> CreateSymbolsWriteMap( 146var symbolsWriteMap = PooledDictionary<(ISymbol Symbol, IOperation Write), bool>.GetInstance(); 150protected static PooledDictionary<(ISymbol Symbol, IOperation Write), bool> UpdateSymbolsWriteMap( 151PooledDictionary<(ISymbol Symbol, IOperation Write), bool> symbolsWriteMap, 158(ISymbol, IOperation) key = (parameter, null); 201public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten, bool isRef)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.BasicBlockAnalysisData.cs (9)
28private readonly Dictionary<ISymbol, PooledHashSet<IOperation>> _reachingWrites; 74public void ForEachCurrentWrite<TArg>(ISymbol symbol, Action<IOperation, TArg> action, TArg arg) 86public bool ForEachCurrentWrite<TArg>(ISymbol symbol, Func<IOperation, TArg, bool> action, TArg arg) 90foreach (var value in values) 104public void OnWriteReferenceFound(ISymbol symbol, IOperation operation, bool maybeWritten) 108values = PooledHashSet<IOperation>.GetInstance(); 223private static void AddEntries(Dictionary<ISymbol, PooledHashSet<IOperation>> result, BasicBlockAnalysisData source) 231values = PooledHashSet<IOperation>.GetInstance(); 240foreach (var operation in operations)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.cs (2)
33public static SymbolUsageResult Run(IOperation rootOperation, ISymbol owningSymbol, CancellationToken cancellationToken) 46var localFunctionOperation = rootOperation.Descendants()
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.DataFlowAnalyzer.FlowGraphAnalysisData.cs (33)
41private readonly PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>> _lValueFlowCapturesMap; 48private readonly PooledDictionary<IOperation, PooledHashSet<IOperation>> _reachingDelegateCreationTargets; 69private readonly PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>> _symbolWritesInsideBlockRangeMap; 77PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 81PooledDictionary<IOperation, PooledHashSet<IOperation>> reachingDelegateCreationTargets, 99_lValueFlowCapturesMap = PooledDictionary<CaptureId, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 103_symbolWritesInsideBlockRangeMap = PooledDictionary<(int firstBlockOrdinal, int lastBlockOrdinal), PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 110protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 135reachingDelegateCreationTargets: PooledDictionary<IOperation, PooledHashSet<IOperation>>.GetInstance(), 205foreach (var operation in cfg.OriginalOperation.Descendants()) 231private PooledHashSet<(ISymbol, IOperation)> GetOrCreateSymbolWritesInBlockRange(int firstBlockOrdinal, int lastBlockOrdinal, CancellationToken cancellationToken) 236var operations = PooledHashSet<IOperation>.GetInstance(); 240writesInBlockRange = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 257PooledHashSet<IOperation> operationsBuilder, 264foreach (var operation in cfg.Blocks[i].DescendantOperations()) 289void AddDescendantOperationsFromDelegateCreationTargets(PooledHashSet<IOperation> targets) 291foreach (var target in targets) 478public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 482captures = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 530public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 538var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 560foreach (var target in targetsBuilderForSymbolWrite) 577public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 587public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 599public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 602private void SetReachingDelegateTargetCore(IOperation write, IOperation targetOpt) 604var targetsBuilder = PooledHashSet<IOperation>.GetInstance(); 613public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.OperationTreeAnalysisData.cs (9)
21PooledDictionary<(ISymbol symbol, IOperation operation), bool> symbolsWriteMap, 34protected override PooledDictionary<(ISymbol symbol, IOperation operation), bool> SymbolsWriteBuilder { get; } 63public override void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 69public override void SetLambdaTargetForDelegate(IOperation write, IFlowAnonymousFunctionOperation lambdaTarget) 71public override void SetLocalFunctionTargetForDelegate(IOperation write, IMethodReferenceOperation localFunctionTarget) 73public override void SetEmptyInvocationTargetsForDelegate(IOperation write) 75public override void SetTargetsFromSymbolForDelegate(IOperation write, ISymbol symbol) 77public override bool TryGetDelegateInvocationTargets(IOperation write, out ImmutableHashSet<IOperation> targets)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageAnalysis.Walker.cs (20)
27private IOperation _currentRootOperation; 29private PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>> _pendingWritesMap; 36IEnumerable<IOperation> operations, 51private void Visit(ISymbol containingSymbol, IEnumerable<IOperation> operations, AnalysisData analysisData, CancellationToken cancellationToken) 58_pendingWritesMap = PooledDictionary<IAssignmentOperation, PooledHashSet<(ISymbol, IOperation)>>.GetInstance(); 65foreach (var operation in operations) 93private void OnWriteReferenceFound(ISymbol symbol, IOperation operation, ValueUsageInfo valueUsageInfo) 101private void OnLValueCaptureFound(ISymbol symbol, IOperation operation, CaptureId captureId) 107private void OnReferenceFound(ISymbol symbol, IOperation operation) 159private bool MakePendingWrite(IOperation operation, ISymbol symbolOpt) 166var set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 175set = PooledHashSet<(ISymbol, IOperation)>.GetInstance(); 407private void ProcessPossibleDelegateCreationAssignment(ISymbol symbol, IOperation write) 415IOperation initializerValue = null; 431private void ProcessPossibleDelegateCreation(IOperation creation, IOperation write) 433var currentOperation = creation; 497private void AnalyzePossibleDelegateInvocation(IOperation operation) 534foreach (var target in targets) 549void AnalyzeDelegateInvocation(IOperation target)
src\Workspaces\SharedUtilitiesAndExtensions\Compiler\Core\FlowAnalysis\SymbolUsageAnalysis\SymbolUsageResult.cs (3)
13ImmutableDictionary<(ISymbol symbol, IOperation write), bool> symbolWritesMap, 33public ImmutableDictionary<(ISymbol symbol, IOperation write), bool> SymbolWritesMap { get; } = symbolWritesMap; 47public ImmutableArray<(ISymbol Symbol, IOperation WriteOperation)> GetUnreadSymbolWrites()
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Extensions\SyntaxGeneratorExtensions_Negate.cs (8)
146var operation = semanticModel.GetOperation(expressionNode, cancellationToken); 271var operation = semanticModel.GetOperation(isExpression, cancellationToken); 413var rightOperand = RemoveImplicitConversion(binaryOperation.RightOperand); 414var leftOperand = RemoveImplicitConversion(binaryOperation.LeftOperand); 426private static IOperation RemoveImplicitConversion(IOperation operation) 434IOperation variableExpression, ILiteralOperation numericLiteralExpression) 475var operation = semanticModel.GetOperation(expression);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\AbstractInitializerParameterService.cs (3)
57var operation = semanticModel.GetOperation( 171var statement = TryFindFieldOrPropertyAssignmentStatement(sibling, blockStatement); 211var operation = semanticModel.GetOperation(accessorBody, cancellationToken);
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\LanguageServices\InitializeParameter\InitializeParameterHelpersCore.cs (11)
38public static bool IsParameterReference(IOperation? operation, IParameterSymbol parameter) 43IOperation? value, IParameterSymbol parameter) 76public static IOperation? TryFindFieldOrPropertyAssignmentStatement(IParameterSymbol parameter, IBlockOperation? blockStatement) 79private static IOperation? TryFindFieldOrPropertyAssignmentStatement( 85foreach (var statement in blockStatement.Operations) 99var target = targetTuple.Elements[i]; 100var value = valueTuple.Elements[i]; 117IOperation operation, 146IOperation? operation, INamedTypeSymbol containingType, 163public static bool IsFieldOrPropertyAssignment(IOperation statement, INamedTypeSymbol containingType, [NotNullWhen(true)] out IAssignmentOperation? assignmentExpression) 167IOperation statement, INamedTypeSymbol containingType,
src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\Utilities\NullableHelpers.cs (7)
30var declaredOperation = semanticModel.GetRequiredOperation(declarationSyntax, cancellationToken); 32var rootOperation = declaredOperation; 54IOperation rootOperation, 62using var _ = ArrayBuilder<IOperation>.GetInstance(out var stack); 65while (stack.TryPop(out var operation)) 128foreach (var childOperation in operation.ChildOperations.Reverse()) 142bool IsSymbolReferencedByOperation(IOperation operation)