Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Phodal
Coca
提交
89a15c9b
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 搜索 >>
未验证
提交
89a15c9b
编写于
11月 06, 2019
作者:
P
Phodal Huang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: fix super issue
上级
0f1b02b1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
27 addition
and
10 deletion
+27
-10
adapter/call/JavaCallListener.go
adapter/call/JavaCallListener.go
+27
-10
未找到文件。
adapter/call/JavaCallListener.go
浏览文件 @
89a15c9b
package
call
import
(
"fmt"
"github.com/antlr/antlr4/runtime/Go/antlr"
.
"github.com/phodal/coca/adapter/models"
.
"github.com/phodal/coca/language/java"
...
...
@@ -20,6 +19,7 @@ var currentType string
var
fields
=
make
(
map
[
string
]
string
)
var
localVars
=
make
(
map
[
string
]
string
)
var
formalParameters
=
make
(
map
[
string
]
string
)
var
currentClzExtends
=
""
func
NewJavaCallListener
()
*
JavaCallListener
{
currentClz
=
""
...
...
@@ -49,6 +49,10 @@ func (s *JavaCallListener) EnterImportDeclaration(ctx *ImportDeclarationContext)
func
(
s
*
JavaCallListener
)
EnterClassDeclaration
(
ctx
*
ClassDeclarationContext
)
{
currentType
=
"Class"
currentClz
=
ctx
.
IDENTIFIER
()
.
GetText
()
if
ctx
.
EXTENDS
()
!=
nil
{
currentClzExtends
=
ctx
.
TypeType
()
.
GetText
()
}
}
func
(
s
*
JavaCallListener
)
EnterInterfaceDeclaration
(
ctx
*
InterfaceDeclarationContext
)
{
...
...
@@ -66,7 +70,6 @@ func (s *JavaCallListener) EnterInterfaceMethodDeclaration(ctx *InterfaceMethodD
typeType
:=
ctx
.
TypeTypeOrVoid
()
.
GetText
()
method
:=
&
JMethod
{
name
,
typeType
,
startLine
,
startLinePosition
,
stopLine
,
stopLinePosition
}
methods
=
append
(
methods
,
*
method
)
}
...
...
@@ -77,7 +80,7 @@ func (s *JavaCallListener) EnterFormalParameter(ctx *FormalParameterContext) {
func
(
s
*
JavaCallListener
)
EnterFieldDeclaration
(
ctx
*
FieldDeclarationContext
)
{
declarators
:=
ctx
.
VariableDeclarators
()
variableName
:=
declarators
.
GetParent
()
.
GetChild
(
0
)
.
(
antlr
.
ParseTree
)
.
GetText
()
for
_
,
declarator
:=
range
declarators
.
(
*
VariableDeclaratorsContext
)
.
AllVariableDeclarator
()
{
for
_
,
declarator
:=
range
declarators
.
(
*
VariableDeclaratorsContext
)
.
AllVariableDeclarator
()
{
value
:=
declarator
.
(
*
VariableDeclaratorContext
)
.
VariableDeclaratorId
()
.
(
*
VariableDeclaratorIdContext
)
.
IDENTIFIER
()
.
GetText
()
fields
[
value
]
=
variableName
}
...
...
@@ -138,14 +141,19 @@ func (s *JavaCallListener) EnterMethodCall(ctx *MethodCallContext) {
stopLinePosition
:=
startLinePosition
+
len
(
callee
)
fullType
:=
warpTargetFullType
(
targetType
)
fmt
.
Println
(
"callee: "
+
callee
+
" targetType: -> "
+
targetType
+
" fulltype: "
+
fullType
)
//fmt.Println("callee: " + callee + " targetType: -> " + targetType + " fulltype: " + fullType)
// TODO: 处理链试调用
if
targetType
==
"super"
{
targetType
=
currentClzExtends
}
if
fullType
!=
""
{
jMethodCall
:=
&
JMethodCall
{
removeTarget
(
fullType
),
""
,
targetType
,
callee
,
startLine
,
startLinePosition
,
stopLine
,
stopLinePosition
}
methodCalls
=
append
(
methodCalls
,
*
jMethodCall
)
}
else
{
if
ctx
.
GetText
()
==
targetType
{
methodName
:=
ctx
.
IDENTIFIER
()
.
GetText
()
jMethodCall
:=
&
JMethodCall
{
currentPkg
,
""
,
currentClz
,
methodName
,
startLine
,
startLinePosition
,
stopLine
,
stopLinePosition
}
jMethodCall
:=
&
JMethodCall
{
currentPkg
,
""
,
currentClz
,
methodName
,
startLine
,
startLinePosition
,
stopLine
,
stopLinePosition
}
methodCalls
=
append
(
methodCalls
,
*
jMethodCall
)
}
else
{
...
...
@@ -161,7 +169,6 @@ func (s *JavaCallListener) EnterExpression(ctx *ExpressionContext) {
targetType
:=
parseTargetType
(
text
)
fullType
:=
warpTargetFullType
(
targetType
)
startLine
:=
ctx
.
GetStart
()
.
GetLine
()
startLinePosition
:=
ctx
.
GetStart
()
.
GetColumn
()
stopLine
:=
ctx
.
GetStop
()
.
GetLine
()
...
...
@@ -210,10 +217,11 @@ func warpTargetFullType(targetType string) string {
return
currentPkg
+
"."
+
targetType
}
// for array
//
TODO: update
for array
split
:=
strings
.
Split
(
targetType
,
"."
)
str
:=
split
[
len
(
split
)
-
1
]
pureTargetType
:=
strings
.
ReplaceAll
(
strings
.
ReplaceAll
(
str
,
"["
,
""
),
"]"
,
""
)
str
:=
split
[
0
]
pureTargetType
:=
strings
.
ReplaceAll
(
strings
.
ReplaceAll
(
str
,
"["
,
""
),
"]"
,
""
)
for
index
:=
range
imports
{
imp
:=
imports
[
index
]
if
strings
.
HasSuffix
(
imp
,
pureTargetType
)
{
...
...
@@ -223,11 +231,20 @@ func warpTargetFullType(targetType string) string {
//maybe the same package
for
_
,
clz
:=
range
clzs
{
if
strings
.
HasSuffix
(
clz
,
"."
+
t
argetType
)
{
if
strings
.
HasSuffix
(
clz
,
"."
+
pureT
argetType
)
{
return
clz
}
}
//1. current package, 2. import by *
if
pureTargetType
==
"super"
{
for
index
:=
range
imports
{
imp
:=
imports
[
index
]
if
strings
.
HasSuffix
(
imp
,
currentClzExtends
)
{
return
imp
}
}
}
return
""
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录