While cyclomatic complexity is a worthwhile metric, I tend to find it to be a poor tool for identifying difficult to maintain code. In particular, I tend to find it just highlights certain types of code (e.g. parsers) and misses difficult recursion, threading and coupling problems as well as many of the anti-patterns that have been defined.
What other tools are available to identify problematic Java code ?
Note, we already use PMD and FindBugs which I believe are great for method level problem identification.