Feature #20912
closedAdd warning when redefining __id__ as well as object_id
Description
Currently if you create a class and redefine or remove either object_id or __send__ it will issue a warning. There's no such warning on __id__.
❯ ruby -we 'class << Object.new; def object_id = 1; end'
-e:1: warning: redefining `object_id' may cause serious problems
❯ ruby -we 'class << Object.new; def __id__ = 1; end'
❯
It makes sense that there's no warning on send, because we expect __send__ to be the method reliably available. __send__ is on BasicObject, send is only on Kernel. This seems a little inconsistent that object_id warns while __id__ does not warn. __id__ is the equivalent to __send__ as it's also on BasicObject, where object_id is only on Kernel.
This may be a more obvious problem in Ruby 3.4.0 as commit:cffd380390967d17899fde0a81f5151ae6ddd076 makes the warning print in more cases.
I propose we change this warning to be emitted only when __id__ is redefined and not when object_id is redefined:
Proposed behaviour:
❯ ruby -we 'class << Object.new; def object_id = 1; end'
❯ ruby -we 'class << Object.new; def __id__ = 1; end'
-e:1: warning: redefining `__id__' may cause serious problems
❯