I once wrote a static analysis tool that simply made 2 lists for every function. What Object-function it called, and what Object-functions called it. It only mapped around 98% of all calls, but ended up being extremely useful abstraction when handed a huge code base without much documentation or access to the old team.