class Object

Public Instance Methods

verify_final_method(meth, detect_type) click to toggle source
# File lib/finalist.rb, line 6
def verify_final_method(meth, detect_type)
  super_method = meth.super_method
  while super_method
    if Finalist.finalized_methods[super_method.owner]&.member?(super_method.name)
      backtrace = caller(1)
      backtrace_start_pos = backtrace.rindex { |b| b.index(__FILE__) }
      backtrace = backtrace.drop(backtrace_start_pos + 1)
      raise Finalist::OverrideFinalMethodError.new(
        "#{super_method.owner}##{super_method.name} at #{super_method.source_location.join(":")} is overrided\n  by #{meth.owner}##{meth.name} at #{meth.source_location.join(":")}",
        meth.owner, super_method.owner, meth, detect_type
      ).tap { |ex| ex.set_backtrace(backtrace) }
    end
    super_method = super_method.super_method
  end
end