in tools/go-agent/instrument/plugins/rewrite/func.go [49:83]
func (c *Context) Func(funcDecl *dst.FuncDecl, cursor *dstutil.Cursor) {
// only the static method needs rewrite
if funcDecl.Recv == nil {
// if the method name is generated, then ignore to enhance(for adapter)
if !strings.HasPrefix(funcDecl.Name.Name, GenerateMethodPrefix) && !c.isInitFunc(funcDecl) {
prefix := StaticMethodPrefix
if tools.ContainsDirective(funcDecl, consts.DirectivePublic) {
prefix = c.titleCase.String(GenerateMethodPrefix)
}
funcDecl.Name = dst.NewIdent(fmt.Sprintf("%s%s%s", prefix, c.currentPackageTitle, funcDecl.Name.Name))
}
} else if len(funcDecl.Recv.List) == 1 {
// if contains the receiver, then enhance the receiver type
field := funcDecl.Recv.List[0]
var typeName string
if len(field.Names) > 0 {
typeName = field.Names[0].Name
c.rewriteMapping.addVarMapping(typeName, typeName)
}
if k, v := c.enhanceTypeNameWhenRewrite(field.Type, field, -1); k != "" {
c.rewriteMapping.addTypeMapping(k, v)
}
}
c.initFunctionDetector(funcDecl)
// enhance method parameter and return value
c.enhanceFuncParameter(funcDecl.Type.Params)
c.enhanceFuncParameter(funcDecl.Type.Results)
// enhance the method body
for _, stmt := range funcDecl.Body.List {
c.enhanceFuncStmt(stmt)
}
}