2717 references to OperationKind
Aspire.Hosting.Analyzers (1)
ILLink.RoslynAnalyzer (23)
Metrics (127)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Metrics.Legacy (127)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Microsoft.Analyzers.Extra (24)
Microsoft.Analyzers.Local (4)
Microsoft.AspNetCore.Analyzers (3)
Microsoft.AspNetCore.App.Analyzers (12)
Microsoft.AspNetCore.Components.Analyzers (12)
Microsoft.AspNetCore.Components.SdkAnalyzers (12)
Microsoft.AspNetCore.Mvc.Analyzers (6)
Microsoft.AspNetCore.Mvc.Api.Analyzers (11)
Microsoft.CodeAnalysis (529)
Generated\Operations.Generated.cs (376)
31/// <item><description><see cref="OperationKind.Invalid"/></description></item>
52/// <item><description><see cref="OperationKind.Block"/></description></item>
85/// <item><description><see cref="OperationKind.VariableDeclarationGroup"/></description></item>
113/// <item><description><see cref="OperationKind.Switch"/></description></item>
334/// <item><description><see cref="OperationKind.Labeled"/></description></item>
363/// <item><description><see cref="OperationKind.Branch"/></description></item>
391/// <item><description><see cref="OperationKind.Empty"/></description></item>
412/// <item><description><see cref="OperationKind.Return"/></description></item>
413/// <item><description><see cref="OperationKind.YieldBreak"/></description></item>
414/// <item><description><see cref="OperationKind.YieldReturn"/></description></item>
439/// <item><description><see cref="OperationKind.Lock"/></description></item>
468/// <item><description><see cref="OperationKind.Try"/></description></item>
505/// <item><description><see cref="OperationKind.Using"/></description></item>
543/// <item><description><see cref="OperationKind.ExpressionStatement"/></description></item>
567/// <item><description><see cref="OperationKind.LocalFunction"/></description></item>
605/// <item><description><see cref="OperationKind.Stop"/></description></item>
625/// <item><description><see cref="OperationKind.End"/></description></item>
645/// <item><description><see cref="OperationKind.RaiseEvent"/></description></item>
678/// <item><description><see cref="OperationKind.Literal"/></description></item>
699/// <item><description><see cref="OperationKind.Conversion"/></description></item>
766/// <item><description><see cref="OperationKind.Invocation"/></description></item>
812/// <item><description><see cref="OperationKind.ArrayElementReference"/></description></item>
841/// <item><description><see cref="OperationKind.LocalReference"/></description></item>
871/// <item><description><see cref="OperationKind.ParameterReference"/></description></item>
926/// <item><description><see cref="OperationKind.FieldReference"/></description></item>
959/// <item><description><see cref="OperationKind.MethodReference"/></description></item>
988/// <item><description><see cref="OperationKind.PropertyReference"/></description></item>
1021/// <item><description><see cref="OperationKind.EventReference"/></description></item>
1046/// <item><description><see cref="OperationKind.Unary"/></description></item>
1047/// <item><description><see cref="OperationKind.UnaryOperator"/></description></item>
1096/// <item><description><see cref="OperationKind.Binary"/></description></item>
1097/// <item><description><see cref="OperationKind.BinaryOperator"/></description></item>
1160/// <item><description><see cref="OperationKind.Conditional"/></description></item>
1204/// <item><description><see cref="OperationKind.Coalesce"/></description></item>
1240/// <item><description><see cref="OperationKind.AnonymousFunction"/></description></item>
1269/// <item><description><see cref="OperationKind.ObjectCreation"/></description></item>
1306/// <item><description><see cref="OperationKind.TypeParameterObjectCreation"/></description></item>
1331/// <item><description><see cref="OperationKind.ArrayCreation"/></description></item>
1362/// <item><description><see cref="OperationKind.InstanceReference"/></description></item>
1387/// <item><description><see cref="OperationKind.IsType"/></description></item>
1422/// <item><description><see cref="OperationKind.Await"/></description></item>
1472/// <item><description><see cref="OperationKind.SimpleAssignment"/></description></item>
1497/// <item><description><see cref="OperationKind.CompoundAssignment"/></description></item>
1547/// <item><description><see cref="OperationKind.Parenthesized"/></description></item>
1572/// <item><description><see cref="OperationKind.EventAssignment"/></description></item>
1606/// <item><description><see cref="OperationKind.ConditionalAccess"/></description></item>
1637/// <item><description><see cref="OperationKind.ConditionalAccessInstance"/></description></item>
1656/// <item><description><see cref="OperationKind.InterpolatedString"/></description></item>
1681/// <item><description><see cref="OperationKind.AnonymousObjectCreation"/></description></item>
1714/// <item><description><see cref="OperationKind.ObjectOrCollectionInitializer"/></description></item>
1745/// <item><description><see cref="OperationKind.MemberInitializer"/></description></item>
1772/// <item><description><see cref="OperationKind.CollectionElementInitializer"/></description></item>
1797/// <item><description><see cref="OperationKind.NameOf"/></description></item>
1822/// <item><description><see cref="OperationKind.Tuple"/></description></item>
1853/// <item><description><see cref="OperationKind.DynamicObjectCreation"/></description></item>
1882/// <item><description><see cref="OperationKind.DynamicMemberReference"/></description></item>
1934/// <item><description><see cref="OperationKind.DynamicInvocation"/></description></item>
1962/// <item><description><see cref="OperationKind.DynamicIndexerAccess"/></description></item>
1996/// <item><description><see cref="OperationKind.TranslatedQuery"/></description></item>
2021/// <item><description><see cref="OperationKind.DelegateCreation"/></description></item>
2045/// <item><description><see cref="OperationKind.DefaultValue"/></description></item>
2066/// <item><description><see cref="OperationKind.TypeOf"/></description></item>
2090/// <item><description><see cref="OperationKind.SizeOf"/></description></item>
2114/// <item><description><see cref="OperationKind.AddressOf"/></description></item>
2138/// <item><description><see cref="OperationKind.IsPattern"/></description></item>
2155/// Represents an <see cref="OperationKind.Increment" /> or <see cref="OperationKind.Decrement" /> operation.
2168/// <item><description><see cref="OperationKind.Increment"/></description></item>
2169/// <item><description><see cref="OperationKind.Decrement"/></description></item>
2219/// <item><description><see cref="OperationKind.Throw"/></description></item>
2243/// <item><description><see cref="OperationKind.DeconstructionAssignment"/></description></item>
2272/// <item><description><see cref="OperationKind.DeclarationExpression"/></description></item>
2296/// <item><description><see cref="OperationKind.OmittedArgument"/></description></item>
2342/// <item><description><see cref="OperationKind.FieldInitializer"/></description></item>
2367/// <item><description><see cref="OperationKind.VariableInitializer"/></description></item>
2388/// <item><description><see cref="OperationKind.PropertyInitializer"/></description></item>
2413/// <item><description><see cref="OperationKind.ParameterInitializer"/></description></item>
2438/// <item><description><see cref="OperationKind.ArrayInitializer"/></description></item>
2467/// <item><description><see cref="OperationKind.VariableDeclarator"/></description></item>
2512/// <item><description><see cref="OperationKind.VariableDeclaration"/></description></item>
2553/// <item><description><see cref="OperationKind.Argument"/></description></item>
2594/// <item><description><see cref="OperationKind.CatchClause"/></description></item>
2639/// <item><description><see cref="OperationKind.SwitchCase"/></description></item>
2826/// <item><description><see cref="OperationKind.InterpolatedStringText"/></description></item>
2851/// <item><description><see cref="OperationKind.Interpolation"/></description></item>
2907/// <item><description><see cref="OperationKind.ConstantPattern"/></description></item>
2931/// <item><description><see cref="OperationKind.DeclarationPattern"/></description></item>
2965/// <item><description><see cref="OperationKind.TupleBinary"/></description></item>
2966/// <item><description><see cref="OperationKind.TupleBinaryOperator"/></description></item>
3022/// <item><description><see cref="OperationKind.MethodBody"/></description></item>
3023/// <item><description><see cref="OperationKind.MethodBodyOperation"/></description></item>
3043/// <item><description><see cref="OperationKind.ConstructorBody"/></description></item>
3044/// <item><description><see cref="OperationKind.ConstructorBodyOperation"/></description></item>
3072/// <item><description><see cref="OperationKind.Discard"/></description></item>
3101/// <item><description><see cref="OperationKind.CoalesceAssignment"/></description></item>
3121/// <item><description><see cref="OperationKind.Range"/></description></item>
3161/// <item><description><see cref="OperationKind.ReDim"/></description></item>
3189/// <item><description><see cref="OperationKind.ReDimClause"/></description></item>
3211/// <item><description><see cref="OperationKind.RecursivePattern"/></description></item>
3253/// <item><description><see cref="OperationKind.DiscardPattern"/></description></item>
3273/// <item><description><see cref="OperationKind.SwitchExpression"/></description></item>
3299/// <item><description><see cref="OperationKind.SwitchExpressionArm"/></description></item>
3330/// <item><description><see cref="OperationKind.PropertySubpattern"/></description></item>
3471/// <item><description><see cref="OperationKind.UsingDeclaration"/></description></item>
3499/// <item><description><see cref="OperationKind.NegatedPattern"/></description></item>
3523/// <item><description><see cref="OperationKind.BinaryPattern"/></description></item>
3555/// <item><description><see cref="OperationKind.TypePattern"/></description></item>
3579/// <item><description><see cref="OperationKind.RelationalPattern"/></description></item>
3607/// <item><description><see cref="OperationKind.With"/></description></item>
3633/// <item><description><see cref="OperationKind.InterpolatedStringHandlerCreation"/></description></item>
3674/// <item><description><see cref="OperationKind.InterpolatedStringAddition"/></description></item>
3698/// <item><description><see cref="OperationKind.InterpolatedStringAppendLiteral"/></description></item>
3699/// <item><description><see cref="OperationKind.InterpolatedStringAppendFormatted"/></description></item>
3700/// <item><description><see cref="OperationKind.InterpolatedStringAppendInvalid"/></description></item>
3719/// <item><description><see cref="OperationKind.InterpolatedStringHandlerArgumentPlaceholder"/></description></item>
3742/// <item><description><see cref="OperationKind.FunctionPointerInvocation"/></description></item>
3764/// <item><description><see cref="OperationKind.ListPattern"/></description></item>
3796/// <item><description><see cref="OperationKind.SlicePattern"/></description></item>
3824/// <item><description><see cref="OperationKind.ImplicitIndexerReference"/></description></item>
3860/// <item><description><see cref="OperationKind.Utf8String"/></description></item>
3885/// <item><description><see cref="OperationKind.Attribute"/></description></item>
3909/// <item><description><see cref="OperationKind.InlineArrayAccess"/></description></item>
3937/// <item><description><see cref="OperationKind.CollectionExpression"/></description></item>
3975/// <item><description><see cref="OperationKind.Spread"/></description></item>
4052public override OperationKind Kind => OperationKind.Block;
4107public override OperationKind Kind => OperationKind.VariableDeclarationGroup;
4177public override OperationKind Kind => OperationKind.Switch;
4283public override OperationKind Kind => OperationKind.Loop;
4375public override OperationKind Kind => OperationKind.Loop;
4487public override OperationKind Kind => OperationKind.Loop;
4511public override OperationKind Kind => OperationKind.Loop;
4564public override OperationKind Kind => OperationKind.Labeled;
4584public override OperationKind Kind => OperationKind.Branch;
4598public override OperationKind Kind => OperationKind.Empty;
4604internal ReturnOperation(IOperation? returnedValue, OperationKind kind, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit)
4650public override OperationKind Kind { get; }
4714public override OperationKind Kind => OperationKind.Lock;
4793public override OperationKind Kind => OperationKind.Try;
4861public override OperationKind Kind => OperationKind.Using;
4912public override OperationKind Kind => OperationKind.ExpressionStatement;
4976public override OperationKind Kind => OperationKind.LocalFunction;
4990public override OperationKind Kind => OperationKind.Stop;
5004public override OperationKind Kind => OperationKind.End;
5070public override OperationKind Kind => OperationKind.RaiseEvent;
5088public override OperationKind Kind => OperationKind.Literal;
5148public override OperationKind Kind => OperationKind.Conversion;
5221public override OperationKind Kind => OperationKind.Invocation;
5288public override OperationKind Kind => OperationKind.ArrayElementReference;
5310public override OperationKind Kind => OperationKind.LocalReference;
5329public override OperationKind Kind => OperationKind.ParameterReference;
5394public override OperationKind Kind => OperationKind.FieldReference;
5450public override OperationKind Kind => OperationKind.MethodReference;
5519public override OperationKind Kind => OperationKind.PropertyReference;
5573public override OperationKind Kind => OperationKind.EventReference;
5636public override OperationKind Kind => OperationKind.Unary;
5714public override OperationKind Kind => OperationKind.Binary;
5791public override OperationKind Kind => OperationKind.Conditional;
5858public override OperationKind Kind => OperationKind.Coalesce;
5911public override OperationKind Kind => OperationKind.AnonymousFunction;
5981public override OperationKind Kind => OperationKind.ObjectCreation;
6033public override OperationKind Kind => OperationKind.TypeParameterObjectCreation;
6100public override OperationKind Kind => OperationKind.ArrayCreation;
6119public override OperationKind Kind => OperationKind.InstanceReference;
6175public override OperationKind Kind => OperationKind.IsType;
6227public override OperationKind Kind => OperationKind.Await;
6300public override OperationKind Kind => OperationKind.SimpleAssignment;
6375public override OperationKind Kind => OperationKind.CompoundAssignment;
6428public override OperationKind Kind => OperationKind.Parenthesized;
6493public override OperationKind Kind => OperationKind.EventAssignment;
6556public override OperationKind Kind => OperationKind.ConditionalAccess;
6573public override OperationKind Kind => OperationKind.ConditionalAccessInstance;
6630public override OperationKind Kind => OperationKind.InterpolatedString;
6686public override OperationKind Kind => OperationKind.AnonymousObjectCreation;
6742public override OperationKind Kind => OperationKind.ObjectOrCollectionInitializer;
6805public override OperationKind Kind => OperationKind.MemberInitializer;
6858public override OperationKind Kind => OperationKind.NameOf;
6916public override OperationKind Kind => OperationKind.Tuple;
6974public override OperationKind Kind => OperationKind.DynamicMemberReference;
7026public override OperationKind Kind => OperationKind.TranslatedQuery;
7078public override OperationKind Kind => OperationKind.DelegateCreation;
7096public override OperationKind Kind => OperationKind.DefaultValue;
7115public override OperationKind Kind => OperationKind.TypeOf;
7135public override OperationKind Kind => OperationKind.SizeOf;
7187public override OperationKind Kind => OperationKind.AddressOf;
7250public override OperationKind Kind => OperationKind.IsPattern;
7256internal IncrementOrDecrementOperation(bool isPostfix, bool isLifted, bool isChecked, IOperation target, IMethodSymbol? operatorMethod, ITypeSymbol? constrainedToType, OperationKind kind, SemanticModel? semanticModel, SyntaxNode syntax, ITypeSymbol? type, bool isImplicit)
7313public override OperationKind Kind { get; }
7365public override OperationKind Kind => OperationKind.Throw;
7424public override OperationKind Kind => OperationKind.DeconstructionAssignment;
7476public override OperationKind Kind => OperationKind.DeclarationExpression;
7493public override OperationKind Kind => OperationKind.OmittedArgument;
7555public override OperationKind Kind => OperationKind.FieldInitializer;
7602public override OperationKind Kind => OperationKind.VariableInitializer;
7653public override OperationKind Kind => OperationKind.PropertyInitializer;
7704public override OperationKind Kind => OperationKind.ParameterInitializer;
7759public override OperationKind Kind => OperationKind.ArrayInitializer;
7827public override OperationKind Kind => OperationKind.VariableDeclarator;
7908public override OperationKind Kind => OperationKind.VariableDeclaration;
7969public override OperationKind Kind => OperationKind.Argument;
8046public override OperationKind Kind => OperationKind.CatchClause;
8120public override OperationKind Kind => OperationKind.SwitchCase;
8144public override OperationKind Kind => OperationKind.CaseClause;
8207public override OperationKind Kind => OperationKind.CaseClause;
8269public override OperationKind Kind => OperationKind.CaseClause;
8322public override OperationKind Kind => OperationKind.CaseClause;
8373public override OperationKind Kind => OperationKind.CaseClause;
8429public override OperationKind Kind => OperationKind.InterpolatedStringText;
8502public override OperationKind Kind => OperationKind.Interpolation;
8564public override OperationKind Kind => OperationKind.ConstantPattern;
8586public override OperationKind Kind => OperationKind.DeclarationPattern;
8651public override OperationKind Kind => OperationKind.TupleBinary;
8718public override OperationKind Kind => OperationKind.MethodBody;
8789public override OperationKind Kind => OperationKind.ConstructorBody;
8808public override OperationKind Kind => OperationKind.Discard;
8861public override OperationKind Kind => OperationKind.FlowCapture;
8883public override OperationKind Kind => OperationKind.FlowCaptureReference;
8936public override OperationKind Kind => OperationKind.IsNull;
8953public override OperationKind Kind => OperationKind.CaughtException;
8972public override OperationKind Kind => OperationKind.StaticLocalInitializationSemaphore;
9031public override OperationKind Kind => OperationKind.CoalesceAssignment;
9098public override OperationKind Kind => OperationKind.Range;
9155public override OperationKind Kind => OperationKind.ReDim;
9221public override OperationKind Kind => OperationKind.ReDimClause;
9297public override OperationKind Kind => OperationKind.RecursivePattern;
9311public override OperationKind Kind => OperationKind.DiscardPattern;
9380public override OperationKind Kind => OperationKind.SwitchExpression;
9455public override OperationKind Kind => OperationKind.SwitchExpressionArm;
9517public override OperationKind Kind => OperationKind.PropertySubpattern;
9580public override OperationKind Kind => OperationKind.None;
9644public override OperationKind Kind => OperationKind.None;
9696public override OperationKind Kind => OperationKind.None;
9715public override OperationKind Kind => OperationKind.None;
9777public override OperationKind Kind => OperationKind.None;
9832public override OperationKind Kind => OperationKind.UsingDeclaration;
9883public override OperationKind Kind => OperationKind.NegatedPattern;
9947public override OperationKind Kind => OperationKind.BinaryPattern;
9965public override OperationKind Kind => OperationKind.TypePattern;
10018public override OperationKind Kind => OperationKind.RelationalPattern;
10083public override OperationKind Kind => OperationKind.With;
10150public override OperationKind Kind => OperationKind.InterpolatedStringHandlerCreation;
10212public override OperationKind Kind => OperationKind.InterpolatedStringAddition;
10218internal InterpolatedStringAppendOperation(IOperation appendCall, OperationKind kind, SemanticModel? semanticModel, SyntaxNode syntax, bool isImplicit)
10264public override OperationKind Kind { get; }
10284public override OperationKind Kind => OperationKind.InterpolatedStringHandlerArgumentPlaceholder;
10351public override OperationKind Kind => OperationKind.FunctionPointerInvocation;
10412public override OperationKind Kind => OperationKind.ListPattern;
10465public override OperationKind Kind => OperationKind.SlicePattern;
10532public override OperationKind Kind => OperationKind.ImplicitIndexerReference;
10551public override OperationKind Kind => OperationKind.Utf8String;
10602public override OperationKind Kind => OperationKind.Attribute;
10665public override OperationKind Kind => OperationKind.InlineArrayAccess;
10723public override OperationKind Kind => OperationKind.CollectionExpression;
10779public override OperationKind Kind => OperationKind.Spread;
Operations\ControlFlowGraphBuilder.cs (98)
96Debug.Assert(body.Kind == OperationKind.Block ||
97body.Kind == OperationKind.MethodBody ||
98body.Kind == OperationKind.ConstructorBody ||
99body.Kind == OperationKind.FieldInitializer ||
100body.Kind == OperationKind.PropertyInitializer ||
101body.Kind == OperationKind.ParameterInitializer ||
102body.Kind == OperationKind.Attribute,
108Debug.Assert(body.Kind == OperationKind.LocalFunction || body.Kind == OperationKind.AnonymousFunction);
126case OperationKind.LocalFunction:
130case OperationKind.AnonymousFunction:
861value.Kind != OperationKind.LocalReference ||
1280|| slot.operationOpt.Kind == OperationKind.FlowCaptureReference
1281|| slot.operationOpt.Kind == OperationKind.DeclarationExpression
1282|| slot.operationOpt.Kind == OperationKind.Discard
1283|| slot.operationOpt.Kind == OperationKind.OmittedArgument));
1619if (operation.WhenTrue is IConversionOperation whenTrueConversion && whenTrueConversion.Operand.Kind == OperationKind.Throw)
1622Debug.Assert(rewrittenThrow!.Kind == OperationKind.None);
1631else if (operation.WhenFalse is IConversionOperation whenFalseConversion && whenFalseConversion.Operand.Kind == OperationKind.Throw)
1640Debug.Assert(rewrittenThrow.Kind == OperationKind.None);
1687if (result.Kind != OperationKind.FlowCaptureReference ||
1849if (operationOpt.Kind != OperationKind.FlowCaptureReference
1850&& operationOpt.Kind != OperationKind.DeclarationExpression
1851&& operationOpt.Kind != OperationKind.Discard
1852&& operationOpt.Kind != OperationKind.OmittedArgument)
2725if (condition.Kind == OperationKind.Binary)
2789case OperationKind.Binary:
2854case OperationKind.Unary:
2865case OperationKind.Conditional:
2890case OperationKind.Coalesce:
2922case OperationKind.Conversion:
2925if (conversion.Operand.Kind == OperationKind.Throw)
2929Debug.Assert(rewrittenThrow.Kind == OperationKind.None);
2952while (condition.Kind == OperationKind.Parenthesized)
3045bool alternativeThrows = conversion?.Operand.Kind == OperationKind.Throw;
3071Debug.Assert(rewrittenThrow.Kind == OperationKind.None);
3104bool isStatement = _currentStatement == operation || operation.Parent.Kind == OperationKind.ExpressionStatement;
3367bool isOnStatementLevel = _currentStatement == operation || (_currentStatement == operation.Parent && _currentStatement?.Kind == OperationKind.ExpressionStatement);
3562Debug.Assert(operation.Operation.Kind == OperationKind.ConditionalAccess || operation.Operation.Kind == OperationKind.CoalesceAssignment);
3565else if (operation.Operation.Kind == OperationKind.Throw)
3791if (exceptionDeclarationOrExpression.Kind == OperationKind.VariableDeclarator)
3834case OperationKind.YieldReturn:
3835AddStatement(new ReturnOperation(returnedValue, OperationKind.YieldReturn, semanticModel: null, operation.Syntax, IsImplicit(operation)));
3838case OperationKind.YieldBreak:
3839case OperationKind.Return:
3985Debug.Assert(resources.Kind != OperationKind.VariableDeclaration);
3986Debug.Assert(resources.Kind != OperationKind.VariableDeclarator);
4464if (!operation.Locals.IsEmpty && operation.LoopControlVariable.Kind == OperationKind.VariableDeclarator)
4658case OperationKind.VariableDeclarator:
4678case OperationKind.Tuple:
4679case OperationKind.DeclarationExpression:
5355Debug.Assert(controlVariableReferenceForAssignment.Kind == OperationKind.FlowCaptureReference);
5427case OperationKind.VariableDeclarator:
5739if (initialization.Length == 1 && initialization[0].Kind == OperationKind.VariableDeclarationGroup)
6049case OperationKind.MemberInitializer:
6053case OperationKind.SimpleAssignment:
6063var validKinds = ImmutableArray.Create(OperationKind.Invocation, OperationKind.DynamicInvocation, OperationKind.Increment, OperationKind.Literal,
6064OperationKind.LocalReference, OperationKind.Binary, OperationKind.FieldReference, OperationKind.Invalid,
6065OperationKind.InterpolatedString);
6162case OperationKind.FieldReference:
6163case OperationKind.EventReference:
6164case OperationKind.PropertyReference:
6167if (memberReference.Kind == OperationKind.PropertyReference)
6186case OperationKind.ArrayElementReference:
6193case OperationKind.ImplicitIndexerReference:
6200case OperationKind.DynamicIndexerAccess:
6207case OperationKind.DynamicMemberReference:
6220Debug.Assert(instance.Kind == OperationKind.Invalid || instance.Kind == OperationKind.None);
6230case OperationKind.FieldReference:
6235case OperationKind.EventReference:
6240case OperationKind.PropertyReference:
6246case OperationKind.ArrayElementReference:
6252case OperationKind.ImplicitIndexerReference:
6259case OperationKind.DynamicIndexerAccess:
6265case OperationKind.DynamicMemberReference:
6395Debug.Assert(propertyReference.Instance.Kind == OperationKind.InstanceReference);
6506if (elementValue.Kind == OperationKind.ArrayInitializer)
6525if (elementValue.Kind == OperationKind.ArrayInitializer)
6612if (operation.Operation.Kind == OperationKind.DynamicMemberReference)
6628if (operation.Operation.Kind == OperationKind.DynamicMemberReference)
6673if (value.Kind == OperationKind.Tuple)
6693if (value.Kind == OperationKind.Tuple)
7033if (element.Kind == OperationKind.Interpolation)
7331case OperationKind.EventReference:
7334case OperationKind.Parenthesized:
7448if (children.Count != 0 && children.Last().Kind == OperationKind.ObjectOrCollectionInitializer)
7823if (statement.Kind == OperationKind.LocalFunction)
7987if (simpleAssignment.Target.Kind != OperationKind.PropertyReference)
7999Debug.Assert(propertyReference.Instance.Kind == OperationKind.InstanceReference);
8080if (simpleAssignment.Target.Kind != OperationKind.PropertyReference)
Microsoft.CodeAnalysis.Analyzers (159)
src\RoslynAnalyzers\Microsoft.CodeAnalysis.BannedApiAnalyzers\Core\SymbolIsBannedAnalyzerBase.cs (14)
139OperationKind.ObjectCreation,
140OperationKind.Invocation,
141OperationKind.EventReference,
142OperationKind.FieldReference,
143OperationKind.MethodReference,
144OperationKind.PropertyReference,
145OperationKind.ArrayCreation,
146OperationKind.AddressOf,
147OperationKind.Conversion,
148OperationKind.UnaryOperator,
149OperationKind.BinaryOperator,
150OperationKind.Increment,
151OperationKind.Decrement,
152OperationKind.TypeOf);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Microsoft.CodeAnalysis.AnalyzerUtilities (199)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Microsoft.CodeAnalysis.BannedApiAnalyzers (152)
RestrictedInternalsVisibleToAnalyzer.cs (11)
103OperationKind.ObjectCreation,
104OperationKind.Invocation,
105OperationKind.EventReference,
106OperationKind.FieldReference,
107OperationKind.MethodReference,
108OperationKind.PropertyReference,
109OperationKind.Conversion,
110OperationKind.UnaryOperator,
111OperationKind.BinaryOperator,
112OperationKind.Increment,
113OperationKind.Decrement);
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
SymbolIsBannedAnalyzerBase.cs (14)
139OperationKind.ObjectCreation,
140OperationKind.Invocation,
141OperationKind.EventReference,
142OperationKind.FieldReference,
143OperationKind.MethodReference,
144OperationKind.PropertyReference,
145OperationKind.ArrayCreation,
146OperationKind.AddressOf,
147OperationKind.Conversion,
148OperationKind.UnaryOperator,
149OperationKind.BinaryOperator,
150OperationKind.Increment,
151OperationKind.Decrement,
152OperationKind.TypeOf);
Microsoft.CodeAnalysis.CodeStyle (96)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (17)
236symbolStartContext.RegisterOperationAction(AnalyzeDeconstructionAssignment, OperationKind.DeconstructionAssignment);
237symbolStartContext.RegisterOperationAction(AnalyzeFieldInitializer, OperationKind.FieldInitializer);
238symbolStartContext.RegisterOperationAction(AnalyzeInvocationOperation, OperationKind.Invocation);
239symbolStartContext.RegisterOperationAction(AnalyzeLoopOperation, OperationKind.Loop);
240symbolStartContext.RegisterOperationAction(AnalyzeMemberReferenceOperation, OperationKind.FieldReference, OperationKind.MethodReference, OperationKind.PropertyReference, OperationKind.EventReference);
241symbolStartContext.RegisterOperationAction(AnalyzeNameOfOperation, OperationKind.NameOf);
242symbolStartContext.RegisterOperationAction(AnalyzeObjectCreationOperation, OperationKind.ObjectCreation);
259if (operation is { Kind: OperationKind.None, Parent: INameOfOperation { Argument: var nameofArgument } } &&
267OperationKind.Invalid,
268OperationKind.None,
269OperationKind.DynamicIndexerAccess,
270OperationKind.DynamicInvocation,
271OperationKind.DynamicMemberReference,
272OperationKind.DynamicObjectCreation);
Microsoft.CodeAnalysis.CodeStyle.Fixes (5)
Microsoft.CodeAnalysis.CSharp (9)
Operations\CSharpOperationFactory.cs (9)
1387OperationKind operationKind = Helper.IsDecrement(boundIncrementOperator.OperatorKind) ? OperationKind.Decrement : OperationKind.Increment;
1783return new ReturnOperation(returnedValue, OperationKind.YieldBreak, _semanticModel, syntax, isImplicit);
2061return new ReturnOperation(returnedValue, OperationKind.Return, _semanticModel, syntax, isImplicit);
2069return new ReturnOperation(returnedValue, OperationKind.YieldReturn, _semanticModel, syntax, isImplicit);
2458"" => OperationKind.InterpolatedStringAppendInvalid,
2459BoundInterpolatedString.AppendLiteralMethod => OperationKind.InterpolatedStringAppendLiteral,
2460BoundInterpolatedString.AppendFormattedMethod => OperationKind.InterpolatedStringAppendFormatted,
Microsoft.CodeAnalysis.CSharp.Analyzers (1)
Microsoft.CodeAnalysis.CSharp.CodeStyle (15)
Microsoft.CodeAnalysis.CSharp.Emit.UnitTests (2)
Microsoft.CodeAnalysis.CSharp.Emit3.UnitTests (112)
Diagnostics\DiagnosticAnalyzerTests.cs (12)
2245var operationKinds = ImmutableArray.Create(OperationKind.VariableDeclarator);
2281private readonly ImmutableArray<OperationKind> _operationKinds;
2299public GeneratedCodeSyntaxAndOperationAnalyzer(GeneratedCodeAnalysisFlags? generatedCodeAnalysisFlagsOpt, ImmutableArray<SyntaxKind> syntaxKinds, ImmutableArray<OperationKind> operationKinds)
3033TestSymbolStartAnalyzerCore(new SymbolStartAnalyzer(topLevelAction: false, SymbolKind.Namespace, OperationKind.VariableDeclarationGroup),
3045TestSymbolStartAnalyzerCore(new SymbolStartAnalyzer(topLevelAction: false, SymbolKind.NamedType, OperationKind.VariableDeclarationGroup),
3062TestSymbolStartAnalyzerCore(new SymbolStartAnalyzer(topLevelAction: true, SymbolKind.Method, OperationKind.VariableDeclarationGroup),
3089analyzers[i] = new SymbolStartAnalyzer(topLevelAction: false, symbolKinds[i], OperationKind.VariableDeclarationGroup, analyzerId: i + 1);
3149analyzers[i] = new SymbolStartAnalyzer(topLevelAction: false, symbolKinds[i], OperationKind.VariableDeclarationGroup, analyzerId: i + 1);
3191var analyzers = new DiagnosticAnalyzer[] { new SymbolStartAnalyzer(topLevelAction: false, SymbolKind.NamedType, OperationKind.Invocation) };
3223var analyzers = new DiagnosticAnalyzer[] { new SymbolStartAnalyzer(topLevelAction: true, SymbolKind.NamedType, OperationKind.FieldReference) };
3864OperationKind.Invocation);
3870OperationKind.Binary);
Semantics\PrimaryConstructorTests.cs (50)
4315context.RegisterOperationAction(Handle1, OperationKind.ConstructorBody);
4316context.RegisterOperationAction(Handle2, OperationKind.Invocation);
4317context.RegisterOperationAction(Handle3, OperationKind.Literal);
4318context.RegisterOperationAction(Handle4, OperationKind.ParameterInitializer);
4319context.RegisterOperationAction(Handle5, OperationKind.PropertyInitializer);
4320context.RegisterOperationAction(Handle5, OperationKind.FieldInitializer);
4516Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4519Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4527Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4530Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4533Assert.Equal(OperationKind.Invocation, context.OperationBlocks[2].Kind);
4541Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4544Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4547Assert.Equal(OperationKind.Block, context.OperationBlocks[2].Kind);
4549Assert.Equal(OperationKind.Invocation, context.OperationBlocks[3].Kind);
4556Assert.Equal(OperationKind.Block, context.OperationBlocks[0].Kind);
4650Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4653Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4663Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4666Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4669Assert.Equal(OperationKind.Invocation, context.OperationBlocks[2].Kind);
4679Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4682Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4685Assert.Equal(OperationKind.Block, context.OperationBlocks[2].Kind);
4687Assert.Equal(OperationKind.Invocation, context.OperationBlocks[3].Kind);
4696Assert.Equal(OperationKind.Block, context.OperationBlocks[0].Kind);
4708context.RegisterOperationAction(Handle1, OperationKind.ConstructorBody);
4709context.RegisterOperationAction(Handle2, OperationKind.Invocation);
4710context.RegisterOperationAction(Handle3, OperationKind.Literal);
4711context.RegisterOperationAction(Handle4, OperationKind.ParameterInitializer);
4712context.RegisterOperationAction(Handle5, OperationKind.PropertyInitializer);
4713context.RegisterOperationAction(Handle5, OperationKind.FieldInitializer);
4724Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4727Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4735Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4738Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4741Assert.Equal(OperationKind.Invocation, context.OperationBlocks[2].Kind);
4749Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
4752Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
4755Assert.Equal(OperationKind.Block, context.OperationBlocks[2].Kind);
4757Assert.Equal(OperationKind.Invocation, context.OperationBlocks[3].Kind);
4764Assert.Equal(OperationKind.Block, context.OperationBlocks[0].Kind);
5683context.RegisterOperationAction(HandleConstructorBody, OperationKind.ConstructorBody);
5684context.RegisterOperationAction(HandleInvocation, OperationKind.Invocation);
5685context.RegisterOperationAction(HandleLiteral, OperationKind.Literal);
5686context.RegisterOperationAction(HandleParameterInitializer, OperationKind.ParameterInitializer);
5687context.RegisterOperationAction(Fail, OperationKind.PropertyInitializer);
5688context.RegisterOperationAction(Fail, OperationKind.FieldInitializer);
5791Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
5794Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
Semantics\RecordTests.cs (42)
26882context.RegisterOperationAction(Handle1, OperationKind.ConstructorBody);
26883context.RegisterOperationAction(Handle2, OperationKind.Invocation);
26884context.RegisterOperationAction(Handle3, OperationKind.Literal);
26885context.RegisterOperationAction(Handle4, OperationKind.ParameterInitializer);
26886context.RegisterOperationAction(Handle5, OperationKind.PropertyInitializer);
26887context.RegisterOperationAction(Handle5, OperationKind.FieldInitializer);
27083Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27086Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27094Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27097Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27100Assert.Equal(OperationKind.Invocation, context.OperationBlocks[2].Kind);
27108Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27111Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27114Assert.Equal(OperationKind.Block, context.OperationBlocks[2].Kind);
27116Assert.Equal(OperationKind.Invocation, context.OperationBlocks[3].Kind);
27123Assert.Equal(OperationKind.Block, context.OperationBlocks[0].Kind);
27217Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27220Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27230Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27233Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27236Assert.Equal(OperationKind.Invocation, context.OperationBlocks[2].Kind);
27246Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27249Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27252Assert.Equal(OperationKind.Block, context.OperationBlocks[2].Kind);
27254Assert.Equal(OperationKind.Invocation, context.OperationBlocks[3].Kind);
27263Assert.Equal(OperationKind.Block, context.OperationBlocks[0].Kind);
27275context.RegisterOperationAction(Handle1, OperationKind.ConstructorBody);
27276context.RegisterOperationAction(Handle2, OperationKind.Invocation);
27277context.RegisterOperationAction(Handle3, OperationKind.Literal);
27278context.RegisterOperationAction(Handle4, OperationKind.ParameterInitializer);
27279context.RegisterOperationAction(Handle5, OperationKind.PropertyInitializer);
27280context.RegisterOperationAction(Handle5, OperationKind.FieldInitializer);
27291Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27294Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27302Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27305Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27308Assert.Equal(OperationKind.Invocation, context.OperationBlocks[2].Kind);
27316Assert.Equal(OperationKind.ParameterInitializer, context.OperationBlocks[0].Kind);
27319Assert.Equal(OperationKind.Attribute, context.OperationBlocks[1].Kind);
27322Assert.Equal(OperationKind.Block, context.OperationBlocks[2].Kind);
27324Assert.Equal(OperationKind.Invocation, context.OperationBlocks[3].Kind);
27331Assert.Equal(OperationKind.Block, context.OperationBlocks[0].Kind);
Microsoft.CodeAnalysis.CSharp.Features (15)
Microsoft.CodeAnalysis.CSharp.Features.UnitTests (2)
Microsoft.CodeAnalysis.CSharp.IOperation.UnitTests (18)
IOperation\IOperationTests.cs (8)
467Assert.Equal(OperationKind.DeconstructionAssignment, operation1.Kind);
473Assert.Equal(OperationKind.DeconstructionAssignment, operation2.Kind);
479Assert.Equal(OperationKind.DeconstructionAssignment, operation3.Kind);
513Assert.Equal(OperationKind.ExpressionStatement, operation.Kind);
562Assert.Equal(OperationKind.FieldReference, operation.Kind);
592VerifyRootAndModelForOperationAncestors(operation, model, expectedRootOperationKind: OperationKind.MethodBody, expectedRootSyntax: methodDeclSyntax);
627VerifyRootAndModelForOperationAncestors(operation, speculativeModel, expectedRootOperationKind: OperationKind.Block, expectedRootSyntax: speculatedBlock);
678OperationKind expectedRootOperationKind,
Microsoft.CodeAnalysis.CSharp.Semantic.UnitTests (13)
Microsoft.CodeAnalysis.CSharp.Workspaces (2)
Microsoft.CodeAnalysis.EditorFeatures.UnitTests (2)
Microsoft.CodeAnalysis.EditorFeatures2.UnitTests (4)
Microsoft.CodeAnalysis.Features (82)
src\Analyzers\Core\Analyzers\RemoveUnusedMembers\AbstractRemoveUnusedMembersDiagnosticAnalyzer.cs (17)
236symbolStartContext.RegisterOperationAction(AnalyzeDeconstructionAssignment, OperationKind.DeconstructionAssignment);
237symbolStartContext.RegisterOperationAction(AnalyzeFieldInitializer, OperationKind.FieldInitializer);
238symbolStartContext.RegisterOperationAction(AnalyzeInvocationOperation, OperationKind.Invocation);
239symbolStartContext.RegisterOperationAction(AnalyzeLoopOperation, OperationKind.Loop);
240symbolStartContext.RegisterOperationAction(AnalyzeMemberReferenceOperation, OperationKind.FieldReference, OperationKind.MethodReference, OperationKind.PropertyReference, OperationKind.EventReference);
241symbolStartContext.RegisterOperationAction(AnalyzeNameOfOperation, OperationKind.NameOf);
242symbolStartContext.RegisterOperationAction(AnalyzeObjectCreationOperation, OperationKind.ObjectCreation);
259if (operation is { Kind: OperationKind.None, Parent: INameOfOperation { Argument: var nameofArgument } } &&
267OperationKind.Invalid,
268OperationKind.None,
269OperationKind.DynamicIndexerAccess,
270OperationKind.DynamicInvocation,
271OperationKind.DynamicMemberReference,
272OperationKind.DynamicObjectCreation);
Microsoft.CodeAnalysis.PublicApiAnalyzers (3)
Microsoft.CodeAnalysis.ResxSourceGenerator (127)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Microsoft.CodeAnalysis.Test.Utilities (434)
Compilation\TestOperationVisitor.cs (152)
39Assert.Equal(OperationKind.None, operation.Kind);
55Assert.Equal(OperationKind.None, operation.Kind);
119Assert.Equal(OperationKind.Block, operation.Kind);
127Assert.Equal(OperationKind.VariableDeclarationGroup, operation.Kind);
133Assert.Equal(OperationKind.VariableDeclarator, operation.Kind);
148Assert.Equal(OperationKind.VariableDeclaration, operation.Kind);
162Assert.Equal(OperationKind.Switch, operation.Kind);
170Assert.Equal(OperationKind.SwitchCase, operation.Kind);
222Assert.Equal(OperationKind.CaseClause, operation.Kind);
359Assert.Equal(OperationKind.Loop, operation.Kind);
367Assert.Equal(OperationKind.Labeled, operation.Kind);
382Assert.Equal(OperationKind.Branch, operation.Kind);
401Assert.Equal(OperationKind.Empty, operation.Kind);
407Assert.Contains(operation.Kind, new[] { OperationKind.Return, OperationKind.YieldReturn, OperationKind.YieldBreak });
410Assert.NotEqual(OperationKind.YieldReturn, operation.Kind);
421Assert.Equal(OperationKind.Lock, operation.Kind);
427Assert.Equal(OperationKind.Try, operation.Kind);
441Assert.Equal(OperationKind.CatchClause, operation.Kind);
462Assert.Equal(OperationKind.Using, operation.Kind);
465Assert.NotEqual(OperationKind.VariableDeclaration, operation.Resources.Kind);
466Assert.NotEqual(OperationKind.VariableDeclarator, operation.Resources.Kind);
482Assert.Equal(OperationKind.None, operation.Kind);
489Assert.Equal(OperationKind.CollectionExpression, operation.Kind);
495Assert.Equal(OperationKind.Spread, operation.Kind);
501Assert.Equal(OperationKind.None, operation.Kind);
507Assert.Equal(OperationKind.ExpressionStatement, operation.Kind);
513Assert.Equal(OperationKind.None, operation.Kind);
519Assert.Equal(OperationKind.Stop, operation.Kind);
525Assert.Equal(OperationKind.End, operation.Kind);
531Assert.Equal(OperationKind.Invocation, operation.Kind);
564Assert.Equal(OperationKind.FunctionPointerInvocation, operation.Kind);
578Assert.Equal(OperationKind.Argument, operation.Kind);
594Assert.Equal(OperationKind.OmittedArgument, operation.Kind);
600Assert.Equal(OperationKind.ArrayElementReference, operation.Kind);
606Assert.Equal(OperationKind.ImplicitIndexerReference, operation.Kind);
615Assert.Equal(OperationKind.InlineArrayAccess, operation.Kind);
621Assert.Equal(OperationKind.None, operation.Kind);
627Assert.Equal(OperationKind.LocalReference, operation.Kind);
635Assert.Equal(OperationKind.ParameterReference, operation.Kind);
642Assert.Equal(OperationKind.InstanceReference, operation.Kind);
681Assert.Equal(OperationKind.FieldReference, operation.Kind);
691Assert.Equal(OperationKind.MethodReference, operation.Kind);
705Assert.Equal(OperationKind.PropertyReference, operation.Kind);
713Assert.Equal(OperationKind.EventReference, operation.Kind);
721Assert.Equal(OperationKind.EventAssignment, operation.Kind);
728Assert.Equal(OperationKind.ConditionalAccess, operation.Kind);
735Assert.Equal(OperationKind.ConditionalAccessInstance, operation.Kind);
741Assert.Equal(OperationKind.None, operation.Kind);
747Assert.Equal(OperationKind.UnaryOperator, operation.Kind);
748Assert.Equal(OperationKind.Unary, operation.Kind);
762Assert.Equal(OperationKind.BinaryOperator, operation.Kind);
763Assert.Equal(OperationKind.Binary, operation.Kind);
831Assert.Equal(OperationKind.TupleBinaryOperator, operation.Kind);
832Assert.Equal(OperationKind.TupleBinary, operation.Kind);
840Assert.Equal(OperationKind.Conversion, operation.Kind);
888Assert.Equal(OperationKind.Conditional, operation.Kind);
903Assert.Equal(OperationKind.Coalesce, operation.Kind);
910Assert.Equal(OperationKind.CoalesceAssignment, operation.Kind);
916Assert.Equal(OperationKind.IsType, operation.Kind);
924Assert.Equal(OperationKind.SizeOf, operation.Kind);
931Assert.Equal(OperationKind.TypeOf, operation.Kind);
938Assert.Equal(OperationKind.AnonymousFunction, operation.Kind);
945Assert.Equal(OperationKind.FlowAnonymousFunction, operation.Kind);
952Assert.Equal(OperationKind.LocalFunction, operation.Kind);
978Assert.Equal(OperationKind.Literal, operation.Kind);
984Assert.Equal(OperationKind.Utf8String, operation.Kind);
991Assert.Equal(OperationKind.Await, operation.Kind);
997Assert.Equal(OperationKind.NameOf, operation.Kind);
1003Assert.Equal(OperationKind.Throw, operation.Kind);
1016Assert.Equal(OperationKind.AddressOf, operation.Kind);
1022Assert.Equal(OperationKind.ObjectCreation, operation.Kind);
1047Assert.Equal(OperationKind.AnonymousObjectCreation, operation.Kind);
1054Assert.Equal(OperationKind.InstanceReference, propertyReference.Instance.Kind);
1061Assert.Equal(OperationKind.DynamicObjectCreation, operation.Kind);
1074Assert.Equal(OperationKind.DynamicInvocation, operation.Kind);
1080Assert.Equal(OperationKind.DynamicIndexerAccess, operation.Kind);
1086Assert.Equal(OperationKind.ObjectOrCollectionInitializer, operation.Kind);
1092Assert.Equal(OperationKind.MemberInitializer, operation.Kind);
1104Assert.Equal(OperationKind.FieldInitializer, operation.Kind);
1114Assert.Equal(OperationKind.VariableInitializer, operation.Kind);
1121Assert.Equal(OperationKind.PropertyInitializer, operation.Kind);
1131Assert.Equal(OperationKind.ParameterInitializer, operation.Kind);
1138Assert.Equal(OperationKind.ArrayCreation, operation.Kind);
1151Assert.Equal(OperationKind.ArrayInitializer, operation.Kind);
1163Assert.Equal(OperationKind.SimpleAssignment, operation.Kind);
1170Assert.Equal(OperationKind.CompoundAssignment, operation.Kind);
1199Assert.Contains(operation.Kind, new[] { OperationKind.Increment, OperationKind.Decrement });
1211Assert.Equal(OperationKind.Parenthesized, operation.Kind);
1217Assert.Equal(OperationKind.DynamicMemberReference, operation.Kind);
1239Assert.Equal(OperationKind.DefaultValue, operation.Kind);
1245Assert.Equal(OperationKind.TypeParameterObjectCreation, operation.Kind);
1258Assert.Equal(OperationKind.None, operation.Kind);
1271Assert.Equal(OperationKind.Invalid, operation.Kind);
1276Assert.Equal(OperationKind.Tuple, operation.Kind);
1283Assert.Equal(OperationKind.InterpolatedString, operation.Kind);
1289Assert.Equal(OperationKind.InterpolatedStringText, operation.Kind);
1290if (operation.Text.Kind != OperationKind.Literal)
1292Assert.Equal(OperationKind.Literal, ((IConversionOperation)operation.Text).Operand.Kind);
1299Assert.Equal(OperationKind.Interpolation, operation.Kind);
1308if (operation.FormatString.Kind != OperationKind.Literal)
1310Assert.Equal(OperationKind.Literal, ((IConversionOperation)operation.FormatString).Operand.Kind);
1320Assert.Equal(OperationKind.InterpolatedStringHandlerCreation, operation.Kind);
1331Assert.Equal(OperationKind.InterpolatedStringAddition, operation.Kind);
1339Assert.Equal(OperationKind.InterpolatedStringHandlerArgumentPlaceholder, operation.Kind);
1353Assert.True(operation.Kind is OperationKind.InterpolatedStringAppendFormatted or OperationKind.InterpolatedStringAppendLiteral or OperationKind.InterpolatedStringAppendInvalid);
1367Assert.Equal(OperationKind.ConstantPattern, operation.Kind);
1374Assert.Equal(OperationKind.RelationalPattern, operation.Kind);
1387Assert.Equal(OperationKind.BinaryPattern, operation.Kind);
1398Assert.Equal(OperationKind.NegatedPattern, operation.Kind);
1405Assert.Equal(OperationKind.TypePattern, operation.Kind);
1413Assert.Equal(OperationKind.DeclarationPattern, operation.Kind);
1446Assert.Equal(OperationKind.SlicePattern, operation.Kind);
1461Assert.Equal(OperationKind.ListPattern, operation.Kind);
1479Assert.Equal(OperationKind.RecursivePattern, operation.Kind);
1527if (operation.Member.Kind == OperationKind.Invalid)
1551Assert.Equal(OperationKind.SwitchExpression, operation.Kind);
1573Assert.Equal(OperationKind.IsPattern, operation.Kind);
1595Assert.Equal(OperationKind.TranslatedQuery, operation.Kind);
1601Assert.Equal(OperationKind.DeclarationExpression, operation.Kind);
1607Assert.Equal(OperationKind.DeconstructionAssignment, operation.Kind);
1613Assert.Equal(OperationKind.DelegateCreation, operation.Kind);
1619Assert.Equal(OperationKind.RaiseEvent, operation.Kind);
1632Assert.Equal(OperationKind.ConstructorBodyOperation, operation.Kind);
1633Assert.Equal(OperationKind.ConstructorBody, operation.Kind);
1659Assert.Equal(OperationKind.MethodBodyOperation, operation.Kind);
1660Assert.Equal(OperationKind.MethodBody, operation.Kind);
1685Assert.Equal(OperationKind.Discard, operation.Kind);
1694Assert.Equal(OperationKind.DiscardPattern, operation.Kind);
1701Assert.Equal(OperationKind.FlowCapture, operation.Kind);
1707case OperationKind.Invalid:
1708case OperationKind.None:
1709case OperationKind.AnonymousFunction:
1710case OperationKind.FlowCaptureReference:
1711case OperationKind.DefaultValue:
1712case OperationKind.FlowAnonymousFunction: // must be an error case like in Microsoft.CodeAnalysis.CSharp.UnitTests.ConditionalOperatorTests.TestBothUntyped unit-test
1715case OperationKind.OmittedArgument:
1716case OperationKind.DeclarationExpression:
1717case OperationKind.Discard:
1733Assert.Equal(OperationKind.FlowCaptureReference, operation.Kind);
1740Assert.Equal(OperationKind.IsNull, operation.Kind);
1747Assert.Equal(OperationKind.CaughtException, operation.Kind);
1754Assert.Equal(OperationKind.StaticLocalInitializationSemaphore, operation.Kind);
1763Assert.Equal(OperationKind.Range, operation.Kind);
1784Assert.Equal(OperationKind.ReDim, operation.Kind);
1791Assert.Equal(OperationKind.ReDimClause, operation.Kind);
1818Assert.Equal(OperationKind.With, operation.Kind);
1826Assert.Equal(OperationKind.Attribute, operation.Kind);
Diagnostics\CommonDiagnosticAnalyzers.cs (18)
970oc.RegisterOperationAction(c => ReportDiagnostic(c.ReportDiagnostic, ActionKind.Operation), OperationKind.VariableDeclarationGroup);
1355}, OperationKind.Literal);
1367}, OperationKind.Literal);
1434context.RegisterOperationAction(AnalyzerOperation, OperationKind.FieldReference);
1468}, OperationKind.MethodBody, OperationKind.ConstructorBody);
1583OperationKind.Invocation);
1873private readonly OperationKind? _operationKind;
1876public SymbolStartAnalyzer(bool topLevelAction, SymbolKind symbolKind, OperationKind? operationKindOpt = null, int? analyzerId = null)
2563analysisContext.RegisterOperationAction(_ => { }, OperationKind.Invocation);
2759OperationKind.VariableDeclarationGroup);
2773OperationKind.VariableDeclarationGroup);
2786OperationKind.VariableDeclarationGroup);
2889OperationKind.VariableDeclaration);
2943context.RegisterOperationAction(context => HandleCallback(context.Operation.Syntax.GetLocation(), context.Compilation, context.ReportDiagnostic, context.CancellationToken), OperationKind.VariableDeclaration);
3017context.RegisterOperationAction(operationContext => AnalyzedOperations.Add(operationContext.Operation), OperationKind.VariableDeclaration);
3045operationBlockStartContext.RegisterOperationAction(operationContext => AnalyzedOperationsInsideOperationBlock.Add(operationContext.Operation), OperationKind.VariableDeclaration);
3156}, OperationKind.VariableDeclarationGroup);
Diagnostics\OperationTestAnalyzer.cs (90)
66OperationKind.Invalid);
76OperationKind.Invocation,
77OperationKind.Invalid);
112OperationKind.LocalReference,
113OperationKind.Literal);
141context.RegisterOperationAction(AnalyzeOperation, OperationKind.Loop);
152if (forCondition.Kind == OperationKind.Binary)
160conditionLeft.Kind == OperationKind.LocalReference)
170if (setup.Kind == OperationKind.ExpressionStatement && ((IExpressionStatementOperation)setup).Operation.Kind == OperationKind.SimpleAssignment)
173if (setupAssignment.Target.Kind == OperationKind.LocalReference &&
185if (advance.Kind == OperationKind.ExpressionStatement)
234if (advanceExpression.Kind == OperationKind.SimpleAssignment)
238if (advanceAssignment.Target.Kind == OperationKind.LocalReference &&
240advanceAssignment.Value.Kind == OperationKind.Binary &&
247advanceOperation.LeftOperand.Kind == OperationKind.LocalReference &&
258else if (advanceExpression.Kind == OperationKind.CompoundAssignment)
262if (advanceAssignment.Target.Kind == OperationKind.LocalReference &&
272else if (advanceExpression.Kind == OperationKind.Increment)
276if (advanceAssignment.Target.Kind == OperationKind.LocalReference &&
464OperationKind.Switch);
581OperationKind.Invocation);
638OperationKind.Literal);
673OperationKind.Argument);
716Report(operationContext, initializer.Syntax, initializer.Kind == OperationKind.FieldReference ? DoNotUseFieldInitializerDescriptor : DoNotUsePropertyInitializerDescriptor);
718OperationKind.FieldReference,
719OperationKind.PropertyReference);
753var kind = assignment.Target.Kind;
754if (kind == OperationKind.FieldReference ||
755kind == OperationKind.PropertyReference)
760OperationKind.SimpleAssignment);
800OperationKind.ArrayInitializer);
857OperationKind.VariableDeclarationGroup);
901case OperationKind.CaseClause:
908case OperationKind.SwitchCase:
917OperationKind.SwitchCase,
918OperationKind.CaseClause);
957OperationKind.InstanceReference);
1036OperationKind.EventReference);
1044if (eventAssignment.EventReference.Kind == OperationKind.Invalid || eventAssignment.HasErrors(operationContext.Compilation, operationContext.CancellationToken))
1049OperationKind.EventAssignment);
1056OperationKind.PropertyReference);
1063OperationKind.FieldReference);
1070OperationKind.MethodReference);
1117OperationKind.Invocation);
1144OperationKind.ObjectCreation);
1187OperationKind.FieldInitializer);
1198OperationKind.ParameterInitializer);
1229OperationKind.None);
1264if (addressOfOperation.Reference.Kind == OperationKind.Invalid && addressOfOperation.HasErrors(operationContext.Compilation, operationContext.CancellationToken))
1269OperationKind.AddressOf);
1328if (statement.Kind == OperationKind.None)
1339OperationKind.AnonymousFunction);
1383case OperationKind.FieldReference:
1387case OperationKind.PropertyReference:
1391case OperationKind.EventReference:
1395case OperationKind.MethodReference:
1399case OperationKind.Invocation:
1416OperationKind.FieldReference,
1417OperationKind.PropertyReference,
1418OperationKind.EventReference,
1419OperationKind.MethodReference,
1420OperationKind.Invocation);
1455OperationKind.Labeled);
1470OperationKind.Branch);
1526OperationKind.Binary);
1547OperationKind.Unary);
1578OperationKind.Binary);
1615if (left.Kind == OperationKind.LocalReference)
1620if (right.Kind == OperationKind.Literal)
1635OperationKind.Binary);
1642if (operand.Kind == OperationKind.LocalReference)
1657OperationKind.Unary);
1710OperationKind.Invocation);
1735if (operation.Kind == OperationKind.Argument)
1786if (operation.Kind == OperationKind.Binary)
1794else if (operation.Kind == OperationKind.Unary)
1802else if (operation.Kind == OperationKind.Increment)
1811OperationKind.Binary,
1812OperationKind.Unary,
1813OperationKind.Increment);
1851OperationKind.ConditionalAccess);
1859OperationKind.ConditionalAccessInstance);
1900OperationKind.Conversion);
1939OperationKind.Loop);
1981OperationKind.Unary);
2017OperationKind.SimpleAssignment);
2054OperationKind.Literal);
2082OperationKind.Literal);
2113OperationKind.Literal);
Microsoft.CodeAnalysis.UnitTests (1)
Microsoft.CodeAnalysis.VisualBasic (2)
Microsoft.CodeAnalysis.VisualBasic.Semantic.UnitTests (1)
Microsoft.CodeAnalysis.Workspaces (33)
Microsoft.Interop.ComInterfaceGenerator (3)
Microsoft.Interop.LibraryImportGenerator (2)
Roslyn.Diagnostics.Analyzers (147)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Roslyn.Diagnostics.CSharp.Analyzers (3)
System.Private.CoreLib.Generators (4)
System.Text.RegularExpressions.Generator (2)
Test.Utilities (48)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction:
Text.Analyzers (128)
src\RoslynAnalyzers\Utilities\Compiler\Extensions\IOperationExtensions.cs (28)
193/// True if this operation has no IOperation API support, i.e. <see cref="OperationKind.None"/> and
199return operation.Kind == OperationKind.None && operation.Parent == null;
247public static TOperation? GetAncestor<TOperation>(this IOperation root, OperationKind ancestorKind, Func<TOperation, bool>? predicate = null)
282public static IOperation? GetAncestor(this IOperation root, ImmutableArray<OperationKind> ancestorKinds, Func<IOperation, bool>? predicate = null)
312return operation.GetAncestor(OperationKind.ConditionalAccess, (IConditionalAccessOperation c) => c.Operation.Syntax == operation.Syntax);
327(operation.GetAncestor<IAnonymousObjectCreationOperation>(OperationKind.AnonymousObjectCreation) != null));
331for (IOperation? current = operation; current != null && current.Kind != OperationKind.Block; current = current.Parent)
339case OperationKind.AnonymousObjectCreation:
388public static bool HasAnyOperationDescendant(this ImmutableArray<IOperation> operationBlocks, OperationKind kind)
493Debug.Assert(operation.Kind is OperationKind.None or OperationKindEx.Attribute, $"Unexpected root operation kind: {operation.Kind}");
518case OperationKind.LocalReference:
522case OperationKind.ParameterReference:
526case OperationKind.InstanceReference:
530case OperationKind.AnonymousFunction:
534case OperationKind.LocalFunction:
553private static readonly ImmutableArray<OperationKind> s_LambdaAndLocalFunctionKinds =
554ImmutableArray.Create(OperationKind.AnonymousFunction, OperationKind.LocalFunction);
609case OperationKind.Parenthesized:
610case OperationKind.Conversion:
611case OperationKind.DeclarationExpression:
616case OperationKind.Tuple:
1098case OperationKind.DeconstructionAssignment:
1102case OperationKind.Tuple:
1103case OperationKind.Conversion:
1104case OperationKind.Parenthesized:
1130case OperationKind.AnonymousFunction:
1133case OperationKind.LocalFunction: