in src/main/java/org/apache/commons/collections4/MapUtils.java [1960:2014]
private static void verbosePrintInternal(final PrintStream out, final Object label, final Map<?, ?> map,
final Deque<Map<?, ?>> lineage, final boolean debug) {
printIndent(out, lineage.size());
if (map == null) {
if (label != null) {
out.print(label);
out.print(" = ");
}
out.println("null");
return;
}
if (label != null) {
out.print(label);
out.println(" = ");
}
printIndent(out, lineage.size());
out.println("{");
lineage.addLast(map);
for (final Map.Entry<?, ?> entry : map.entrySet()) {
final Object childKey = entry.getKey();
final Object childValue = entry.getValue();
if (childValue instanceof Map && !lineage.contains(childValue)) {
verbosePrintInternal(out, childKey == null ? "null" : childKey, (Map<?, ?>) childValue, lineage, debug);
} else {
printIndent(out, lineage.size());
out.print(childKey);
out.print(" = ");
final int lineageIndex = IterableUtils.indexOf(lineage, PredicateUtils.equalPredicate(childValue));
if (lineageIndex == -1) {
out.print(childValue);
} else if (lineage.size() - 1 == lineageIndex) {
out.print("(this Map)");
} else {
out.print("(ancestor[" + (lineage.size() - 1 - lineageIndex - 1) + "] Map)");
}
if (debug && childValue != null) {
out.print(' ');
out.println(childValue.getClass().getName());
} else {
out.println();
}
}
}
lineage.removeLast();
printIndent(out, lineage.size());
out.println(debug ? "} " + map.getClass().getName() : "}");
}