public override List WalkMemberChain(MemberReferenceExpression memberRef)
 {
     List list = new List();
     while (true)
     {
         MemberReferenceExpression node = memberRef.get_Target() as MemberReferenceExpression;
         if ((node == null) || (this.IsSpecialMemberTarget(node) && this.IsReadOnlyMember(node)))
         {
             this.get_Warnings().Add(CompilerWarningFactory.AssignmentToTemporary(memberRef));
             return null;
         }
         if (this.IsSpecialMemberTarget(node) && !this.IsFieldReference(node))
         {
             list.Insert(0, new ProcessAssignmentsToSpecialMembers.ChainItem(node));
         }
         if ((node.get_Target() is MethodInvocationExpression) || (node.get_Target() is SlicingExpression))
         {
             list.Insert(0, new ProcessAssignmentsToSpecialMembers.ChainItem(node.get_Target()));
             return list;
         }
         if (this.IsTerminalReferenceNode(node.get_Target()))
         {
             return list;
         }
         memberRef = node;
     }
 }