def add_inverse_updater(attribute)
      prop = property(attribute)
      # the reader and writer methods
      rdr, wtr = prop.accessors
      # the inverse attribute metadata
      inv_prop = prop.inverse_property
      # the inverse attribute reader and writer
      inv_rdr, inv_wtr = inv_accessors = inv_prop.accessors
      # Redefine the writer method to update the inverse by delegating to the inverse.
      redefine_method(wtr) do |old_wtr|
        # the attribute reader and (superseded) writer
        accessors = [rdr, old_wtr]
        if inv_prop.collection? then
          lambda { |other| add_to_inverse_collection(other, accessors, inv_rdr) }
        else
          lambda { |other| set_inversible_noncollection_attribute(other, accessors, inv_wtr) }
        end
      end
      logger.debug { "Injected inverse #{inv_prop} updater into #{qp}.#{attribute} writer method #{wtr}." }
    end
def add_inverse_updater(attribute)
      prop = property(attribute)
      # the reader and writer methods
      rdr, wtr = prop.accessors
      # the inverse attribute metadata
      inv_prop = prop.inverse_property
      # the inverse attribute reader and writer
      inv_rdr, inv_wtr = inv_accessors = inv_prop.accessors
      # Redefine the writer method to update the inverse by delegating to the inverse.
      redefine_method(wtr) do |old_wtr|
        # the attribute reader and (superseded) writer
        accessors = [rdr, old_wtr]
        if inv_prop.collection? then
          lambda { |other| add_to_inverse_collection(other, accessors, inv_rdr) }
        else
          lambda { |other| set_inversible_noncollection_attribute(other, accessors, inv_wtr) }
        end
      end
      logger.debug { "Injected inverse #{inv_prop} updater into #{qp}.#{attribute} writer method #{wtr}." }
    end
Modifies the given attribute writer method to update the given inverse.

 @param (see #set_attribute_inverse)