func()

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)
	}
}