class Tapioca::Dsl::Compilers::StateMachines

def decorate

def decorate
  return if constant.state_machines.empty?
  root.create_path(T.unsafe(constant)) do |klass|
    instance_module_name = "StateMachineInstanceHelperModule"
    class_module_name = "StateMachineClassHelperModule"
    instance_module = RBI::Module.new(instance_module_name)
    klass << instance_module
    class_module = RBI::Module.new(class_module_name)
    klass << class_module
    constant.state_machines.each_value do |machine|
      state_type = state_type_for(machine)
      define_state_accessor(instance_module, machine, state_type)
      define_state_predicate(instance_module, machine)
      define_event_helpers(instance_module, machine)
      define_path_helpers(instance_module, machine)
      define_name_helpers(instance_module, class_module, machine)
      define_scopes(class_module, machine)
      define_state_methods(instance_module, machine)
      define_event_methods(instance_module, machine)
    end
    matching_integration_name = ::StateMachines::Integrations.match(constant)&.integration_name
    case matching_integration_name
    when :active_record
      define_activerecord_methods(instance_module)
    end
    klass.create_include(instance_module_name)
    klass.create_extend(class_module_name)
  end
end