build method
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>>[],
);
}