Fix enhance method error when unknown parameter type (#160)
diff --git a/CHANGES.md b/CHANGES.md
index f782716..4e98f9c 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -17,7 +17,8 @@
* Fix users can not use async api in toolkit-trace.
* Fix cannot enhance the vendor management project.
* Fix SW_AGENT_REPORTER_GRPC_MAX_SEND_QUEUE not working on metricsSendCh & logSendCh chans of gRPC reporter.
-* Fix ParseVendorModule error for special case in vendor/modules.txt
+* Fix ParseVendorModule error for special case in vendor/modules.txt.
+* Fix enhance method error when unknown parameter type.
#### Issues and PR
- All issues are [here](https://github.com/apache/skywalking/milestone/197?closed=1)
diff --git a/tools/go-agent/instrument/plugins/templates/method_intercept_after.tmpl b/tools/go-agent/instrument/plugins/templates/method_intercept_after.tmpl
index f17b10d..1aa0847 100644
--- a/tools/go-agent/instrument/plugins/templates/method_intercept_after.tmpl
+++ b/tools/go-agent/instrument/plugins/templates/method_intercept_after.tmpl
@@ -21,7 +21,8 @@
if invocation.returnValues[{{$index}}] != nil {
*ret_{{$index}} = (invocation.returnValues[{{$index}}]).({{$value.PackagedTypeName}})
} else {
- *ret_{{$index}} = {{$value.DefaultValueAsString}}
+ var tmp_{{$index}} {{$value.PackagedTypeName}}
+ *ret_{{$index}} = tmp_{{$index}}
}
{{- end }}
}
\ No newline at end of file
diff --git a/tools/go-agent/instrument/plugins/templates/method_intercept_before.tmpl b/tools/go-agent/instrument/plugins/templates/method_intercept_before.tmpl
index f6cbd07..e29f34b 100644
--- a/tools/go-agent/instrument/plugins/templates/method_intercept_before.tmpl
+++ b/tools/go-agent/instrument/plugins/templates/method_intercept_before.tmpl
@@ -25,18 +25,21 @@
panic("cannot found the argument index")
}
+{{- range $index, $value := .Results }}
+var def_res_{{$index}} {{$value.PackagedTypeName}}
+{{- end}}
// real invoke
if err := {{.InterceptorVarName}}.BeforeInvoke(invocation); err != nil {
// using go2sky log error
log.Warnf("execute interceptor before invoke error, instrument name: %s, interceptor name: %s, function ID: %s, error: %v",
"{{.InstrumentName}}", "{{.InterceptorDefineName}}", "{{.FuncID}}", err)
+
return {{ range $index, $value := .Results -}}
-{{$value.DefaultValueAsString}},
+def_res_{{$index}},
{{- end}}invocation, false
}
if (invocation.isContinue) {
{{- range $index, $value := .Results }}
- var def_res_{{$index}} {{$value.PackagedTypeName}}
if invocation.returnValues[{{$index}}] != nil {
def_res_{{$index}} = (invocation.returnValues[{{$index}}]).({{$value.PackagedTypeName}})
}
@@ -46,5 +49,5 @@
{{- end}}invocation, true
}
return {{ range $index, $value := .Results -}}
-{{- if ne $index 0}}, {{end}}{{$value.DefaultValueAsString }}
-{{- end}}{{if .Results}}, {{- end}}invocation, false
\ No newline at end of file
+def_res_{{$index}},
+{{- end}}invocation, false
\ No newline at end of file
diff --git a/tools/go-agent/tools/enhancement.go b/tools/go-agent/tools/enhancement.go
index 7b800fd..4171f61 100644
--- a/tools/go-agent/tools/enhancement.go
+++ b/tools/go-agent/tools/enhancement.go
@@ -19,8 +19,6 @@
import (
"fmt"
- "go/token"
- "strings"
"github.com/dave/dst"
"github.com/dave/dst/decorator"
@@ -31,10 +29,9 @@
const parameterAppender = ", "
type ParameterInfo struct {
- Name string
- Type dst.Expr
- DefaultValueAsString string
- TypeName string
+ Name string
+ Type dst.Expr
+ TypeName string
}
type PackagedParameterInfo struct {
@@ -141,24 +138,6 @@
Type: tp,
TypeName: GenerateTypeNameByExp(tp),
}
- var defaultNil = "nil"
- switch n := tp.(type) {
- case *dst.Ident:
- if n.Name == "string" {
- defaultNil = `""`
- } else if n.Name == "bool" {
- defaultNil = "false"
- } else if strings.HasPrefix(n.Name, "int") || strings.HasPrefix(n.Name, "uint") ||
- strings.HasPrefix(n.Name, "float") || n.Name == "byte" || n.Name == "rune" {
- defaultNil = "0"
- }
- case *dst.UnaryExpr:
- if n.Op == token.INT || n.Op == token.FLOAT {
- defaultNil = "0"
- }
- }
- result.DefaultValueAsString = defaultNil
-
return result
}
diff --git a/tools/go-agent/tools/enhancement_test.go b/tools/go-agent/tools/enhancement_test.go
index ea9058d..e2a8c51 100644
--- a/tools/go-agent/tools/enhancement_test.go
+++ b/tools/go-agent/tools/enhancement_test.go
@@ -23,11 +23,10 @@
"github.com/dave/dst"
)
-func buildParameterValidateInfo(name, typeName, defaultValue string) *ParameterInfo {
+func buildParameterValidateInfo(name, typeName string) *ParameterInfo {
return &ParameterInfo{
- Name: name,
- TypeName: typeName,
- DefaultValueAsString: defaultValue,
+ Name: name,
+ TypeName: typeName,
}
}
@@ -43,13 +42,13 @@
return false
}`,
recvs: []*ParameterInfo{
- buildParameterValidateInfo("skywalking_recv_0", "*Example", "nil"),
+ buildParameterValidateInfo("skywalking_recv_0", "*Example"),
},
params: []*ParameterInfo{
- buildParameterValidateInfo("skywalking_param_0", "int", "0"),
+ buildParameterValidateInfo("skywalking_param_0", "int"),
},
results: []*ParameterInfo{
- buildParameterValidateInfo("skywalking_result_0", "bool", "false"),
+ buildParameterValidateInfo("skywalking_result_0", "bool"),
},
},
{
@@ -57,13 +56,13 @@
return false
}`,
recvs: []*ParameterInfo{
- buildParameterValidateInfo("e", "*Example", "nil"),
+ buildParameterValidateInfo("e", "*Example"),
},
params: []*ParameterInfo{
- buildParameterValidateInfo("i", "int", "0"),
+ buildParameterValidateInfo("i", "int"),
},
results: []*ParameterInfo{
- buildParameterValidateInfo("b", "bool", "false"),
+ buildParameterValidateInfo("b", "bool"),
},
},
}
@@ -95,8 +94,5 @@
if exp.TypeName != act.TypeName {
t.Errorf("case %d:%s: expected type %s , actual %s", inx, flistType, exp.TypeName, act.TypeName)
}
- if exp.DefaultValueAsString != act.DefaultValueAsString {
- t.Errorf("case %d:%s: expected default value %s , actual %s", inx, flistType, exp.DefaultValueAsString, act.DefaultValueAsString)
- }
}
}