in tools/go-agent/instrument/plugins/instrument.go [245:292]
func (i *Instrument) copyFrameworkFS(context *rewrite.Context, compilePkgFullPath, baseDir, packageName string) ([]string, error) {
subPkgPath := strings.TrimPrefix(compilePkgFullPath, i.realInst.BasePackage())
if subPkgPath == "" {
subPkgPath = "."
} else {
subPkgPath = subPkgPath[1:]
}
var debugBaseDir string
if i.compileOpts.DebugDir != "" {
pathBuilder := filepath.Join(i.compileOpts.DebugDir, "plugins", i.realInst.Name())
if subIns, ok := i.realInst.(instrument.SourceCodeDetector); ok {
pathBuilder = filepath.Join(pathBuilder, subIns.PluginSourceCodePath())
}
debugBaseDir = filepath.Join(pathBuilder, subPkgPath)
}
pkgCopiedEntries, err := i.realInst.FS().ReadDir(subPkgPath)
if err != nil {
return nil, err
}
files := make([]*rewrite.FileInfo, 0)
for _, entry := range pkgCopiedEntries {
if entry.IsDir() {
continue
}
if entry.Name() == "go.mod" || entry.Name() == "go.sum" || strings.HasSuffix(entry.Name(), "_test.go") {
continue
}
readFile, err1 := fs.ReadFile(i.realInst.FS(), filepath.Join(subPkgPath, entry.Name()))
if err1 != nil {
return nil, err1
}
if shouldContinue, err1 := i.processDirectiveInFile(context, readFile); err1 != nil {
return nil, err1
} else if shouldContinue {
continue
}
files = append(files, rewrite.NewFileWithDebug(packageName, entry.Name(), string(readFile), debugBaseDir))
}
rewrited, err := context.MultipleFilesWithWritten("skywalking_enhance_", baseDir, packageName, files)
if err != nil {
return nil, err
}
return rewrited, nil
}