func renameSymbol(sym st.Symbol, newName string, programTree *program.Program) (fnames []string, fsets []*token.FileSet, files []*ast.File, err *errors.GoRefactorError) { filesMap := make(map[string]bool) for _, pos := range sym.Positions() { filesMap[pos.Filename] = true } l, i := len(filesMap), 0 fnames, fsets, files = make([]string, l), make([]*token.FileSet, l), make([]*ast.File, l) for f, _ := range filesMap { fnames[i] = f i++ } for i, f := range fnames { pack, file := programTree.FindPackageAndFileByFilename(f) positions := []token.Position{} for _, pos := range sym.Positions() { if pos.Filename == f { positions = append(positions, pos) } } if _, fsets[i], files[i], err = printerUtil.RenameIdents(pack.FileSet, programTree.IdentMap, f, file, positions, newName); err != nil { return nil, nil, nil, err } } for ident, _ := range sym.Identifiers() { ident.Name = newName } return fnames, fsets, files, nil }