public override void VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation) { var operatorMethod = operation.OperatorMethod; var isPostFix = operation.IsPostfix; base.VisitIncrementOrDecrement(operation); }
private void OnCompilationStart(CompilationStartAnalysisContext compilationContext) { var restrictedInternalsVisibleToMap = GetRestrictedInternalsVisibleToMap(compilationContext.Compilation); if (restrictedInternalsVisibleToMap.IsEmpty) { return; } var namespaceToIsBannedMap = new ConcurrentDictionary<INamespaceSymbol, /*isBanned*/bool>(); // Verify all explicit type name specifications in declarations and executable code. compilationContext.RegisterSyntaxNodeAction( context => { var name = (TNameSyntax)context.Node; if (!IsInTypeOnlyContext(name) || name.Parent is TNameSyntax) { // Bail out if we are not in type only context or the parent is also a name // which will be analyzed separately. return; } var typeInfo = context.SemanticModel.GetTypeInfo(name, context.CancellationToken); VerifySymbol(typeInfo.Type as INamedTypeSymbol, name, context.ReportDiagnostic, restrictedInternalsVisibleToMap, namespaceToIsBannedMap); }, NameSyntaxKinds); // Verify all member usages in executable code. compilationContext.RegisterOperationAction( context => { var symbol = context.Operation switch { IObjectCreationOperation objectCreation => objectCreation.Constructor, IInvocationOperation invocation => invocation.TargetMethod, IMemberReferenceOperation memberReference => memberReference.Member, IConversionOperation conversion => conversion.OperatorMethod, IUnaryOperation unary => unary.OperatorMethod, IBinaryOperation binary => binary.OperatorMethod, IIncrementOrDecrementOperation incrementOrDecrement => incrementOrDecrement.OperatorMethod, _ => throw new NotImplementedException($"Unhandled OperationKind: {context.Operation.Kind}"), }; VerifySymbol(symbol, context.Operation.Syntax, context.ReportDiagnostic, restrictedInternalsVisibleToMap, namespaceToIsBannedMap); }, OperationKind.ObjectCreation, OperationKind.Invocation, OperationKind.EventReference, OperationKind.FieldReference, OperationKind.MethodReference, OperationKind.PropertyReference, OperationKind.Conversion, OperationKind.UnaryOperator, OperationKind.BinaryOperator, OperationKind.Increment, OperationKind.Decrement); }
public override bool VisitIncrementOrDecrement([NotNull] IIncrementOrDecrementOperation operation1, [CanBeNull] IOperation argument) { return(argument is IIncrementOrDecrementOperation operation2 && AreBaseOperationsEqual(operation1, operation2) && AreSymbolsEqual(operation1.OperatorMethod, operation2.OperatorMethod) && operation1.IsPostfix == operation2.IsPostfix && operation1.IsLifted == operation2.IsLifted && operation1.IsChecked == operation2.IsChecked); }
public override void VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation) { Assert.Contains(operation.Kind, new[] { OperationKind.Increment, OperationKind.Decrement }); var operatorMethod = operation.OperatorMethod; var isPostFix = operation.IsPostfix; var isLifted = operation.IsLifted; var isChecked = operation.IsChecked; Assert.Same(operation.Target, operation.Children.Single()); }
/// <summary> /// コンストラクタ /// </summary> /// <param name="operation">IOperationインスタンス</param> /// <param name="container">イベントコンテナ</param> public Increment(IIncrementOrDecrementOperation operation, EventContainer container) : base(container) { var incrementOrDecrement = Expression.GetOperationKindExpression(operation); if (!operation.IsPostfix) { // インクリメント・デクリメント Expressions.AddRange(incrementOrDecrement); } // インクリメント・デクリメント対象インスタンス Expressions.AddRange(OperationFactory.GetExpressionList(operation.Target, container)); if (operation.IsPostfix) { // インクリメント・デクリメント Expressions.AddRange(incrementOrDecrement); } }
public override ValueContentAbstractValue ComputeValueForIncrementOrDecrementOperation(IIncrementOrDecrementOperation operation, ValueContentAbstractValue targetValue) { var incrementValue = ValueContentAbstractValue.ContainsOneIntergralLiteralState; var incrementValueType = WellKnownTypeProvider.Compilation.GetSpecialType(SpecialType.System_Int32); var operationKind = operation.Kind == OperationKind.Increment ? BinaryOperatorKind.Add : BinaryOperatorKind.Subtract; return(targetValue.MergeBinaryOperation(incrementValue, operationKind, operation.Target.Type, incrementValueType, operation.Type)); }
public override IOperation VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation, object argument) { bool isDecrement = operation.Kind == OperationKind.Decrement; return(new IncrementExpression(isDecrement, operation.IsPostfix, operation.IsLifted, operation.IsChecked, Visit(operation.Target), operation.OperatorMethod, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit)); }
public virtual void VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation) { DefaultVisit(operation); }
public override void VisitIncrementOrDecrement([NotNull] IIncrementOrDecrementOperation operation) { RegisterAssignment(operation.Target); base.VisitIncrementOrDecrement(operation); }
public override void VisitIncrementOrDecrement([NotNull] IIncrementOrDecrementOperation operation) { base.VisitIncrementOrDecrement(operation); }
public override Scope VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation, Scope currentScope) => operation.Target.Accept(this, currentScope);
public override Scope VisitIncrementOrDecrement(IIncrementOrDecrementOperation operation, Scope currentScope) => currentScope;