static Set allEmbeddingObjects(O o) { Set set = identityHashSet(); allEmbeddingObjects_get(o, set); ret set; } svoid allEmbeddingObjects_get(O o, Set set) { if (!set.add(o)) ret; new Matches m; for (S field : allFields(o)) if (startsWith(field, "this$", m) && isInteger(m.rest())) allEmbeddingObjects_get(get(o, field), set); }