Skip to content

Instantly share code, notes, and snippets.

@wildlarva
Last active June 12, 2019 01:38
Show Gist options
  • Save wildlarva/6302d7e7e6c38e33933b9ed1777ce55f to your computer and use it in GitHub Desktop.
Save wildlarva/6302d7e7e6c38e33933b9ed1777ce55f to your computer and use it in GitHub Desktop.
A snippet to dump java object differences with java-object-diff
import de.danielbechler.diff.ObjectDifferBuilder;
import de.danielbechler.diff.node.DiffNode;
import de.danielbechler.diff.node.Visit;
// implemented with java-object-diff(https://github.com/SQiShER/java-object-diff)
public final class DiffDumpUtils {
public static void dumpDiff(Object o1, Object o2) {
DiffNode root = ObjectDifferBuilder.buildDefault().compare(o2, o1);
root.visit((DiffNode node, Visit visit) -> {
Object o1Part = node.canonicalGet(o1);
Object o2Part = node.canonicalGet(o2);
switch (node.getState()) {
case ADDED:
System.out.println(node.getPath() + " " + node.getState() + ": " + getObjectSummary(o2Part));
break;
case REMOVED:
System.out.println(node.getPath() + " " + node.getState() + ": " + getObjectSummary(o1Part));
break;
case CHANGED:
System.out.println(node.getPath() + " " + node.getState() + ": " + getObjectSummary(o1Part) + " => " + getObjectSummary(o2Part));
break;
default:
System.out.println(node.getPath() + " " + node.getState() + ": " + getObjectSummary(o1Part) + ", " + getObjectSummary(o2Part));
break;
}
});
}
private static String getObjectSummary(Object o) {
return o + "(0x" + Integer.toHexString(System.identityHashCode(o)) + ")";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment