def self.redefine_shared(receiver, method)
original_method = receiver.method(method)
receiver.__send__(:define_singleton_method, method) do |name, *args, &block|
if (node = UnusedSharedSetup.register(method, caller_locations))
original_method.(name, *args) do |*shared_args|
before { UnusedSharedSetup.record(node) }
class_exec(*shared_args, &block)
end
else
original_method.(name, *args, &block)
end
end
end