diff --git a/README.md b/README.md index f55b2da8efe4664f3ca690d597a254b3c2799639..28ded6ae122e34cda59cd4872aaf0c31280b9d00 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,26 @@ Results: 1 study.huhao.demo.domain.core.common.Page.getConvertedContent ``` +### Reverse Call Graph + +``` +coca rcall -c org.bytedeco.javacpp.tools.TokenIndexer.get +``` + +Results: + +``` +digraph G { +edge [dir="back"]; + +"org.bytedeco.javacpp.tools.Parser.extern" -> "org.bytedeco.javacpp.tools.Parser.declarations"; +"org.bytedeco.javacpp.tools.Parser.declarations" -> "org.bytedeco.javacpp.tools.Parser.extern"; +... +} +``` + +![RCall Demo](docs/sample/rcall.svg) + ### Auto Refactor support: diff --git a/core/domain/call_graph/call_graph.go b/core/domain/call_graph/call_graph.go index 8889b90dc17f2159c14ae1f6ae43c6574b94f74e..da3aa9487d1b1c7c13aa6ba0461e98a8300069d3 100644 --- a/core/domain/call_graph/call_graph.go +++ b/core/domain/call_graph/call_graph.go @@ -22,7 +22,9 @@ func (c CallGraph) Analysis(funcName string, clzs []models.JClassNode) string { return dotContent } +// TODO: be a utils func ToGraphviz(chain string) string { + //rankdir = LR; var result = "digraph G { \n" result = result + chain result = result + "}\n" diff --git a/docs/sample/rcall.svg b/docs/sample/rcall.svg new file mode 100644 index 0000000000000000000000000000000000000000..b21c24e37cc6cb0e4de93dd63c05a462d5ee81b8 --- /dev/null +++ b/docs/sample/rcall.svg @@ -0,0 +1,451 @@ + + + + + + +G + + + +org.zoolu.sip.provider.SipProvider.sendMessage + +org.zoolu.sip.provider.SipProvider.sendMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.provider.SipProvider.sendMessage + + + + + +local.net.KeepAliveSip.sendToken + +local.net.KeepAliveSip.sendToken + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.net.KeepAliveSip.sendToken + + + + + +local.server.Proxy.processRequestToRemoteUA + +local.server.Proxy.processRequestToRemoteUA + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToRemoteUA + + + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToRemoteUA + + + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToRemoteUA + + + + + +local.server.Proxy.processResponse + +local.server.Proxy.processResponse + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processResponse + + + + + +local.server.Proxy.processRequestToLocalUser + +local.server.Proxy.processRequestToLocalUser + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToLocalUser + + + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToLocalUser + + + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToLocalUser + + + + + +local.server.Proxy.processRequestToLocalServer + +local.server.Proxy.processRequestToLocalServer + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Proxy.processRequestToLocalServer + + + + + +local.server.Redirect.processRequestToLocalUser + +local.server.Redirect.processRequestToLocalUser + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Redirect.processRequestToLocalUser + + + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Redirect.processRequestToLocalUser + + + + + +local.server.Redirect.processRequestToRemoteUA + +local.server.Redirect.processRequestToRemoteUA + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Redirect.processRequestToRemoteUA + + + + + +local.server.Registrar.processRequestToLocalUser + +local.server.Registrar.processRequestToLocalUser + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Registrar.processRequestToLocalUser + + + + + +local.server.Registrar.processRequestToRemoteUA + +local.server.Registrar.processRequestToRemoteUA + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Registrar.processRequestToRemoteUA + + + + + +local.server.Registrar.processRequestToLocalServer + +local.server.Registrar.processRequestToLocalServer + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.Registrar.processRequestToLocalServer + + + + + +local.server.ServerEngine.onReceivedMessage + +local.server.ServerEngine.onReceivedMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->local.server.ServerEngine.onReceivedMessage + + + + + +org.bigbluebutton.voiceconf.sip.KeepAliveSip.sendToken + +org.bigbluebutton.voiceconf.sip.KeepAliveSip.sendToken + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.bigbluebutton.voiceconf.sip.KeepAliveSip.sendToken + + + + + +org.bigbluebutton.voiceconf.sip.OptionMethodListener.onReceivedMessage + +org.bigbluebutton.voiceconf.sip.OptionMethodListener.onReceivedMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.bigbluebutton.voiceconf.sip.OptionMethodListener.onReceivedMessage + + + + + +org.red5.app.sip.OptionMethodListener.onReceivedMessage + +org.red5.app.sip.OptionMethodListener.onReceivedMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.red5.app.sip.OptionMethodListener.onReceivedMessage + + + + + +org.zoolu.sip.provider.SipInterface.sendMessage + +org.zoolu.sip.provider.SipInterface.sendMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.provider.SipInterface.sendMessage + + + + + +org.zoolu.sip.transaction.AckTransactionClient.request + +org.zoolu.sip.transaction.AckTransactionClient.request + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.AckTransactionClient.request + + + + + +org.zoolu.sip.transaction.AckTransactionServer.respond + +org.zoolu.sip.transaction.AckTransactionServer.respond + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.AckTransactionServer.respond + + + + + +org.zoolu.sip.transaction.AckTransactionServer.onTimeout + +org.zoolu.sip.transaction.AckTransactionServer.onTimeout + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.AckTransactionServer.onTimeout + + + + + +org.zoolu.sip.transaction.InviteTransactionClient.request + +org.zoolu.sip.transaction.InviteTransactionClient.request + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionClient.request + + + + + +org.zoolu.sip.transaction.InviteTransactionClient.onReceivedMessage + +org.zoolu.sip.transaction.InviteTransactionClient.onReceivedMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionClient.onReceivedMessage + + + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionClient.onReceivedMessage + + + + + +org.zoolu.sip.transaction.InviteTransactionClient.onTimeout + +org.zoolu.sip.transaction.InviteTransactionClient.onTimeout + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionClient.onTimeout + + + + + +org.zoolu.sip.transaction.InviteTransactionServer.onTimeout + +org.zoolu.sip.transaction.InviteTransactionServer.onTimeout + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionServer.onTimeout + + + + + +org.zoolu.sip.transaction.InviteTransactionServer.respondWith + +org.zoolu.sip.transaction.InviteTransactionServer.respondWith + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionServer.respondWith + + + + + +org.zoolu.sip.transaction.InviteTransactionServer.onReceivedMessage + +org.zoolu.sip.transaction.InviteTransactionServer.onReceivedMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.InviteTransactionServer.onReceivedMessage + + + + + +org.zoolu.sip.transaction.TransactionClient.request + +org.zoolu.sip.transaction.TransactionClient.request + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.TransactionClient.request + + + + + +org.zoolu.sip.transaction.TransactionClient.onTimeout + +org.zoolu.sip.transaction.TransactionClient.onTimeout + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.TransactionClient.onTimeout + + + + + +org.zoolu.sip.transaction.TransactionServer.respondWith + +org.zoolu.sip.transaction.TransactionServer.respondWith + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.TransactionServer.respondWith + + + + + +org.zoolu.sip.transaction.TransactionServer.onReceivedMessage + +org.zoolu.sip.transaction.TransactionServer.onReceivedMessage + + + +org.zoolu.sip.provider.SipProvider.sendMessage->org.zoolu.sip.transaction.TransactionServer.onReceivedMessage + + + + + +local.server.StatefulProxy.processRequestToRemoteUA + +local.server.StatefulProxy.processRequestToRemoteUA + + + +local.server.Proxy.processRequestToRemoteUA->local.server.StatefulProxy.processRequestToRemoteUA + + + + + +local.server.Proxy.processRequestToRemoteUA->local.server.StatefulProxy.processRequestToRemoteUA + + + + + +local.server.Proxy.processRequestToRemoteUA->local.server.StatefulProxy.processRequestToRemoteUA + + + + + +local.server.StatefulProxy.processResponse + +local.server.StatefulProxy.processResponse + + + +local.server.Proxy.processResponse->local.server.StatefulProxy.processResponse + + + + + +local.server.StatefulProxy.processRequestToLocalUser + +local.server.StatefulProxy.processRequestToLocalUser + + + +local.server.Proxy.processRequestToLocalUser->local.server.StatefulProxy.processRequestToLocalUser + + + + + +local.server.Proxy.processRequestToLocalUser->local.server.StatefulProxy.processRequestToLocalUser + + + + +