I built this tool to help me understand the unfamiliar: https://packagemap.co
There's a parser that extracts all the classes and methods from the java code and a site that renders these in a directed graph. I use a kind of query syntax to filter the graph, and added features based on how I want to explore the code.
The nodes in the graph carry an name like: "my.company.package.MyClass.myMethod"
Then I can filter by wildcards: *MyClass*
Or see just the classes with a line terminator: *.MyClass$
Or see the code that leads up to, or away from a method/type: ->*MyClass, *MyClass->
I've found making the problem visual has massively improved how I navigate the code. In code review I spot things that are very hard to see in an IDE or file-tree review UI (like github). Things like; where abstractions are being broken/leaking, or where types are being mis-used across packages.
I wrote a summary of the common cases I find using this tool in a blog post[0]
[0] https://blog.packagemap.co/posts/common-code-coupling-mistak...