registerListeners method

void registerListeners(
  1. Object instance
)

Implementation

void registerListeners(Object instance) {
  $AClass? clazz =
      ArtifactAccessor.all
          .expand((i) => i.artifactMirror.entries)
          .where((i) => i.key == instance.runtimeType)
          .firstOrNull
          ?.value;

  if (clazz != null) {
    for ($AMth i in clazz.annotatedMethods<EventHandler>()) {
      Type? eventType = i.orderedParameterTypes.firstOrNull;

      if (eventType == null || eventType == ArtifactEvent) {
        throw Exception(
          "Event handler methods must have at least one parameter which is the event object extending ArtifactEvent.",
        );
      }
      listeners[eventType] ??= [];
      listeners[eventType]!.add(
        EventListener(
          instance: instance,
          annotation: i.annotationOf<EventHandler>()!,
          handler:
              // Link to method call of provided event
              (e) => i(instance, MethodParameters(orderedParameters: [e])),
        ),
      );

      listeners[eventType]!.sort(
        (a, b) => b.annotation.priority.index.compareTo(
          a.annotation.priority.index,
        ),
      );
    }
  }
}