Beispiel #1
0
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
}