// multi-level structureLines static S structureTree(O data) { if (data instanceof O[]) data = asList((O[]) data); if (data instanceof Collection) { new L l; l.add(replaceIfEqual(shortClassName(data), "ArrayList", "L")); for (O x : (Collection) data) l.add(indentx(structureTree(x))); ret fromLines(l); } ifclass MultiSet if (data instanceof MultiSet) data = multiSetToMap(data/MultiSet); endif if (data instanceof Map) { new L l; for (O key : ((Map) data).keySet()) { O value = ((Map) data).get(key); l.add(structureForUser(key) + " = " + structureForUser(value)); } ret fromLines(l); } ret structureForUser(data); }