private static IActivity consumeXor( IActivity startActivity, LinkedList<ITransition> unconsumed, HashSet<ITransition> visited, boolean forward, boolean supportsLoops, ModelElementList<ITransition> transitions) { IActivity result = null; for (ITransition out : transitions) { if (visited.contains(out)) // loop { if (!supportsLoops) { return null; } } else { LinkedList<ITransition> unconsumedClone = (LinkedList<ITransition>) unconsumed.clone(); HashSet<ITransition> visitedClone = (HashSet<ITransition>) visited.clone(); visitedClone.add(out); unconsumedClone.add(out); IActivity next = consume(startActivity, unconsumedClone, visitedClone, forward, supportsLoops); if (next == null) { return null; } else if (result == null) { result = next; } else if (result != next) { return null; } } } return result; }