in tools/go-agent/instrument/plugins/instrument.go [91:131]
func (i *Instrument) CouldHandle(opts *api.CompileOptions) bool {
excludePlugins := config.GetConfig().Plugin.Excluded.GetListStringResult()
excludePluginMap := make(map[string]bool, len(excludePlugins))
for _, v := range excludePlugins {
excludePluginMap[v] = true
}
for _, ins := range instruments {
// exclude the plugin at the compile phase if it's ignored
if excludePluginMap[ins.Name()] {
logrus.Infof("plugin is exclude: %s", ins.Name())
continue
}
// must have the same base package prefix
if !strings.HasPrefix(opts.Package, ins.BasePackage()) {
continue
}
// check the version of the framework could handler
version, err := i.tryToFindThePluginVersion(opts, ins)
if err != nil {
logrus.Warnf("ignore the plugin %s, because: %s", ins.Name(), err)
continue
}
if ins.VersionChecker(version) {
i.realInst = ins
i.compileOpts = opts
for _, p := range ins.Points() {
switch p.At.Type {
case instrument.EnhanceTypeMethod:
i.methodFilters = append(i.methodFilters, p)
case instrument.EnhanceTypeStruct:
i.structFilters = append(i.structFilters, p)
case instrument.EnhanceTypeForce:
i.forceEnhance = true
}
}
return true
}
}
return false
}