Exemple #1
0
            public override PointsToAbstractValue VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation, object argument)
            {
                var _ = base.VisitObjectOrCollectionInitializer(operation, argument);

                // We should have created a new PointsTo value for the associated creation operation.
                return(GetCachedAbstractValue(operation.Parent));
            }
Exemple #2
0
        private static AbstractExpression ReadObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation op)
        {
            if (IsObjectInitializer(op))
            {
                return(ReadObjectInitializer(op));
            }

            return(ReadCollectionInitializer(op));
        }
        public override TAbstractAnalysisValue VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation, object argument)
        {
            // Special handling for collection initializers as we need to track indices.
            uint collectionElementInitializerIndex = 0;

            foreach (var elementInitializer in operation.Initializers)
            {
                if (elementInitializer is ICollectionElementInitializerOperation collectionElementInitializer)
                {
                    var _ = Visit(elementInitializer, argument: collectionElementInitializerIndex);
                    collectionElementInitializerIndex += (uint)collectionElementInitializer.Arguments.Length;
                }
                else
                {
                    var _ = Visit(elementInitializer, argument);
                }
            }

            return(UnknownOrMayBeValue);
        }
Exemple #4
0
        private static AbstractExpression ReadCollectionInitializer(IObjectOrCollectionInitializerOperation op)
        {
            var context = CodeReaderContext.GetContextOrThrow();
            var result  = new CollectionInitializerExpression {
                Items = op.Initializers.Select(readInitializer).ToList()
            };

            return(result);

            CollectionInitializerExpression.ItemInitializer readInitializer(IOperation initOp)
            {
                if (initOp is IInvocationOperation invocation)
                {
                    var item = new CollectionInitializerExpression.ItemInitializer();
                    item.ItemArguments.AddRange(invocation.Arguments.Select(arg => ReadExpression(arg.Value)));
                    return(item);
                }

                throw new CodeReadErrorException($"Unrecognized collection initializer: {initOp.Syntax}");
            }
        }
Exemple #5
0
        private static AbstractExpression ReadObjectInitializer(IObjectOrCollectionInitializerOperation op)
        {
            var context = CodeReaderContext.GetContextOrThrow();
            var result  = new ObjectInitializerExpression {
                PropertyValues = op.Initializers.Select(readInitializer).ToList()
            };

            return(result);

            NamedPropertyValue readInitializer(IOperation initOp)
            {
                if (initOp is IAssignmentOperation assignment &&
                    assignment.Target is IMemberReferenceOperation memberRef)
                {
                    var property = context.FindMemberOrThrow <AbstractMember>(memberRef.Member);
                    var value    = ReadAssignmentValue(assignment);

                    return(new NamedPropertyValue(property.Name, value));
                }

                throw new CodeReadErrorException($"Unrecognized object initializer: {initOp.Syntax}");
            }
        }
Exemple #6
0
            private PointsToAbstractValue VisitTypeCreationWithArgumentsAndInitializer(IEnumerable <IOperation> arguments, IObjectOrCollectionInitializerOperation initializer, IOperation operation, object argument)
            {
                AbstractLocation location = AbstractLocation.CreateAllocationLocation(operation, operation.Type);
                var pointsToAbstractValue = new PointsToAbstractValue(location);

                CacheAbstractValue(operation, pointsToAbstractValue);

                var unusedArray      = VisitArray(arguments, argument);
                var initializerValue = Visit(initializer, argument);

                Debug.Assert(initializer == null || initializerValue == pointsToAbstractValue);
                return(pointsToAbstractValue);
            }
            public override NullAbstractValue VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation, object argument)
            {
                var _ = base.VisitObjectOrCollectionInitializer(operation, argument);

                return(NullAbstractValue.NotNull);
            }
Exemple #8
0
 public override IOperation VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation, object argument)
 {
     return(new ObjectOrCollectionInitializerExpression(VisitArray(operation.Initializers), ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit));
 }
 public override void VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation)
 {
     Assert.Equal(OperationKind.ObjectOrCollectionInitializer, operation.Kind);
     AssertEx.Equal(operation.Initializers, operation.Children);
 }
Exemple #10
0
 public virtual void VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation)
 {
     DefaultVisit(operation);
 }
Exemple #11
0
 public override void VisitObjectOrCollectionInitializer([NotNull] IObjectOrCollectionInitializerOperation operation)
 {
     base.VisitObjectOrCollectionInitializer(operation);
 }
 public override void VisitObjectOrCollectionInitializer(
     [NotNull] IObjectOrCollectionInitializerOperation operation)
 {
     Result.SetImmediate();
 }
Exemple #13
0
 private static bool IsObjectInitializer(IObjectOrCollectionInitializerOperation op)
 {
     return(op.Initializers.All(init => init is IAssignmentOperation));
 }
Exemple #14
0
 public override bool VisitObjectOrCollectionInitializer([NotNull] IObjectOrCollectionInitializerOperation operation1,
                                                         [CanBeNull] IOperation argument)
 {
     return(argument is IObjectOrCollectionInitializerOperation operation2 &&
            AreBaseOperationsEqual(operation1, operation2));
 }