svoid pnlFieldValueComparison(O obj1, O obj2) { for (S field : joinTreeSets(allFields(obj1), allFields(obj2))) { O a = get(obj1, field); O b = get(obj2, field); if (a != null || b != null) { print(field + ": " + (a == b ? "same " + a : eq(a, b) ? "eq " + a : "diff " + a + " => " + b)); } } }