makeOperations method

void makeOperations(
  1. SourceTree sourceTree,
  2. TargetTree targetTree,
  3. Mapper mapper,
  4. MappingDefinition definition,
  5. List<Operation<MappingContext>> operations,
)

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
}