/// <summary>
        /// The save.
        /// </summary>
        /// <param name="memberAccessExpression">
        /// The member access expression.
        /// </param>
        private void Save(MemberAccessExpression memberAccessExpression)
        {
            // todo: investigate why it returns multiple result with the same methods
            var expressionReturnTypeResolver = new ExpressionReturnTypeResolver(this);
            var resolvedCodeElements = expressionReturnTypeResolver.Resolve(memberAccessExpression.LeftHandSide);
            var members = resolvedCodeElements.ToList();

            var resolvedTypeReference = new TypeResolver(memberAccessExpression.LeftHandSide.Text, this);

            if (resolvedTypeReference.IsClassName || resolvedTypeReference.IsEnum)
            {
                bool isFullyQualified = memberAccessExpression.LeftHandSide.Text.StartsWith(resolvedTypeReference.Namespace);
                this.cppWriter.Write(
                    isFullyQualified
                        ? resolvedTypeReference.GetCXFullyQualifiedName(SavingOptions.None)
                        : resolvedTypeReference.GetCxName(SavingOptions.None));
            }
            else
            {
                @switch(memberAccessExpression.LeftHandSide);
            }

            this.Save(this.GetActualMemberAccess(memberAccessExpression, resolvedTypeReference, members, expressionReturnTypeResolver.IsMemberFound));

            @switch(memberAccessExpression.RightHandSide);
        }