makeOperations method
void
makeOperations(
- SourceTree sourceTree,
- TargetTree targetTree,
- Mapper mapper,
- MappingDefinition definition,
- List<
Operation< operations,MappingContext> >
Implementation
void makeOperations(SourceTree sourceTree, TargetTree targetTree, Mapper mapper, MappingDefinition definition, List<Operation<MappingContext>> operations) {
var type = accessor.type;
if ( isRoot ) {
var descriptor = TypeDescriptor.forType(targetTree.type);
if (descriptor.isImmutable() || !descriptor.hasDefaultConstructor()) {
resultDefinition = definition.addIntermediateResultDefinition(TypeDescriptor.forType(type), descriptor.fromArrayConstructor!, children.length, MappingResultValueReceiver());
}
// recursion
for (var child in children) {
child.makeOperations(sourceTree, targetTree, mapper, definition, operations);
}
} // if
else if (isInnerNode) {
var descriptor = TypeDescriptor.forType(type);
var valueReceiver = computeValueReceiver();
var constructor = descriptor.fromArrayConstructor;
// done
resultDefinition = definition.addIntermediateResultDefinition(descriptor, constructor!, children.length, valueReceiver);
// recursion
for (var child in children) {
child.makeOperations(sourceTree, targetTree, mapper, definition, operations);
}
} // if
else { // leaf
var sourceNode = sourceTree.findNode(match!)!;
sourceNode.fetchValue(sourceTree, type, operations); // compute property needed to fetch source value
operations.add(makeOperation(sourceNode, mapper));
} // if
}