sS shortJavaTypeDesc(O o) { ret shortJavaTypeDesc(o, 0); } sS shortJavaTypeDesc(O o, int safety) { if (safety >= 5) ret "..."; if (o == null) ret "null"; S name = shortClassName(o); if (o cast Collection) { if (empty(o)) name += " (empty)"; else { O x = first(o); name += "<" + shortJavaTypeDesc(x, safety+1) + ">"; } } if (o cast Map) { if (empty(o)) name += " (empty)"; else { Pair p = firstKeyAndValue(o); name += "<" + shortJavaTypeDesc(pairA(p), safety+1) + ", " + shortJavaTypeDesc(pairB(p), safety+1) + ">"; } } ret name; }