Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Phodal
Coca
提交
595ead42
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,发现更多精彩内容 >>
未验证
提交
595ead42
编写于
2月 07, 2020
作者:
P
Phodal Huang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: fix chain call issue
上级
8b4a1fb0
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
41 addition
and
40 deletion
+41
-40
pkg/application/analysis/javaapp/java_full_app_test.go
pkg/application/analysis/javaapp/java_full_app_test.go
+3
-3
pkg/infrastructure/ast/ast_java/ast_java_target_handler.go
pkg/infrastructure/ast/ast_java/ast_java_target_handler.go
+32
-30
pkg/infrastructure/ast/ast_java/java_full_converter.go
pkg/infrastructure/ast/ast_java/java_full_converter.go
+1
-0
pkg/infrastructure/ast/ast_java/java_full_listener.go
pkg/infrastructure/ast/ast_java/java_full_listener.go
+5
-7
未找到文件。
pkg/application/analysis/javaapp/java_full_app_test.go
浏览文件 @
595ead42
...
@@ -221,7 +221,7 @@ func Test_BuilderCallSplitIssue(t *testing.T) {
...
@@ -221,7 +221,7 @@ func Test_BuilderCallSplitIssue(t *testing.T) {
}
}
}
}
g
.
Expect
(
methodCallMap
[
"assertThat"
]
.
NodeName
)
.
To
(
Equal
(
"
assertThat
"
))
g
.
Expect
(
methodCallMap
[
"assertThat"
]
.
NodeName
)
.
To
(
Equal
(
""
))
g
.
Expect
(
methodCallMap
[
"isFalse"
]
.
NodeName
)
.
To
(
Equal
(
"assertThat"
))
g
.
Expect
(
methodCallMap
[
"isFalse"
]
.
NodeName
)
.
To
(
Equal
(
"assertThat"
))
}
}
...
@@ -289,6 +289,6 @@ func Test_NormalChainCall(t *testing.T) {
...
@@ -289,6 +289,6 @@ func Test_NormalChainCall(t *testing.T) {
calls
:=
callNodes
[
0
]
.
Functions
[
0
]
.
FunctionCalls
calls
:=
callNodes
[
0
]
.
Functions
[
0
]
.
FunctionCalls
g
.
Expect
(
len
(
calls
))
.
To
(
Equal
(
2
))
g
.
Expect
(
len
(
calls
))
.
To
(
Equal
(
2
))
//
g.Expect(calls[1].NodeName).To(Equal("UriComponentsBuilder"))
g
.
Expect
(
calls
[
1
]
.
NodeName
)
.
To
(
Equal
(
"UriComponentsBuilder"
))
//
g.Expect(calls[1].MethodName).To(Equal("buildAndExpand"))
g
.
Expect
(
calls
[
1
]
.
MethodName
)
.
To
(
Equal
(
"buildAndExpand"
))
}
}
pkg/infrastructure/ast/ast_java/ast_java_target_handler.go
浏览文件 @
595ead42
...
@@ -92,37 +92,39 @@ func HandleEmptyFullType(ctx *parser.MethodCallContext, targetType string, metho
...
@@ -92,37 +92,39 @@ func HandleEmptyFullType(ctx *parser.MethodCallContext, targetType string, metho
targetType
=
clz
targetType
=
clz
}
else
{
}
else
{
targetType
=
buildSelfThisTarget
(
targetType
)
if
strings
.
Contains
(
targetType
,
"this."
)
{
targetType
=
buildMethodNameForBuilder
(
ctx
,
targetType
)
targetType
=
buildSelfThisTarget
(
targetType
)
}
return
targetType
,
packageName
}
func
buildMethodNameForBuilder
(
ctx
*
parser
.
MethodCallContext
,
targetType
string
)
string
{
switch
parentCtx
:=
ctx
.
GetParent
()
.
(
type
)
{
case
*
parser
.
ExpressionContext
:
switch
parentParentCtx
:=
parentCtx
.
GetParent
()
.
(
type
)
{
case
*
parser
.
VariableInitializerContext
:
switch
varDeclCtx
:=
parentParentCtx
.
GetParent
()
.
(
type
)
{
case
*
parser
.
VariableDeclaratorContext
:
targetType
=
getTargetFromVarDecl
(
varDeclCtx
,
targetType
)
}
}
}
return
targetType
}
func
getTargetFromVarDecl
(
ctx
*
parser
.
VariableDeclaratorContext
,
targetType
string
)
string
{
switch
x
:=
ctx
.
GetParent
()
.
(
type
)
{
case
*
parser
.
VariableDeclaratorsContext
:
switch
parentType
:=
x
.
GetParent
()
.
(
type
)
{
case
*
parser
.
LocalVariableDeclarationContext
:
{
targetType
=
parentType
.
TypeType
()
.
GetText
()
}
}
}
//targetType = buildMethodNameForBuilder(ctx, targetType)
}
}
return
targetType
return
targetType
,
packageName
}
}
// todo: check usecases
//func buildMethodNameForBuilder(ctx *parser.MethodCallContext, targetType string) string {
// switch parentCtx := ctx.GetParent().(type) {
// case *parser.ExpressionContext:
// switch parentParentCtx := parentCtx.GetParent().(type) {
// case *parser.VariableInitializerContext:
// switch varDeclCtx := parentParentCtx.GetParent().(type) {
// case *parser.VariableDeclaratorContext:
// targetType = getTargetFromVarDecl(varDeclCtx, targetType)
// }
// }
// }
//
// return targetType
//}
//
//func getTargetFromVarDecl(ctx *parser.VariableDeclaratorContext, targetType string) string {
// switch x := ctx.GetParent().(type) {
// case *parser.VariableDeclaratorsContext:
// switch parentType := x.GetParent().(type) {
// case *parser.LocalVariableDeclarationContext:
// {
// targetType = parentType.TypeType().GetText()
// }
// }
// }
// return targetType
//}
pkg/infrastructure/ast/ast_java/java_full_converter.go
浏览文件 @
595ead42
...
@@ -45,6 +45,7 @@ func BuildMethodCallMethod(jMethodCall *core_domain.CodeCall, callee string, tar
...
@@ -45,6 +45,7 @@ func BuildMethodCallMethod(jMethodCall *core_domain.CodeCall, callee string, tar
if
isChainCall
(
targetType
)
{
if
isChainCall
(
targetType
)
{
split
:=
strings
.
Split
(
targetType
,
"."
)
split
:=
strings
.
Split
(
targetType
,
"."
)
targetType
=
split
[
0
]
targetType
=
split
[
0
]
targetType
=
ParseTargetType
(
targetType
)
}
}
jMethodCall
.
Package
=
packageName
jMethodCall
.
Package
=
packageName
...
...
pkg/infrastructure/ast/ast_java/java_full_listener.go
浏览文件 @
595ead42
...
@@ -518,15 +518,13 @@ func isChainCall(targetType string) bool {
...
@@ -518,15 +518,13 @@ func isChainCall(targetType string) bool {
}
}
func
buildSelfThisTarget
(
targetType
string
)
string
{
func
buildSelfThisTarget
(
targetType
string
)
string
{
isSelfFieldCall
:=
strings
.
Contains
(
targetType
,
"this."
)
targetType
=
strings
.
ReplaceAll
(
targetType
,
"this."
,
""
)
if
isSelfFieldCall
{
for
_
,
field
:=
range
fields
{
targetType
=
strings
.
ReplaceAll
(
targetType
,
"this."
,
""
)
if
field
.
TypeValue
==
targetType
{
for
_
,
field
:=
range
fields
{
targetType
=
field
.
TypeType
if
field
.
TypeValue
==
targetType
{
targetType
=
field
.
TypeType
}
}
}
}
}
return
targetType
return
targetType
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录