svoid philosophyBot1_visitTrailsTree_gen(virtual PhilosophyBot1 engine, IVF1 visitor, O startingPoint) { philosophyBot1_visitTrailsTree_gen(engine, new Set, visitor, startingPoint); } svoid philosophyBot1_visitTrailsTree_gen(virtual PhilosophyBot1 engine, Set seen, IVF1 visitor, O startingPoint) { if (visitor == null || startingPoint == null) ret; if (!seen.add(startingPoint)) ret; visitor.get(startingPoint); if (startingPoint cast Iterable) for (O o : startingPoint) philosophyBot1_visitTrailsTree_gen(engine, seen, visitor, o); else if (startingPoint cast Map) for (O o : values(startingPoint)) philosophyBot1_visitTrailsTree_gen(engine, seen, visitor, o); else philosophyBot1_visitTrailsTree_gen(engine, seen, visitor, rcall getTrail(engine, startingPoint)); }