查找接口方法的实现



我想使用 jqAssistant 从给定方法开始可视化我们代码库的方法链(哪个方法调用哪个方法(。

对于普通方法调用,以下 Cypher 查询有效。workupNotification是我开始的方法:

MATCH (begin:Method {name: "workupNotification"}) -[INVOKES*1..20]-> (method:Method) WHERE not method:Constructor and exists(method.name) RETURN begin, method, type

但是我们软件中的许多方法调用都是对接口的调用,这些接口的实现在方法中是未知的(具有依赖反转的SOA(。

serviceRegistry.getService(MyServiceInterface.class).serviceMethod();

如何选择此方法的实现(每个接口有两个类实现。一个是自动生成的(代理(,另一个是我感兴趣的那个。

您需要执行 JVM 在运行时为您执行的操作:解析虚拟方法调用。有一个预定义的 jQAssistant 概念,它将调用关系传播到实现子类:java:InvokesOverriddenMethod。您可以从自己的规则之一中将其作为必需概念引用,也可以从命令行应用它,例如使用 Maven:

mvn jqassistant:analyze -Djqassistant.concepts=java:InvokesOverriddenMethod

该规则记录在手册中,请参阅 http://buschmais.github.io/jqassistant/doc/1.6.0/#java:InvokesOverriddenMethod

(概念的名称不直观,最好用类似java:VirtualInvokes的东西代替它(。

它已被弃用。在 1.9.0 版本中,应使用以下命令行:

mvn jqassistant:analyze -Djqassistant.concepts=java:VirtualInvokes

http://jqassistant.github.io/jqassistant/doc/1.8.0/#java:VirtualInvokes

最新更新