Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Phodal
Coca
提交
208060a8
C
Coca
项目概览
Phodal
/
Coca
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Coca
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
208060a8
编写于
12月 15, 2019
作者:
P
Phodal Huang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
api: make first version
上级
1f0d4ddc
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
50 addition
and
5 deletion
+50
-5
.gitignore
.gitignore
+3
-1
cmd/api.go
cmd/api.go
+28
-0
src/adapter/api/JavaApiApp.go
src/adapter/api/JavaApiApp.go
+1
-2
src/adapter/api/JavaApiListener.go
src/adapter/api/JavaApiListener.go
+4
-1
src/domain/call_graph.go
src/domain/call_graph.go
+14
-1
未找到文件。
.gitignore
浏览文件 @
208060a8
...
...
@@ -59,4 +59,6 @@ apis.json
output.dot
call.dot
call.svg
output
\ No newline at end of file
output
api.dot
api.svg
\ No newline at end of file
cmd/api.go
浏览文件 @
208060a8
...
...
@@ -2,9 +2,13 @@ package cmd
import
(
.
"coca/src/adapter/api"
"coca/src/adapter/models"
.
"coca/src/utils"
"encoding/json"
"github.com/spf13/cobra"
"coca/src/domain"
"log"
"os/exec"
)
var
apiCmd
*
cobra
.
Command
=
&
cobra
.
Command
{
...
...
@@ -21,6 +25,30 @@ var apiCmd *cobra.Command = &cobra.Command{
cModel
,
_
:=
json
.
MarshalIndent
(
restApis
,
""
,
"
\t
"
)
WriteToFile
(
"apis.json"
,
string
(
cModel
))
var
parsedDeps
[]
models
.
JClassNode
file
:=
ReadFile
(
dependence
)
if
file
==
nil
{
log
.
Fatal
(
"lost file:"
+
dependence
)
}
_
=
json
.
Unmarshal
(
file
,
&
parsedDeps
)
var
apiCallers
[]
string
for
_
,
api
:=
range
restApis
{
apiCaller
:=
api
.
PackageName
+
"."
+
api
.
ClassName
+
"."
+
api
.
MethodName
apiCallers
=
append
(
apiCallers
,
apiCaller
)
}
analyser
:=
domain
.
NewCallGraph
()
dotContent
:=
analyser
.
AnalysisByFiles
(
apiCallers
,
parsedDeps
)
WriteToFile
(
"api.dot"
,
dotContent
)
cmd
:=
exec
.
Command
(
"dot"
,
[]
string
{
"-Tsvg"
,
"api.dot"
,
"-o"
,
"api.svg"
}
...
)
_
,
err
:=
cmd
.
CombinedOutput
()
if
err
!=
nil
{
log
.
Fatalf
(
"cmd.Run() failed with %s
\n
"
,
err
)
}
}
},
}
...
...
src/adapter/api/JavaApiApp.go
浏览文件 @
208060a8
...
...
@@ -43,8 +43,7 @@ func (j *JavaApiApp) AnalysisPath(codeDir string, depPath string) []RestApi {
antlr
.
NewParseTreeWalker
()
.
Walk
(
listener
,
context
)
apis
:=
listener
.
getClassApis
()
allApis
=
append
(
allApis
,
apis
...
)
allApis
=
listener
.
getClassApis
()
}
return
allApis
...
...
src/adapter/api/JavaApiListener.go
浏览文件 @
208060a8
...
...
@@ -30,7 +30,6 @@ var localVars = make(map[string]string)
var
currentRestApi
RestApi
var
RestApis
[]
RestApi
var
pathVars
=
make
(
map
[
string
]
string
)
var
currentClz
string
var
currentPkg
string
...
...
@@ -205,3 +204,7 @@ func (s *JavaApiListener) appendClasses(classes []models2.JClassNode) {
func
(
s
*
JavaApiListener
)
getClassApis
()
[]
RestApi
{
return
RestApis
}
func
(
s
*
JavaApiListener
)
getCurrentApi
()
RestApi
{
return
currentRestApi
}
src/domain/call_graph.go
浏览文件 @
208060a8
...
...
@@ -2,6 +2,7 @@ package domain
import
(
"coca/src/adapter/models"
"fmt"
)
type
CallGraph
struct
{
...
...
@@ -14,7 +15,6 @@ func NewCallGraph() CallGraph {
func
(
c
CallGraph
)
Analysis
(
funcName
string
,
clzs
[]
models
.
JClassNode
)
string
{
methodMap
:=
c
.
BuildMethodMap
(
clzs
)
BuildCallChain
(
funcName
,
methodMap
)
chain
:=
BuildCallChain
(
funcName
,
methodMap
)
dotContent
:=
toGraphviz
(
chain
)
return
dotContent
...
...
@@ -43,6 +43,18 @@ func BuildCallChain(funcName string, methodMap map[string][]string) string {
return
"
\n
"
}
func
(
c
CallGraph
)
AnalysisByFiles
(
callers
[]
string
,
deps
[]
models
.
JClassNode
)
string
{
methodMap
:=
c
.
BuildMethodMap
(
deps
)
results
:=
"digraph G {
\n
"
for
_
,
caller
:=
range
callers
{
fmt
.
Println
(
caller
)
chain
:=
BuildCallChain
(
caller
,
methodMap
)
results
=
results
+
"
\n
"
+
chain
}
return
results
+
"}
\n
"
}
func
(
c
CallGraph
)
BuildMethodMap
(
clzs
[]
models
.
JClassNode
)
map
[
string
][]
string
{
var
methodMap
=
make
(
map
[
string
][]
string
)
for
_
,
clz
:=
range
clzs
{
...
...
@@ -60,3 +72,4 @@ func (c CallGraph) BuildMethodMap(clzs []models.JClassNode) map[string][]string
return
methodMap
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录