private CompositeModuleInterpreterActor(Factory factory) {
    super(
        factory.interpreterProperties,
        factory.stagingArea.getAnnotatedExecutionTrace(),
        factory.moduleId);

    module = factory.module;
    stagingArea = factory.stagingArea;
    interpreterPropsProvider = factory.interpreterPropsProvider;
    recomputedInPorts = factory.recomputedInPorts;
    requestedOutPorts = factory.requestedOutPorts;

    int numSubmodules = module.getModules().size();
    childExecutors = new ActorRef[numSubmodules];
    outPortsRequiringValue = (BitSet) requestedOutPorts.clone();
    childActorMap = new HashMap<>(numSubmodules);

    dependencyGraph = new DependencyGraph(module, requestedOutPorts);
    for (InPortNode inPortNode : dependencyGraph.inPortNodes()) {
      HasValue hasValue = factory.inPortsHasValueList.get(inPortNode.getElement().getInIndex());
      assert hasValue != HasValue.PENDING_VALUE_CHECK;
      inPortNode.setHasValue(hasValue);
    }

    inPortReceivedMessage = new BitSet(module.getInPorts().size());
    submoduleOutPortsReceivedMessage = new BitSet[numSubmodules];
    for (RuntimeModule submodule : module.getModules()) {
      submoduleOutPortsReceivedMessage[submodule.getIndex()] =
          new BitSet(submodule.getOutPorts().size());
    }

    computeResumeState =
        new ComputeResumeState(dependencyGraph, recomputedInPorts, this::asynchronousHasValueCheck);
  }
  /**
   * Triggers all in-ports that either are in state {@link PortState#READY} or that received a value
   * while the state of this actor was {@link State#STARTING}.
   */
  private void initialInPortsTrigger() {
    assert state == State.STARTING;

    state = State.REPLAY;

    // Trigger all in-ports whose state is READY
    dependencyGraph
        .inPortNodes()
        .stream()
        .filter(node -> node.getPortState() == PortState.READY)
        .forEach(node -> transmitValueFromInPort(node.getElement()));

    // Trigger all in-ports who received a value while state was STARTING
    inPortReceivedMessage.stream().forEach(this::inPortHasSignal);
  }