public PropertyAccess(PropertyChainNode baseNode, PropertyInfo property, bool isCrossReference) { this.baseNode = baseNode; Property = property; IsCrossReference = isCrossReference; }
public override PropertyChainNode Rebase(PropertyChainNode newBase) { return(newBase); }
public abstract PropertyChainNode Rebase(PropertyChainNode newBase);
private void PropagatePropertyAccesses(LooselyLinkedListNode <PropertyChainNode>[] propertyAccessArray, LooselyLinkedListNode <PropertyChainNode> objectPropertyAccesses, ref LooselyLinkedListNode <PropertyChainNode> current, ref LooselyLinkedListNode <PropertyChainNode> currentGhost, PropertyChainNode access, int dependency) { LooselyLinkedListNode <PropertyChainNode> dependentParameters; if (dependency == ParameterDataflowAttribute.TargetObjectIndex) { dependentParameters = objectPropertyAccesses; } else { dependentParameters = propertyAccessArray[dependency]; } if (dependentParameters == null) { return; } foreach (var p in dependentParameters.FromHere) { var rebased = access.Rebase(p); var newNode = new LooselyLinkedListNode <PropertyChainNode>(rebased); if (rebased != access) { propertyAccesses.AddAfter(current, newNode); current = newNode; } else { propertyAccesses.AddAfter(currentGhost, newNode); currentGhost = newNode; } } }
public override PropertyChainNode Rebase(PropertyChainNode newBase) { return(new PropertyAccess(Base.Rebase(newBase), Property, IsCrossReference)); }