/// <include file='doc\ShellTextBuffer.uex' path='docs/doc[@for="ShellTextBuffer.Checkout2"]/*' />
        /// <devdoc>
        ///     Checks out the file this buffer is connected to, and and any additional buffers based on the
        ////    passed-in parameter or throws a CheckoutException on failure.
        /// </devdoc>
        public override void Checkout(string[] additionalBuffers)
        {
            if (checkoutService == null)
            {
                checkoutService = new VsCheckoutService(serviceProvider);
            }

            if (textStream is IVsTextBuffer)
            {
                int flags = ((IVsTextBuffer)textStream).GetStateFlags();
                if ((flags & (_bufferstateflags.BSF_USER_READONLY)) != 0)
                {
                    throw new InvalidOperationException(SR.GetString(SR.BUFFERNoModify));
                }
            }

            checkoutService.CheckoutFile(FileName, additionalBuffers);
        }
        /// <include file='doc\ShellTextBuffer.uex' path='docs/doc[@for="ShellTextBuffer.Dirty"]/*' />
        /// <devdoc>
        ///      Marks this buffer as being modified.
        /// </devdoc>
        //public override void Dirty() {
        //    this.IsDirty = true;
        //}

        /// <include file='doc\ShellTextBuffer.uex' path='docs/doc[@for="ShellTextBuffer.Dispose"]/*' />
        /// <devdoc>
        ///     Disposes of this object.
        /// </devdoc>
        public override void Dispose()
        {
            // Disconnect us from the shell
            //
            SinkTextBufferEvents(false);

            if (checkoutService != null)
            {
                checkoutService.Dispose();
                checkoutService = null;
            }

            if (textStream != null)
            {
                textStream = null;
            }

            if (serviceProvider != null)
            {
                serviceProvider = null;
            }

            base.Dispose();
        }