public static void RemovePerSubjectBufferProperty <TProperty, TTextView>(
            this TTextView textView,
            ITextBuffer subjectBuffer,
            object key) where TTextView : class, ITextView
        {
            Contract.ThrowIfNull(textView);
            Contract.ThrowIfNull(subjectBuffer);

            PerSubjectBufferProperty <TProperty, TTextView> .RemoveValue(textView, subjectBuffer, key);
        }
        public static bool TryGetPerSubjectBufferProperty <TProperty, TTextView>(
            this TTextView textView,
            ITextBuffer subjectBuffer,
            object key,
            out TProperty value) where TTextView : class, ITextView
        {
            Contract.ThrowIfNull(textView);
            Contract.ThrowIfNull(subjectBuffer);

            return(PerSubjectBufferProperty <TProperty, TTextView> .TryGetValue(textView, subjectBuffer, key, out value));
        }
        public static void AddPerSubjectBufferProperty <TProperty, TTextView>(
            this TTextView textView,
            ITextBuffer subjectBuffer,
            object key,
            TProperty value) where TTextView : class, ITextView
        {
            Contract.ThrowIfNull(textView);
            Contract.ThrowIfNull(subjectBuffer);

            PerSubjectBufferProperty <TProperty, TTextView> .AddValue(textView, subjectBuffer, key, value);
        }
        /// <summary>
        /// Gets or creates a per subject buffer property, returning true if it needed to create it.
        /// </summary>
        public static bool GetOrCreatePerSubjectBufferProperty <TProperty, TTextView>(
            this TTextView textView,
            ITextBuffer subjectBuffer,
            object key,
            Func <TTextView, ITextBuffer, TProperty> valueCreator,
            out TProperty value) where TTextView : class, ITextView
        {
            Contract.ThrowIfNull(textView);
            Contract.ThrowIfNull(subjectBuffer);
            Contract.ThrowIfNull(valueCreator);

            return(PerSubjectBufferProperty <TProperty, TTextView> .GetOrCreateValue(textView, subjectBuffer, key, valueCreator, out value));
        }