Modern object-oriented applications are hard to understand because the flow of control is not always obvious. Good programming practices such as the separation of interfaces from implementations and the use of design patterns encourage the use of indirection and dynamic dispatch. As a result, understanding the behavior of a method requires detailed knowledge about callers of that method, and about the types of objects passed as arguments to that method.
In this demonstration, we show how an existing static analysis framework can be used to augment an integrated development environment with visualization features that make object-oriented programs easier to understand. Specifically, we use the Gnosis framework for interprocedural static analysis that was developed at IBM T.J. Watson, and Eclipse, an open extensible environment for software development.
We show several unobtrusive ways of visualizing call graph information and type information, using existing extension mechanisms such as text-hovers (tool-tips), compiler warnings, and context-sensitive views. For example, in one of our visualizations, the programmer points the mouse cursor at a method call in Eclipse's standard Java Editor, and a tool-tip pops up showing all possible dispatch targets for that call site. Another visualization lets the programmer select a method header, and a context-sensitive menu pops up displaying all callers of that method; the user can then select a menu entry to open the corresponding calling method in a separate editor window.