docs: private <T> Collection<Integer> transformSideOutput(SideOutputTransformation<T> sideOutput) {
  		StreamTransformation<?> input = sideOutput.getInput();
  		Collection<Integer> resultIds = transform(input);
  
  		// the recursive transform might have already transformed this
  		if (alreadyTransformed.containsKey(sideOutput)) {
  			return alreadyTransformed.get(sideOutput);
  		}
  
  		List<Integer> virtualResultIds = new ArrayList<>();
  
  		for (int inputId : resultIds) {
  			int virtualId = StreamTransformation.getNewNodeId();
  			streamGraph.addVirtualSideOutputNode(inputId, virtualId, sideOutput.getOutputTag());
  			virtualResultIds.add(virtualId);
  		}
  		return virtualResultIds;
  	}