assert block != null;
assert fragments != null;
assert fgraph != null;
Map<FlowElement, List<FlowBlock.Input>> inputGroups = new LinkedHashMap<FlowElement, List<FlowBlock.Input>>();
for (FlowBlock.Input blockInput : block.getBlockInputs()) {
FlowElement element = blockInput.getElementPort().getOwner();
Maps.addToList(inputGroups, element, blockInput);
}
Map<FlowElement, Graph<Fragment>> streams = Maps.create();
for (FlowElement element : inputGroups.keySet()) {
Fragment head = fragments.get(element);
Graph<Fragment> subgraph = createSubgraph(head, fgraph);
streams.put(element, subgraph);
}
List<ReduceUnit> results = Lists.create();
for (Map.Entry<FlowElement, Graph<Fragment>> entry : streams.entrySet()) {
FlowElement element = entry.getKey();
Graph<Fragment> subgraph = entry.getValue();
List<Fragment> body = sort(subgraph);
for (int i = 0, n = body.size(); i < n; i++) {
body.set(i, body.get(i));
}