FluentPluginRegistry constructor

FluentPluginRegistry(
  1. Iterable<FluentEditorPlugin> source
)

Implementation

FluentPluginRegistry(Iterable<FluentEditorPlugin> source)
    : plugins = _sortAndValidatePlugins(source.toList()),
      _nodes = {},
      _nodeClasses = {},
      _commands = {},
      _formats = {},
      _ui = [] {
  for (final plugin in plugins) {
    if (plugin.apiVersion != fluentPluginApiVersion) {
      throw StateError(
        'Plugin ${plugin.id} requires API ${plugin.apiVersion}, supported API is $fluentPluginApiVersion',
      );
    }
    for (final node in plugin.nodes) {
      _putUnique(_nodes, node.type, node, 'node type', plugin.id);
      _putUnique(_nodeClasses, node.nodeClass, node, 'node class', plugin.id);
    }
    for (final command in plugin.commands) {
      _putUnique(_commands, command.id, command, 'command', plugin.id);
    }
    for (final format in plugin.formats) {
      _putUnique(_formats, format.id, format, 'format', plugin.id);
    }
    for (final contribution in plugin.ui) {
      if (_ui.any((item) => item.id == contribution.id)) {
        throw StateError(
          'Duplicate UI contribution ${contribution.id} from plugin ${plugin.id}',
        );
      }
      _ui.add(contribution);
    }
  }
  _validateKeyBindings();
  _ui.sort((a, b) {
    final location = a.location.index.compareTo(b.location.index);
    return location != 0 ? location : a.order.compareTo(b.order);
  });
  _styleHooksCache = plugins.map((p) => p.styleHook).whereType<RenderStyleHook>().toList();
}