Last active
June 12, 2019 01:38
-
-
Save wildlarva/6302d7e7e6c38e33933b9ed1777ce55f to your computer and use it in GitHub Desktop.
A snippet to dump java object differences with java-object-diff
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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