feat: fix call lookup position issue

上级 94b91c6e
......@@ -15,6 +15,7 @@ type CallCmdConfig struct {
Path string
ClassName string
RemoveName string
Lookup bool
}
var (
......@@ -38,7 +39,7 @@ var callGraphCmd = &cobra.Command{
_ = json.Unmarshal(file, &parsedDeps)
content := analyser.Analysis(callCmdConfig.ClassName, parsedDeps)
content := analyser.Analysis(callCmdConfig.ClassName, parsedDeps, callCmdConfig.Lookup)
if callCmdConfig.RemoveName != "" {
content = strings.ReplaceAll(content, callCmdConfig.RemoveName, "")
}
......@@ -55,4 +56,5 @@ func init() {
callGraphCmd.PersistentFlags().StringVarP(&callCmdConfig.ClassName, "className", "c", "", "class")
callGraphCmd.PersistentFlags().StringVarP(&callCmdConfig.Path, "dependence", "d", config.CocaConfig.ReporterPath+"/deps.json", "get dependence file")
callGraphCmd.PersistentFlags().StringVarP(&callCmdConfig.RemoveName, "remove", "r", "", "remove package ParamName")
callGraphCmd.PersistentFlags().BoolVarP(&callCmdConfig.Lookup, "lookup", "l", false, "call with rcall")
}
package call
import (
api_domain2 "github.com/phodal/coca/pkg/domain/api_domain"
"github.com/phodal/coca/pkg/application/rcall"
apidomain2 "github.com/phodal/coca/pkg/domain/api_domain"
"github.com/phodal/coca/pkg/domain/core_domain"
"github.com/phodal/coca/pkg/infrastructure/jpackage"
"strings"
......@@ -14,9 +15,18 @@ func NewCallGraph() CallGraph {
return CallGraph{}
}
func (c CallGraph) Analysis(funcName string, clzs []core_domain.CodeDataStruct) string {
func (c CallGraph) Analysis(funcName string, clzs []core_domain.CodeDataStruct, lookup bool) string {
methodMap := BuildMethodMap(clzs)
chain := BuildCallChain(funcName, methodMap, nil)
if lookup {
var projectMethodMap = rcall.BuildProjectMethodMap(clzs)
rcallMap := rcall.BuildRCallMethodMap(clzs, projectMethodMap)
graph := rcall.NewRCallGraph()
rCallChain := graph.BuildRCallChain(funcName, rcallMap)
chain = chain + rCallChain
}
dotContent := ToGraphviz(chain)
return dotContent
}
......@@ -25,7 +35,7 @@ func (c CallGraph) Analysis(funcName string, clzs []core_domain.CodeDataStruct)
func ToGraphviz(chain string) string {
//rankdir = LR;
var result = "digraph G {\n"
//result += "rankdir = LR;\n"
result += "rankdir = LR;\n"
result = result + chain
result = result + "}\n"
return result
......@@ -57,9 +67,9 @@ func BuildCallChain(funcName string, methodMap map[string][]string, diMap map[st
return "\n"
}
func (c CallGraph) AnalysisByFiles(restApis []api_domain2.RestAPI, deps []core_domain.CodeDataStruct, diMap map[string]string) (string, []api_domain2.CallAPI) {
func (c CallGraph) AnalysisByFiles(restApis []apidomain2.RestAPI, deps []core_domain.CodeDataStruct, diMap map[string]string) (string, []apidomain2.CallAPI) {
methodMap := BuildMethodMap(deps)
var apiCallSCounts []api_domain2.CallAPI
var apiCallSCounts []apidomain2.CallAPI
results := "digraph G { \n"
......@@ -71,7 +81,7 @@ func (c CallGraph) AnalysisByFiles(restApis []api_domain2.RestAPI, deps []core_d
apiCallChain := BuildCallChain(caller, methodMap, diMap)
chain = chain + apiCallChain
count := &api_domain2.CallAPI{
count := &apidomain2.CallAPI{
HTTPMethod: restApi.HttpMethod,
Caller: caller,
URI: restApi.Uri,
......
......@@ -24,9 +24,10 @@ func Test_ShouldBuildSuccessDataFromJson(t *testing.T) {
file := cmd_util.ReadFile(codePath)
_ = json.Unmarshal(file, &parsedDeps)
dotContent := analyser.Analysis("com.phodal.pholedge.book.BookController.createBook", parsedDeps)
dotContent := analyser.Analysis("com.phodal.pholedge.book.BookController.createBook", parsedDeps, false)
g.Expect(dotContent).To(Equal(`digraph G {
rankdir = LR;
"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.BookFactory.create";
"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.model.command.CreateBookCommand.getIsbn";
"com.phodal.pholedge.book.BookService.createBook" -> "com.phodal.pholedge.book.model.command.CreateBookCommand.getName";
......
package rcall
import (
"github.com/phodal/coca/pkg/application/call"
"github.com/phodal/coca/pkg/domain/core_domain"
)
......@@ -18,11 +17,20 @@ func (c RCallGraph) Analysis(funcName string, clzs []core_domain.CodeDataStruct,
writeCallback(rcallMap)
chain := c.buildRCallChain(funcName, rcallMap)
dotContent := call.ToGraphviz(chain)
chain := c.BuildRCallChain(funcName, rcallMap)
dotContent := ToGraphviz(chain)
return dotContent
}
// TODO: be a utils
func ToGraphviz(chain string) string {
var result = "digraph G {\n"
//result += "rankdir = LR;\n"
result = result + chain
result = result + "}\n"
return result
}
func BuildProjectMethodMap(clzs []core_domain.CodeDataStruct) map[string]int {
var maps = make(map[string]int)
for _, clz := range clzs {
......@@ -57,7 +65,7 @@ func BuildRCallMethodMap(parserDeps []core_domain.CodeDataStruct, projectMaps ma
var loopCount = 0
var lastChild = ""
func (c RCallGraph) buildRCallChain(funcName string, methodMap map[string][]string) string {
func (c RCallGraph) BuildRCallChain(funcName string, methodMap map[string][]string) string {
if loopCount >= 6 {
return "\n"
}
......@@ -71,7 +79,7 @@ func (c RCallGraph) buildRCallChain(funcName string, methodMap map[string][]stri
}
if len(methodMap[child]) > 0 {
lastChild = child
arrayResult = arrayResult + c.buildRCallChain(child, methodMap)
arrayResult = arrayResult + c.BuildRCallChain(child, methodMap)
}
if funcName == child {
continue
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册