register method

void register(
  1. LeonardExtension p
)

Register p. Order is preserved across every dispatch.

Throws StateError if mergedTools/finalize has already run. Throws ArgumentError if the namespace fails the ^[a-z][a-z0-9_]*$ regex. Throws StateError on a duplicate namespace.

Implementation

void register(LeonardExtension p) {
  if (_finalized) {
    throw StateError('ExtensionRegistry already finalized');
  }
  if (!_nsRe.hasMatch(p.namespace)) {
    throw ArgumentError.value(
      p.namespace,
      'namespace',
      r'must match ^[a-z][a-z0-9_]*$',
    );
  }
  for (final e in _entries) {
    if (e.plugin.namespace == p.namespace) {
      throw StateError('duplicate extension namespace: ${p.namespace}');
    }
  }
  _entries.add(
    _Entry(p, ExtensionContext(namespace: p.namespace)),
  );
}