build method

  1. @override
void build(
  1. List<ExtensionDescriptor> extensions
)
override

Builds the extension.

Implementation

@override
void build(List<ExtensionDescriptor> extensions) {
  final descriptors = extensions.cast<ContentExtensionDescriptor>();

  final contentBuilders = descriptors
      .expand((element) => element.contentBuilders ?? <ContentBuilder>[])
      .groupListsBy((element) => element.content.schemaType);

  final contents = descriptors
      .expand((element) => element.contents ?? <ContentDescriptor>[])
      .groupListsBy((element) => element.schemaType);

  // Collect the builders
  for (final entry in contentBuilders.entries) {
    assert(entry.value.length == 1,
        'There can be only one ContentBuilder for a content-type. We found ${entry.value.length} for ${entry.key}');

    _contentBuilderMap[entry.key] = entry.value.first;
  }

  // Ensure every ContentDescriptor has a ContentBuilder
  for (final entry in contents.entries) {
    final schemaType = entry.key;
    final builder = _contentBuilderMap[schemaType];

    assert(builder != null,
        'Missing ContentBuilder for ContentDescriptor of schemaType: $schemaType');
  }

  // Setup the builders
  for (final entry in _contentBuilderMap.entries) {
    final schemaType = entry.key;
    final builder = entry.value;
    final descriptors = contents[schemaType] ?? [];

    builder.init(descriptors);
  }

  _initTypeRegistrations(
    descriptors,
    (feature) => feature.actions ?? <TypeDescriptor<ActionConfiguration>>[],
  );

  _initTypeRegistrations(
    descriptors,
    (feature) =>
        feature.conditions ?? <TypeDescriptor<ConditionConfiguration>>[],
  );
}