未验证 提交 7b3464f4 编写于 作者: P Phodal Huang

refactor: move rcall cmd util call to callback

上级 cae177e7
......@@ -43,17 +43,22 @@ var reverseCmd = &cobra.Command{
_ = json.Unmarshal(file, &parsedDeps)
fmt.Println("start rcall class :", className)
content := analyser.Analysis(className, *&parsedDeps)
content := analyser.Analysis(className, *&parsedDeps, WriteCallMap)
if remove != "" {
content = strings.ReplaceAll(content, remove, "")
}
cmd_util.WriteToCocaFile("rcall.dot", content)
cmd_util.ConvertToSvg("call")
cmd_util.ConvertToSvg("rcall")
},
}
func WriteCallMap(rcallMap map[string][]string) {
mapJson, _ := json.MarshalIndent(rcallMap, "", "\t")
cmd_util.WriteToCocaFile("rcallmap.json", string(mapJson))
}
func init() {
rootCmd.AddCommand(reverseCmd)
......
package rcall
import (
"encoding/json"
"github.com/phodal/coca/cmd/cmd_util"
"github.com/phodal/coca/core/context/call"
"github.com/phodal/coca/core/domain"
)
......@@ -14,12 +12,11 @@ func NewRCallGraph() RCallGraph {
return *&RCallGraph{}
}
func (c RCallGraph) Analysis(funcName string, clzs []domain.JClassNode) string {
func (c RCallGraph) Analysis(funcName string, clzs []domain.JClassNode, writeCallback func(rcallMap map[string][]string)) string {
var projectMethodMap = BuildProjectMethodMap(clzs)
rcallMap := BuildRCallMethodMap(clzs, projectMethodMap)
mapJson, _ := json.MarshalIndent(rcallMap, "", "\t")
cmd_util.WriteToCocaFile("rcallmap.json", string(mapJson))
writeCallback(rcallMap)
chain := c.buildRCallChain(funcName, rcallMap)
......@@ -45,9 +42,9 @@ func BuildRCallMethodMap(parserDeps []domain.JClassNode, projectMaps map[string]
for _, clz := range parserDeps {
for _, method := range clz.Methods {
var caller = method.BuildFullMethodName(clz)
for _, call := range method.MethodCalls {
if call.Class != "" {
callee := call.BuildFullMethodName()
for _, jMethodCall := range method.MethodCalls {
if jMethodCall.Class != "" {
callee := jMethodCall.BuildFullMethodName()
if projectMaps[callee] < 1 {
continue
}
......
......@@ -22,7 +22,7 @@ func TestRCallGraph_Analysis(t *testing.T) {
_ = json.Unmarshal(file, &parsedDeps)
content := analyser.Analysis("com.phodal.pholedge.book.BookFactory.create", *&parsedDeps)
content := analyser.Analysis("com.phodal.pholedge.book.BookFactory.create", *&parsedDeps, nil)
g.Expect(content).To(Equal(`digraph G {
rankdir = LR;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册