protected virtual List WalkMemberChain(MemberReferenceExpression memberRef)
{
List chain = new List();
while (true)
{
MemberReferenceExpression container = memberRef.Target as MemberReferenceExpression;
if (null == container ||
(IsSpecialMemberTarget(container)
&& IsReadOnlyMember(container)))
{
Warnings.Add(
CompilerWarningFactory.AssignmentToTemporary(memberRef));
return null;
}
if (IsSpecialMemberTarget(container)
&& EntityType.Field != container.Entity.EntityType)
{
chain.Insert(0, new ChainItem(container));
}
if (IsTerminalReferenceNode(container.Target))
{
break;
}
memberRef = container;
}
return chain;
}