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)); }
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); }
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}"); } }
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}"); } }
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); }
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); }
public virtual void VisitObjectOrCollectionInitializer(IObjectOrCollectionInitializerOperation operation) { DefaultVisit(operation); }
public override void VisitObjectOrCollectionInitializer([NotNull] IObjectOrCollectionInitializerOperation operation) { base.VisitObjectOrCollectionInitializer(operation); }
public override void VisitObjectOrCollectionInitializer( [NotNull] IObjectOrCollectionInitializerOperation operation) { Result.SetImmediate(); }
private static bool IsObjectInitializer(IObjectOrCollectionInitializerOperation op) { return(op.Initializers.All(init => init is IAssignmentOperation)); }
public override bool VisitObjectOrCollectionInitializer([NotNull] IObjectOrCollectionInitializerOperation operation1, [CanBeNull] IOperation argument) { return(argument is IObjectOrCollectionInitializerOperation operation2 && AreBaseOperationsEqual(operation1, operation2)); }