You know the bad feeling when you start looking at a Java code base that's just wrong. Proving it is something else again. Here's one way to show it.
Eric Doernenburg explains in detail a simple use of AspectJ and GraphViz Dot to create call graph diagrams, which easily show code that has messy calling structure. It's very likely that if the code base is smelly, it will have a messy call graph.