in tools/go-agent/instrument/plugins/instrument.go [133:166]
func (i *Instrument) FilterAndEdit(path string, curFile *dst.File, cursor *dstutil.Cursor, allFiles []*dst.File) bool {
switch n := cursor.Node().(type) {
case *dst.TypeSpec:
for _, filter := range i.structFilters {
if !(i.verifyPackageIsMatch(path, filter) && i.validateStructIsMatch(filter.At, n, allFiles)) {
continue
}
i.enhanceStruct(i.realInst, filter, n, path)
tools.LogWithStructEnhance(i.compileOpts.Package, n.Name.Name, "", "adding enhanced instance field")
i.containsEnhance = true
return true
}
case *dst.FuncDecl:
for _, filter := range i.methodFilters {
if !(i.verifyPackageIsMatch(path, filter) && i.validateMethodInsMatch(filter.At, n, allFiles)) {
continue
}
i.importAnalyzer.AnalyzeFileImports(path, curFile)
i.enhanceMethod(i.realInst, filter, n, path)
var receiver string
if n.Recv != nil && len(n.Recv.List) > 0 {
receiver = tools.GenerateTypeNameByExp(n.Recv.List[0].Type)
}
tools.LogWithMethodEnhance(i.compileOpts.Package, receiver, n.Name.Name, "adding enhanced method")
i.containsEnhance = true
return true
}
}
if i.forceEnhance && !i.containsEnhance {
i.containsEnhance = true
return true
}
return false
}