You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Call graph is missing edges to implementations of interfaces #113
When there is call to an interface method, the call graph edge in the current call graph points to the interface and not to any of the implementations. So when there is a call to a method is a class that implements/extends this interface, we don't see those edges in the call graph.
Steps To Reproduce
Steps to reproduce the behavior:
Generate a analysis.json with java -jar /path/to/codeanalyzer-2.2.0-dev.jar --input /path/to/daytrader8 --output /path/to/analysis-json/
Inspect the JSON for call edges from com.ibm.websphere.samples.daytrader.web.servlet.TradeServletAction::doBuy(ServletContext, HttpServletRequest, HttpServletResponse, String, String, String).
Observed behavior
We'll see a call edge directly to the interface, i.e., we observe that there will an edge to tAction.buy(userID, symbol, new Double(quantity).doubleValue(), TradeConfig.getOrderProcessingMode()); where private TradeServices tAction; and TradeServices is an interface class.
Expected behavior
Call graph edge should point to the right implementation(s) of the the interface (i.e, to TradeDirect or TradeSLSBBean which implement/extend TradeServices). Or, if we choose to be imprecise, then we'll have to have edges to each of these implementations.
Screenshots
Environment (please complete the following information):
OS: All supported
Version of Java: 11+
Version of Maven: N/A
Version of Gradle: N/A
Additional context
Explore the various analysis depths in WALA to see which one works
Expose the call-graph analysis depths as a CLI option to provide to codeanalyzer call graph construction
Mirror this in CLDK python-sdk repo as a now feature request
Consider manually adding call-edges to all implementing subtypes of the the interface (match by method signature of the subtypes.)
Activity