0

我想从带有 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();

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

4

2 回答 2

2

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

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

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

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

于 2019-09-28T20:23:24.017 回答
0

它已被弃用。在 1.9.0 版本中应该使用这个命令行:

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

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

于 2020-12-17T08:23:49.410 回答